Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 当作为子层添加到第二视图时,iOS8中的AVPlayer将消失_Objective C_Ios8_Avplayer - Fatal编程技术网

Objective c 当作为子层添加到第二视图时,iOS8中的AVPlayer将消失

Objective c 当作为子层添加到第二视图时,iOS8中的AVPlayer将消失,objective-c,ios8,avplayer,Objective C,Ios8,Avplayer,视图初始化并创建一切都很好,但是当我将AVPlayer从一个视图层移动到另一个视图层时,它消失了。视频消失(全屏视图为黑色,原始大小视图为白色),但音频仍在播放。我的控件仍然有效(播放/暂停/拖动) 我的应用程序是为iOS7构建的。在模拟器和设备上,这是可行的。在iOS8的模拟器中,这是可行的。只有在iOS8设备上,这才不起作用 代码如下: AVAsset *avAsset = [AVAsset assetWithURL:fileURL]; AVPlayerItem *avPlayerItem

视图初始化并创建一切都很好,但是当我将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将继续播放音频,无论是否有视频层。我有两个视图,我正在交替播放playerlayer,也许我应该将其添加到这两个视图中,但根据文档,“只有最近创建的播放器层才能在屏幕上实际显示视频内容。”()。如果我从原始视图创建tmpPlayerLayer,将其添加到我的其他视图中,然后将第一个视图的层设置为零,则它可以工作(但不会调整大小)。如果我尝试创建新的AVPlayerLayer(如上所述),它只是完全停止显示视频…仍在调查中,但任何指针都可能会有所帮助。

我发现为控制器创建一个播放器层并在视图之间重用它,而不是为每个视图创建一个新的AVPLayerLayer,允许我在UIView(完整视图和正常视图)之间切换。我不知道为什么iOS8 native会破坏这一功能,但这一解决方法意味着最后创建的PlayerLayer仍然显示视频,无论我添加到哪个视图,它都会在那里播放。

我可以理解这一推理;它似乎是文档指向您的方向-每个
AVPlayer
一层。这只是一个想法,但我是不是你不可能重复使用
UIView
?我有一个类似的愿望,希望从框架动画到全屏动画,我不认为文档会告诉我这个方向。“你可以用相同的AVPlayer对象创建任意数量的播放器层。”前面的代码(在我的解决方案之前)在模拟器中工作,但没有在设备上工作,因此新AVPlayerLayer的创建似乎没有像它应该显示的那样显示视频。如果这在多个视图中是可复制的,那么这可能是一个错误,并且没有按照预期的方式运行Docs说:您可以从单个AVPlayer实例创建多个AVPlayerLayer对象,但只有最近创建的此类层才能在屏幕上显示任何视频内容。"然后继续指出使用两个
AVPlayer
s同时播放同一资产。我读到这篇文章是因为播放器层不是管理多视图播放的正确抽象级别。值得对文档和
AVPlayer
进行交叉引用,提出一个bug。这是一个bug。将其发送给苹果后,他们关闭了我的选择是一个已经就位的(18301836)@lordB8r你如何为多视图恢复AVPlayerLayer?