同时在两个视图中显示AVPlayer内容
我正在为Mac创建一个HTTP Live Streaming Client,它将控制大屏幕上的视频播放。 我的目标是在主屏幕上有一个控制UI,而在二级屏幕上有全屏视频。
使用AVFoundation,我已经成功地打开了流,并从我的控制界面控制了它的所有方面,现在我正尝试在第二个屏幕上复制视频。 这比我想象的更难...
在控制屏幕上,我有一个AVPlayerLayer显示来自AVPlayer的视频内容。 我的目标是创建另一个AVPlayerLayer,并将它发送给同一个播放器,以便两个播放器在两个不同的视图中同时播放相同的视频。 但是,这不起作用。
深入挖掘,我在AVFoundation文档中发现了这一点:
您可以使用相同的AVPlayer对象创建任意数量的播放器图层。 只有最近创建的播放器图层才会在屏幕上实际显示视频内容。
这对我来说实际上是无用的,因为我需要在两个视图中正确显示视频。
我可以从同一个AVAsset创建一个新的AVPlayerItem实例,然后创建一个新的AVPlayer并将其添加到一个新的AVPlayerLayer并且显示视频,但它们不再同步,因为它们是两个不同的播放器,生成播放两个不同的音频流同一个流的不同部分。
有没有人有关于如何将相同的AVPlayer内容分成两个不同的视图的建议? 也许某种CALayer镜像技巧?
我发现这个话题很古老,但我认为它仍然会有所帮助。 你写的
我有一个AVPlayerLayer显示来自AVPlayer的视频内容。 我的目标是创建另一个AVPlayerLayer,并将它发送给同一个播放器,以便两个播放器在两个不同的视图中同时播放相同的视频。 但是,这不起作用。
但是,它工作。 我只是在我的项目中尝试过。 这是我的图层初始化代码:
AVPlayerLayer *playerLayer = [AVPlayerLayer new];
[playerLayer setPlayer:_testPlayer];
playerLayer.frame = CGRectMake(0, 0, _videoView.frame.size.width, _videoView.frame.size.height);
playerLayer.contentsGravity = kCAGravityResizeAspect;
playerLayer.videoGravity = AVLayerVideoGravityResizeAspect;
_defaultTransform = playerLayer.affineTransform;
[_videoView.layer insertSublayer:playerLayer atIndex:0];
AVPlayerLayer *testLayer_1 = [AVPlayerLayer playerLayerWithPlayer:_testPlayer];
testLayer_1.frame = CGRectMake(100, 100, 200, 200);
testLayer_1.contentsGravity = kCAGravityResizeAspect;
testLayer_1.videoGravity = AVLayerVideoGravityResizeAspect;
[_videoView.layer insertSublayer:testLayer_1 atIndex:1];
这就是我得到的:
如您所见,有两个AVPlayerLayers在非常完美的同步中播放相同的AVPlayerItem
链接地址: http://www.djcxy.com/p/9769.html上一篇: Displaying AVPlayer content on two views simultaneously