Abspielen eines Songs, der dazu führt, dass WP7 auf dem Telefon abstürzt, aber nicht auf dem Emulator

13

Ich versuche, ein Lied in ein Spiel zu implementieren, das mit dem Spielen beginnt und unter Windows Phone 7 über XNA 4.0 fortlaufend wiederholt wird. Auf dem Emulator funktioniert dies einwandfrei. Bei der Bereitstellung auf einem Telefon wird jedoch lediglich ein schwarzer Bildschirm angezeigt, bevor Sie zum Startbildschirm zurückkehren. Hier ist der fragliche Schurkencode. Wenn Sie diesen Code auskommentieren, funktioniert die App auf dem Telefon einwandfrei:

// in the constructor fields
private Song song;

// in the LoadContent() method
song = Content.Load<Song>("song");

// in the Update() method
if (MediaPlayer.GameHasControl && MediaPlayer.State != MediaState.Playing)
{
    MediaPlayer.Play(song);
}

Die Song-Datei selbst ist eine 2:53 lange .wma-Datei mit 2,28 MB und einer Bitrate von 106 KBit / s.

Wieder funktioniert dies perfekt auf dem Emulator, läuft aber überhaupt nicht auf dem Telefon. Vielen Dank für jede Hilfe, die Sie zur Verfügung stellen können!

Michael Zehnich
quelle
4
Versuchen Sie, einen Try-Catch durchzuführen, und prüfen Sie, welche Ausnahme Sie erhalten. Das sollte dabei helfen, etwas Hilfe zu bekommen.
Ray Dey
Guter Rat. Die Ausnahmebedingung lautet "System.InvalidOperationException: Songwiedergabe fehlgeschlagen. Vergewissern Sie sich, dass der Song nicht DRM-geschützt ist." Außerdem habe ich versucht, mit dem Lied als MP3 zu codieren und habe die gleichen Ergebnisse (im Emulator gearbeitet, funktioniert nicht im Telefon). Nebenfrage: Gibt es eine einfache Möglichkeit, Debug-Text auf dem Telefon auszudrucken / zu speichern? Meine einzige Möglichkeit war, den Text auf dem Bildschirm zu zeichnen.
Michael Zehnich

Antworten:

13

Wir haben das herausgefunden. Die Informationen sind online verfügbar, aber wirklich gut versteckt, daher werde ich sie aus gutem Grund hier posten.

Grundsätzlich gilt: Wenn das Telefon an einen Computer gebunden ist und die Zune-Software ausgeführt wird, werden die Medien auf dem Telefon gesperrt, was bedeutet, dass MediaPlayers in Apps niemals die Berechtigung haben, einen Song abzuspielen.

Damit es funktioniert, muss der Benutzer das Telefon abkoppeln (dh das USB-Kabel abziehen) oder das Windows Phone Connect-Tool verwenden, das im Hinblick auf das Debuggen für dieses Problem entwickelt wurde: http: // msdn. microsoft.com/en-us/library/gg180729%28v=VS.92%29.aspx - Ich habe das Tool nicht ausprobiert, aber das Lösen der Verbindung hat wie ein Zauber funktioniert.

Wenn die App nicht berechtigt ist, einen Titel abzuspielen, stürzt sie ab, es sei denn, die Ausnahme wird behandelt. Verwenden Sie daher unbedingt Try / Catch-Blöcke. Die gefangene Ausnahme kann einfach ignoriert werden.

Michael Zehnich
quelle
1
Ah, die Freuden von DRM.
Jari Komppa
1
Gut zu wissen, ärgerlich, wie ich mir vorstellen kann, stoßen einige Entwickler auf dieses Problem.
Ray Dey
2

Die Antwort von Michael Zehnich ist in der Tat richtig. Allerdings bin ich auf ein anderes Problem gestoßen, das die gleiche Ausnahme verursacht.

Das Problem für mich war, dass mir die ID_CAP_MEDIALIB-Funktion in meiner WMAppManifest.xml fehlte.

<Capability Name="ID_CAP_MEDIALIB"/>

Hoffe das hilft.

mikeesouth
quelle