如何在iOS中播放没有文件扩展名的URL视频?

时间:2015-10-05 17:09:29

标签: ios objective-c video avplayer

我需要在此网址播放视频:http://ep-lin-upload.s3.amazonaws.com/vupl_lin/F64/CDF/F64CDF3B0348471E95C244DE2DDDD3F3

视频的mime类型为:video / mp4

NSURL *adURL = [NSURL URLWithString:@"http://ep-lin-upload.s3.amazonaws.com/vupl_lin/F64/CDF/F64CDF3B0348471E95C244DE2DDDD3F3"];

AVPlayer *player = [AVPlayer playerWithURL:adURL];

此代码适用于具有文件扩展名的网址。但是,如果我认为没有文件扩展名,AVPlayer无法识别mime类型。我怎么能绕过这个?

1 个答案:

答案 0 :(得分:2)

注意:我认为Tom的评论是正确的,如果服务器在响应中包含正确的MIME类型,播放器几乎肯定会正确处理文件。

话虽如此,即使您的用例是基于iOS客户端,浏览器中的行为也很有趣:

以下小提琴适用于Mac上的Chrome和Windows上的IE,但不适用于Safari:



<video width="320" height="240" controls>
    <source src="http://ep-lin-upload.s3.amazonaws.com/vupl_lin/F64/CDF/F64CDF3B0348471E95C244DE2DDDD3F3" type="video/mp4">
</video>
&#13;
&#13;
&#13;

在不同的服务器上测试,即不使用Amazon S3,以及使用不同的mp4视频(例如BigBuckBunny)会产生相同的结果:Chrome和IE很高兴,即使扩展程序不存在但Safari似乎需要它或它将会不播放视频。

更新(或者更确切地说,更新更新):在Safari和Chrome中查看请求和响应,似乎Safari也没有在请求消息中发送任何标头。经过一些搜索后,这似乎是一个以前见过的问题,S3将拒绝没有引用标头的请求。您可以更新S3策略以允许特殊的引用标头“空”&#39; - 见下面的信息。

但是,鉴于在不同的服务器上存在相同的行为,Chrome和IE似乎更有可能认为&#39; type = video / mp4&#39; HTML中的信息是正确的,因此以这种方式解释内容,而Safari查看响应中的内容类型以做出决定(即Chrome将播放返回的文件作为视频,即使响应标题显示&#39; Content-Type :application / octet-stream&#39;而不是&#39; video / mp4&#39;)。

有关上述S3标头策略的更多信息,请参阅“限制访问特定HTTP引用者”部分&#34;在此S3策略页面中,有关策略和referrer标头的更多信息:

特别注意以下内容:

  

假设您有一个域名网站(www.example.com或example.com),其中包含存储在S3存储桶中的照片和视频的链接examplebucket。默认情况下,所有S3资源都是私有的,因此只有创建资源的AWS账户才能访问它们。要允许从您的网站对这些对象进行读访问,您可以使用aws:referer键添加一个允许s3:GetObject权限的存储桶策略,其中get请求必须来自特定网页。