Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS 10 AVPlayer will not stream video from URL with no extension and with video/mp4 as content type

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?

like image 799
Sommer Avatar asked Dec 08 '16 23:12

Sommer


2 Answers

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!

like image 56
Sommer Avatar answered Nov 07 '22 11:11

Sommer


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
like image 26
Bluewings Avatar answered Nov 07 '22 11:11

Bluewings