我想在iPad上播放一部iOS 4.3的电影。我已经成功地使用MPMoviePlayerController和AVPlayer从远程URL加载文件,当文件名有文件扩展名时。但是,当我使用一个不返回文件名(只是一个无法猜测的随机名称)的CDN时,MPMoviePlayerController和AVPlayer似乎都无法科普。
有没有办法告诉任何一个播放器,这真的是一部X类型的电影,它应该继续播放它?
MPMoviePlayerController将从其已更改状态通知中返回以下错误:
{
MPMoviePlayerPlaybackDidFinishReasonUserInfoKey = 1;
error = "Error Domain=MediaPlayerErrorDomain Code=-12847 \"This movie format is not supported.\" UserInfo=0x5b60030 {NSLocalizedDescription=This movie format is not supported.}";
}
我知道该文件是一个有效的m4v文件,因为当我重命名它的时候一切都很好。
8条答案
按热度按时间6tdlim6h1#
临时文件
创建符号链接
通过slink播放视频
ulmd4ohb2#
如果播放器不能猜出文件格式,你需要检查CDN是否发送了正确的mime类型。我的猜测是,你的CDN不能正确地猜出mime类型,播放器也不能。
在大多数情况下,这是由于CDN呈现HTTP报头的方式。检查“Content-Type”报头是否设置为与您的内容匹配的视频格式。
bxgwgixi3#
WebKit通过一个PrivateAVURLAsset选项处理此问题:
AVURLAssetOutOfBandMIMETypeKey
,当您在HTML的video
标签中指定MIME类型时,会使用此选项。您可以使用此选项,例如:
由于它是一个私钥,如果您计划将其提交到AppStore,则可能需要对其进行模糊处理。
WebKit源代码可在此处找到:https://opensource.apple.com/source/WebCore/WebCore-7604.1.38.1.6/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm.auto.html
cyvaqqii4#
终于,我找到了答案。
您应该使用AVURLAsset(AVAsset的子类)并在选项输入中设置MIMEType:
来源-〉https://stackoverflow.com/a/54087143/6736184
f2uvfpb95#
iPhone支持H.264,MPEG-4,.mp4,.m4v,.mov格式的视频和AAC,MP3,M4a,Apple无损和Audible格式的音频文件。您可以使用NSFileManager的-contentsOfDirectoryAtPath:error:方法来获取一个包含目录内容的数组(作为字符串)。然后,您只需执行字符串操作。
holgip5t6#
迪伦说得对。
MPMoviePlayer和AVPlayer都需要一个文件扩展名才能从URL播放文件,否则会显示错误消息。最好使用一些技巧。
jfgube3f7#
如果你在获取连接的ContentType时遇到问题,你可以在可播放的MIME类型之间循环,并创建指向扩展名为的实际文件的符号链接,然后检查它们是否可播放。
3pvhb19x8#
这是一种技巧,但你可以做的是通过一个方法运行每个名称,该方法检查后面是否有三个字符的句点。如果没有,就自动附加.m4v。或者获取MIME类型并根据返回的类型自动附加扩展名。如果有,请查找带有NSString的文档以获得更多信息。祝你好运!如果有帮助,请告诉我。