7

iOS アプリの作成経験はありますが、ビデオの経験はありません。リアルタイム ビデオをサーバーにストリーミングする iPhone アプリを構築したいと考えています。サーバーにアップロードしたら、そのビデオを消費者にリアルタイムで配信します。

私はかなりの量の資料を読みました。以下が正しいかどうかを誰かに知らせて、空欄を埋めてもらえませんか。

  1. iPhone でビデオを録画するには、AVFoundation クラスを使用する必要があります。AVCaptureSession をデリゲート メソッド captureOutput:didOutputSampleBuffer::fromConnection を使用すると、ビデオの各フレームにアクセスできます。ビデオフレームができたので、フレームをエンコードする必要があります
    • Foundation クラスは、Web サーバーへのストリーミングを簡単にサポートするクラスではなく、AVAssetWriter を介してのみ H264 エンコーディングを提供することを知っています。したがって、ビデオをファイルに書き込む必要があります。
    • 2 つの AssetWritters を使用して 10 秒のブロックを書き込み、次に NSStream でそれらの 10 秒のブロックをサーバーに送信できるという他の投稿を読みました。これを実現するために、2 つの AVAssetWriter を連携して使用する方法を誰かが説明できますか? 誰かがコードを持っている場合は、共有してください。
4

1 に答える 1

6

iPhone でハードウェア エンコーダーを使用する唯一の方法は、AVAssetWriter クラスを使用してエンコードされたビデオをファイルに書き込むことです。残念ながら、ファイルが閉じられるまで、AVAssetWriter は moov アトム (エンコードされたビデオをデコードするために必要) をファイルに書き込みません。

したがって、エンコードされたビデオをサーバーにストリーミングする 1 つの方法は、ビデオの 10 秒のブロックをファイルに書き込み、それを閉じて、そのファイルをサーバーに送信することです。この方法は、ファイルを閉じたり開いたりすることによって再生にギャップが生じることなく使用できることを読みましたが、自分で試したことはありません。

ここでビデオをストリーミングする別の方法を見つけました。

この例では、2 つの AVAssetWriter を開きます。次に、最初のフレームで 2 つのファイルに書き込みますが、ファイルの 1 つをすぐに閉じて、moov アトムが書き込まれるようにします。次に、moov アトム データを使用して、2 番目のファイルをパイプとして使用し、エンコードされたビデオ データのストリームを取得できます。この例はビデオ データの送信にのみ機能しますが、非常にクリーンで理解しやすいコードで、iPhone のビデオに関する多くの問題に対処する方法を理解するのに役立ちました。

于 2013-05-29T19:17:07.313 に答える