6
votes

Currently, we are using a standard AVPlayer via AVPlayerViewController to play video. We are streaming video from a url in the format https://ourdomain/media/mediaid?jwt=authTokenHere. The url, as you can see, has no extension; however the headers are being set on the payload to indicate that the response is a video.

HTTP Reponse Headers

Though the links results in the video playing fine in desktop Safari and Chrome, it will not play via iOS's AVPlayer in our application. Is there some particular format that AVPlayer expects?

2
I believe media played in AVPlayer must have a file extension, I bumped into this once with files I was playing locally that had no extension. Added .mp4 and voila.Tim Johnsen

2 Answers

3
votes

Alright - ended up discovering the answer to this is multifaceted. Here's what I needed to do to get things working.

  1. Files did indeed need to have extensions.
  2. The server was not correctly configured. It need to provide a progressive download response by responding with a range of headers.

By updating our backend to provide this response AND append the correct extension to the video files, we are now streaming to AVPlayer as expected. Thank you to everyone who offered tips!

2
votes

AVURLAsset is require a file extension to work. unfortunately there are already some radars open for the same issue from iOS 5 but it seems even it is not updated on iOS 10.

Radar links:

AVURLAsset should not require a file extension to work

AVURLAsset should not require a file extension to work

WorkAround / Hack:

Cycle through the playable MIME types and create a symbolic links to the actual file with the extension and check if they are playable.

Note:

  • Symbolic Link will be deleted when the app entered into background
  • To Create symbolic link check this SO answers