2017-05-03 9 views
0

Ich habe eine URL. Es sieht wie folgt aus:Streaming .mp3 mit AVURLAsset + AVPlayerItem + AVPLayer

https://content.stage.someCompany.net/deliveries/artistNameHere/songNameHere-128.mp3?Expires=someNumberHere&Signature=someReallyReallyReallyLongStringHere&Key-Pair-Id=someIdHere 

Lassen Sie mich brechen sie in Stücke:

https://content.stage.someCompany.net/deliveries/artistNameHere/songNameHere-128.mp3 

?Expires=someNumberHere 

&Signature=someReallyReallyReallyLongStringHere 

&Key-Pair-Id=someIdHere 

Wie Sie sehen, es ist nur ein besserer .mp3 zu 128 kbps begrenzt, mit einem gewissen Sicherheits Sachen am Ende .

Wenn ich es in Safari auf meinem Mac lade, wird es abgespielt. Wenn ich es an einen AVPlayer-Konstruktor in meiner iOS-App übergebe, wird es ebenfalls abgespielt.

Wenn ich es jedoch verwende, um ein AVURLAsset zu erstellen, meldet es, dass .isPlayable falsch ist. Wenn ich hartnäckig darauf beharre, basierend auf diesem Asset ein AVPlayerItem zu erstellen, wird AVPlayerItemStatusFailed gemeldet.

Unnötig zu sagen, dass unter diesen Bedingungen meine AVURLAsset + AVPlayerItem + AVPLayer-Infrastruktur, die in player.play() gipfelt, tatsächlich keine Musik spielt.

Allerdings ist es erfolgreich zu spielen, wenn ich andere URLs ersetzen, wie Apples eigene https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8

oder

(einige zufällige .mp3 von einem anderen Stackoverflow Thema) http://podcast.cbc.ca/mp3/podcasts/asithappens_20160907_50906.mp3

Die Unterschiede, die ich sehe: Apples URL ist in der Tat eine "Playlist" irgendeiner Art, während die zweite in einer Ebene "zivilisiert" .mp3 ist. Kein Sicherheitsmambo-Jumbo mehr am Ende der Verbindung.

Warum wird meine URL nicht abgespielt? Muss ich etwas Bestimmtes mit dem Sicherheitsmaterial tun? Im Moment bin ich nur naiv "hey, AVURLAsset ... hier ist meine (vollständige) URL ... mach deine Sachen damit ..."

+0

Nun, die Arbeitsproben, die Sie zur Verfügung gestellt haben, hatten keine URL-Attribute. Wird Ihre Anfrage vom Webserver oder etwas anderem umgeleitet und verweist nicht direkt auf die Datei? – Lepidopteron

Antwort

0

Gefunden.

Die Links, die ich erhalte, sind nur einmal gültig. Anscheinend ist deshalb "die Sicherheit" am Ende von ihnen.

Testen eines in Safari und "sehen, dass es funktioniert" macht es ungültig. Anschließend versuchen Sie dasselbe in den App-Ergebnissen. IsPlayable = false. Wenn Sie einfach & direkt in der App verwenden, wird ".isPlayable = true" angezeigt.

Also AVURLAsset + AVPlayerItem + AVPLayer funktionieren gut. Ich war nur ein verdammter Idiot.

Verwandte Themen