如何在iOS上用MPMoviePlayerController或AVPlayer播放没有文件扩展名的电影文件?
我想在iPad上用iOS 4.3播放电影。 当文件名具有文件扩展名时,我已成功使用MPMoviePlayerController和AVPlayer从远程URL加载文件。 但是,当我使用不返回文件名的CDN(只是一个不可猜测的随机名)时,MPMoviePlayerController或AVPlayer似乎都无法应付。
有没有办法告诉任何一个玩家,它确实是一个xtypes的电影,它应该继续玩呢?
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文件,因为当我重命名它一切都很好。
如果播放器无法猜测文件格式,则需要检查CDN是否发回了正确的MIMEtypes。 我的猜测是你的CDN无法正确猜测mimetype,玩家也不能。
在大多数情况下,这是由于CDN如何呈现HTTP标头。 检查“Content-Type”标题是否设置为与您的内容匹配的video格式。
在tmp文件
NSString* _filePath
创build符号链接
NSFileManager *filemgr = [NSFileManager defaultManager]; NSString *slink = [_filePath stringByAppendingPathExtension:@"m4v"]; if (![filemgr fileExistsAtPath:slink]) { NSError *error = nil; [filemgr createSymbolicLinkAtPath:[_filePath stringByAppendingPathExtension:@"m4v"] withDestinationPath: _filePath error: &error]; if (error) { ... } } ...
通过slink播放video
迪伦是正确的。
MPMoviePlayer和AVPlayer都需要一个文件扩展名才能播放来自URL的文件,否则会显示错误信息。 更好地使用某种技巧。
iPhone支持H.264,MPEG-4格式的.mp4,.m4v,.mov格式以及AAC,MP3,M4a,Apple无损和Audible格式的audio文件。 你可以使用NSFileManager的-contentsOfDirectoryAtPath:error:方法来获得一个包含目录内容(作为string)的数组。然后你只需要进行string操作。
如果您在连接的ContentType时遇到问题,您可以循环播放可播放的MIMEtypes,并使用扩展名创build带有实际文件的符号链接,并检查它们是否可播放。 像这样:
NSLog(@"linked path: %@",[videoURL absoluteString]); NSString* linkedPath; AVURLAsset* asset; NSFileManager *filemgr = [NSFileManager defaultManager]; for (NSString* string in [AVURLAsset audiovisualMIMETypes]) { if ([string containsString:@"video/"]) { NSLog(@"Trying: %@",string); linkedPath = [[videoURL absoluteString] stringByAppendingPathExtension:[string stringByReplacingOccurrencesOfString:@"video/" withString:@""]]; NSLog(@"linked path: %@",linkedPath); if (![filemgr fileExistsAtPath:linkedPath]) { NSError *error = nil; [filemgr createSymbolicLinkAtURL:[NSURL URLWithString:linkedPath] withDestinationURL:videoURL error:&error]; if (error) { NSLog(@"error %@",error.localizedDescription); } } asset = [AVURLAsset assetWithURL:[NSURL URLWithString:linkedPath]]; if ([asset isPlayable]) { NSLog(@"Playable"); break; }else{ NSLog(@"Not Playable"); asset = nil; } } }
这是一种黑客,但你可以做的是通过一个方法来检查每个名字后面有三个字符。 如果不是,则自动附加.m4v。 或者获取MIMEtypes并根据返回的types自动附加扩展名。 如果可供使用的话。 使用NSString查找文档以获取更多信息。 祝你好运! 让我知道这是否有帮助。
- Apple TV上的AirPlay元数据(AVPlayer – MPVolumeView)
- iOS – AVPlayer seekToTime重新开始播放currentItem
- iOS AVPlayer在播放图标上显示交叉线的屏幕
- 迅速。 AVPlayer。 如何追踪歌曲播放完毕?
- 使用AVPlayer的audioAirplay不能在后台工作
- AVPlayer不使用dynamicURL播放stream媒体广播
- 从另一个ViewController在swift中调用函数
- 如何使用UICollectionView玩Facebook风格的video
- Swift AVPlayerViewController添加AirPlay