AVPlayer 无法在 iOS8 上播放 NSDocuments 目录中的视频

Posted

技术标签:

【中文标题】AVPlayer 无法在 iOS8 上播放 NSDocuments 目录中的视频【英文标题】:AVPlayer unable to play video from NSDocuments Directory on iOS8 【发布时间】:2014-09-09 11:12:34 【问题描述】:

我正在尝试让我的应用播放已下载到文档目录的视频。

我的代码在 ios 7.1 模拟器上测试时有效,但在 iOS 8.0 设备或 iOS 8.0 模拟器上测试时无效。没有任何错误,AVPlayer 不播放视频并显示黑色视图。

我还使用 XCode 的 Organizer 检查了我设备的 Document 文件夹,文件似乎已成功下载。

这是我的代码的简化版本。

// file_path is a string that stores the path to the video file a println of it shows
// "/var/mobile/Containers/Data/Application/83C7837C-59B5-4767-A579-7CE758A93C6F/Documents/og4gr.mp4"
var path:NSURL = NSURL.fileURLWithPath(file_path, isDirectory: false);
_player = AVPlayer(URL: path);

有没有其他人遇到过这种情况?感谢您的宝贵时间!

【问题讨论】:

我希望看到带有playerWithURLinitWithURL 的代码?您在AVPlayer 上拨打play 吗?你检查过路径是否区分大小写? 嗨!谢谢你的评论。是的,我使用的是 swift,所以 AVPlayer (URL:path) 相当于目标 c 中的 initWithURL。我不知道我应该如何检查区分大小写。你能详细说明一下吗? iOS 模拟器使用不区分大小写的文件和路径,但设备区分大小写。我知道您提到它不适用于 iOS 8 模拟器,但值得检查。除此之外,您是否检查过包含error 属性的AVPlayerItem _player.currentItem?你能NSLogAVPlayerItem 属性并检查它们是否都正确且没有错误。 我检查了 _player.currentItem,在 iOS8 中它是 nil 但在 iOS7 中属性显示正确。 <AVPlayerItem: 0x7ada5f10, asset = <AVURLAsset: 0x7ada74a0, URL = file:///Users/Chris/Library/Developer/CoreSimulator/Devices/EBD68AEE-7F40-4635-A4CC-FDD85DEFF627/data/Applications/D700A412-967A-4619-AE73-9EA1131647EF/Documents/og4gr.mp4>> file_path 来自哪里?您确定file_path 内容对于iOS 8 是正确的并且mp4 存在于该位置吗?如果您已经检查了所有内容,那么我会提交一个错误。 【参考方案1】:

所以问题是每次启动应用程序时应用程序文档文件夹路径都会发生变化,而我正在存储视频文件的绝对路径。

根据这里的这篇文章: http://pinkstone.co.uk/where-is-the-documents-directory-for-the-ios-8-simulator/,这就是现在在 iOS 8 中的情况,这就是为什么当我的方法在 iOS7 中有效时,它在 iOS8 设备和模拟器上失败了。感谢@RoboticCat 为我指明了正确的方向!

【讨论】:

以上是关于AVPlayer 无法在 iOS8 上播放 NSDocuments 目录中的视频的主要内容,如果未能解决你的问题,请参考以下文章

AVPlayer 永远无法播放

设备自动锁定时,AVPlayer 无法在 iPad 上运行

AvPlayer 无法在 Xcode 7 中播放视频

AVFoundation - 视频没有在 AVplayer 的 AVMutablecomposition 中播放

使用 AVPlayer 时为啥我的视频无法在我的 UIView 中播放

AVPlayer 暂停后无法继续播放