这很奇怪,但基本上我在本地下载并保存视频,并存储提供给AVPlayer
的网址路径。
我第一次这样做时效果很好。我下载了一个文件,然后我可以在我退出应用程序时多次播放到我心中的内容。当我第二次启动应用程序时,当我尝试使用相同的确切路径播放相同的视频时,我现在得到一个黑屏。
因为我正在使用模拟器,所以我可以验证视频和图片确实存在于我保存到的同一文件夹中,如果我从Finder中点击它们,我仍然可以播放它们。
也许这是一个缓存问题?如果重要的话,我在测试时将它们直接保存到Library
目录。
相关守则:
NSString *outputFile = [NSString stringWithFormat:@"video_%@.mp4", guid];
NSString *outputDirectory = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *tempPath = [outputDirectory stringByAppendingPathComponent:outputFile];
NSURL *fileURL = [NSURL fileURLWithPath:tempPath];
// save the video to the URL
然后我使用NSString [fileURL path]
“坚持”它(我已经构建了这个,假设解决方案需要NSString
到NSURL
转换)。
稍后我创建了一个AVPlayerItem
:
NSURL *url = [NSURL fileURLWithPath:persistedObject.contentURL];
NSLog(@"url: %@", url); // prints a valid location**
AVPlayerItem *item = [AVPlayerItem playerItemWithURL:url];
**例如,这是一个示例网址
url: file:///Users/gabriel/Library/Developer/CoreSimulator/Devices/CE1FC933-808C-4003-9BE4-DEC59B787FF7/data/Containers/Data/Application/FAD072B4-B5B0-4487-8A76-57B047324A00/Library/picture_D8DEAFA5-0843-4AA3-BB32-C61E32D13579.mp4
有人建议我使用URLForDirectory:inDomain:appropriateForURL:create:error:
和URLByAppendingPathComponent:
代替,我会研究一下。但是当我第一次下载它时,仍然会混淆它为什么会播放,但是当应用程序退出时它不是同一个确切的文件时。
答案 0 :(得分:2)
你犯了一个经典的错误。你是坚持完整的道路。但完整的路径发生了变化。永远不要坚持完整的道路。仅相对于从NSSearchPathForDirectoriesInDomains
获得的值保留路径的一部分。
鉴于您正在做什么,您应该只保留基本文件名(outputFile
)。然后,当应用程序启动时,您将像最初一样重新生成完整路径,但使用持久文件名将其附加到动态获取的应用程序支持文件夹路径。