我正在编写一个用于通过网络流式传输视频的简单应用程序,使用与普通的“H.264 over RTP”方法略有不同(我使用的是我自己的编解码器)。
为了实现这一点,我需要 QTMovie 在播放电影时隐式发送到 QTMovieView 的原始帧和原始音频样本。
检索原始视频帧的最常见方法是使用 VisualContext - 然后,使用显示链接回调,我使用此 VisualContext “生成”一个 CVPixelBufferRef。所以我得到的帧的频率与我当前的刷新率同步(不是我需要这种同步——我只需要有一个可以通过网络传输的帧“流”——但是 CoreVideo 编程指南和大多数 Apple与视频相关的样本推广了这种方法)。
我遇到的第一个问题是当我将 VisualContext 附加到 QTMovie 时,图片无法再渲染到 QTMovieView 上。我不知道为什么会发生这种情况(我想这与 GWorld 的想法有关,并且当我附加 VisualContext 时渲染与它“分离”)。好的,至少我有框架,我可以将其渲染到一个简单的 NSView 上(尽管这听起来不对,而且对性能不友好。我做对了吗?)
声音怎么样,我不知道该怎么办。我需要在播放电影时获取原始声音样本(理想情况下 - 类似于 QTCaptureDecompressedAudioOutput 在其回调中返回的内容)。如果没有其他方法,我已经准备好深入研究已弃用的 Carbon QuickTime API。但我什至不知道从哪里开始。我应该使用相同的 CoreVideo Display 链接并以某种方式定期检索声音吗?我应该获取 QTDataReference 并手动定位声音帧吗?
我实际上是编程视频和音频服务的初学者。如果您能分享一些经验,我将非常感谢您与我分享的任何想法:)
谢谢你,詹姆斯