1

通常の「H.264 over RTP」アプローチとは少し異なる方法を使用して、ネットワーク経由でビデオをストリーミングするための単純なアプリケーションを作成しています (私は独自のコーデックを使用しています)。

これを実現するには、ムービーを再生するときに QTMovie が暗黙的に QTMovieView に送信する生のフレームと生のオーディオ サンプルが必要です。

生のビデオ フレームを取得する最も一般的な方法は、VisualContext を使用することです。次に、表示リンク コールバックを使用して、この VisualContext を使用して CVPixelBufferRef を「生成」します。したがって、現在のリフレッシュレートと同期された周波数でフレームを取得しています(この同期が必要なわけではありません-ネットワーク経由で送信できるフレームの「ストリーム」が必要なだけです-しかし、CoreVideoプログラミングガイドとほとんどのAppleビデオに関連するサンプルは、このアプローチを促進します)。

私が直面した最初の問題は、VisualContext を QTMovie にアタッチすると、画像を QTMovieView にレンダリングできなくなることです。なぜこれが起こるのかわかりません(VisualContextをアタッチすると、GWorldとレンダリングが「切り離される」という考えに関連していると思います)。わかりました、少なくとも私は単純な NSView にレンダリングできるフレームを持っています (ただし、これは間違っているように聞こえ、パフォーマンスに悪影響を及ぼします。私は正しくやっていますか?)

音については、どうすればいいのかわかりません。ムービーが再生されているときにサウンドの生のサンプルを取得する必要があります (理想的には、コールバックで QTCaptureDecompressedAudioOutput が返すものに似たもの)。他に方法がない場合は、非推奨の Carbon QuickTime API を詳しく調べる準備をしました。しかし、どこから始めればよいかさえわかりません。同じ CoreVideo Display リンクを使用して定期的にサウンドを取得する必要がありますか? QTDataReference を取得してサウンド フレームを手動で検索する必要がありますか?

私は実際にはビデオおよびオーディオサービスのプログラミングの初心者です。いくつかの経験を共有できれば、私と共有できるアイデアを本当に感謝します:)

ありがとう、ジェームズ

4

0 に答える 0