calayer - 同时在两个 View 上显示 AVPlayer 内容

标签 calayer avfoundation nsview avplayer http-live-streaming

我正在为 Mac 创建一个 HTTP Live Streaming Client,它将控制大屏幕上的视频播放。我的目标是在主屏幕上有一个控制 UI,在辅助屏幕上有一个全屏视频。

使用 AVFoundation,我已经成功地能够从我的控制 UI 中打开流并控制它的所有方面,现在我正在尝试在辅助屏幕上复制视频。事实证明,这比我想象的要困难得多......

在控制屏幕上,我有一个 AVPlayerLayer,它显示来自 AVPlayer 的视频内容。我的目标是创建另一个 AVPlayerLayer,并将其发送到相同的播放器,以便两个播放器在两个不同的 View 中同时播放相同的视频。但是,这是行不通的。

深入挖掘,我在 AVFoundation 文档中发现了这一点:

You can create arbitrary numbers of player layers with the same AVPlayer object. Only the most-recently-created player layer will actually display the video content on-screen.



这对我来说实际上没用,因为我需要在两个 View 中正确显示视频。

我可以从同一个 AVAsset 创建一个 AVPlayerItem 的新实例,然后创建一个新的 AVPlayer 并将其添加到一个新的 AVPlayerLayer 并显示视频,但它们不再同步,因为它们是两个不同的播放器,生成两个不同的音频流播放同一流的不同部分。

有没有人对如何将相同的 AVPlayer 内容放入两个不同的 View 有任何建议?也许某种CALayer镜像技巧?

最佳答案

AVSyncronizedLayer 可能会有所帮助。我以不同的方式使用它(同步两个不同的媒体对象而不是同一个),但原则上应该可以加载相同的项目两次,然后使用 AvSyncronized 层来保持它们同步。

关于calayer - 同时在两个 View 上显示 AVPlayer 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7849609/

相关文章:

ios - UIView.layer.presentationLayer 返回最终值(而不是当前值)

ios - iOS中CALayer的UIImage

ios - 如何从 UIView 的某些部分删除边框?

ios - AVAssetExportSession 卡住(未启动)导出

ios - 宽度的 CALayer 动画

ios - AVFoundation 切换相机速度慢(连接到样本缓冲区)

iphone - 从数据创建 CMSampleBufferRef

cocoa - 替换 subview :with and ARC is releasing old view

objective-c - NSView 中的放置位置

cocoa - 单击表外某处时取消选择 NSTableView