视图init和创建一切都很好,但是当我将AVPlayer从一个视图层移动到另一个视图层时,它就会消失。视频消失(全屏视图为黑色,原始大小视图为白色),但音频仍在播放。我的控制仍然有效(播放/暂停/擦洗)。
我的应用程序是为iOS7构建的。在模拟器和设备上,这是有效的。在iOS8的模拟器中,这是有效的。仅在iOS8设备上这不起作用。
以下代码:
AVAsset *avAsset = [AVAsset assetWithURL:fileURL];
AVPlayerItem *avPlayerItem =[[AVPlayerItem alloc]initWithAsset:avAsset];
self.currentPlayer = [[AVPlayer alloc] initWithPlayerItem:avPlayerItem];
AVPlayerLayer *tmpPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.currentPlayer];
tmpPlayerLayer.frame = self.videoDetailViewPlayer.bounds;
[self.videoDetailViewPlayer.layer addSublayer:tmpPlayerLayer];
* fileURL是一个格式正确的NSURL,并使用针对每个操作系统测试的完全限定URL检索正确的对象。 ** self.videoDetailViewPlayer.bounds全屏,我已经检查确保它确实有正确的w& H。 (我已经尝试了[tmpPlayer setFrame]以及上面的当前设置,同时使用了框架和边界。除了设备上的iOS8以外,它都有效。
同样,音频仍在继续,但视频似乎丢失了。
编辑:我不确定是什么原因导致播放器继续工作,但无论是否有视频图层,AVPlayer都会继续播放音频。我有2个视图,我在它之间交替播放器,也许我应该将它添加到两者,但根据文档,"只有最近创建的播放器层才会在屏幕上显示视频内容。 #34; (https://developer.apple.com/LIBRARY/ios/documentation/AVFoundation/Reference/AVPlayerLayer_Class/index.html)。如果我从原始视图创建tmpPlayerLayer,将其添加到我的另一个视图,然后为第一个视图创建图层nil,它可以工作(但还没有调整大小)。如果我尝试创建一个新的AVPlayerLayer(如上所述),它只是完全停止显示视频......仍在调查,但任何指针都可能有所帮助。
答案 0 :(得分:3)
我没有为每个视图创建一个新的AVPLayerLayer,而是发现为控制器创建一个playerlayer,并在视图之间重用它,允许我在UIViews之间切换(完整和普通)。我不知道为什么iOS8原生破坏了这个功能,但是这种解决方法意味着创建的最后一个PlayerLayer仍然显示视频,无论我添加到哪个视图,它都在那里播放。