29

iPhoneのカメラからMacで実行されているアプリにビデオをストリーミングしたいと思います。ビデオチャットのように考えてください。ただし、デバイスからレシーバーアプリまでは一方向です(ビデオチャットではありません)。

これまでの私の基本的な理解:

  1. AVFoundationを使用すると、ファイルに保存せずに「ライブ」ビデオカメラデータを取得できますが、これは非圧縮データであるため、自分で圧縮を処理する必要があります。
  2. ネットワークの場所に送信するための組み込みのAVCaptureOutputサポートはありません。私は、このビットを自分で解決する必要があります。

私は上記について正しいですか、それとも私はすでに軌道に乗っていないのですか?

Apple Tech Q&A 1702は、個々のフレームを画像として保存するための情報を提供します-これはこれを行うための最良の方法ですか?30fpsを節約してから、ffmpegのようなものを保存して圧縮しますか?

iPhoneへのライブストリーミングについては多くの議論がありますが、ライブビデオを送信している人々に関する情報ははるかに少ないです。正しい方向に向けられるように、いくつかの幅広いストロークを期待しています。

4

2 に答える 2

24

とを使用AVCaptureVideoDataOutputしてsampleBufferDelegate生の圧縮フレームをキャプチャできます。その後、ネットワークを介してそれらをストリーミングする必要があります。 AVFoundationフレームをローカルビデオファイルにエンコードするためのAPIを提供しますが、ネットワークへのストリーミング用のAPIは提供しません。最善の策は、ネットワークを介して生のフレームをストリーミングするライブラリを見つけることです。私はffmpegから始めます。libavformatはRTSPをサポートしていると思います。ffserverコードを見てください。

AVCaptureVideoDataOutputハードウェアエンコーディングを利用せずに生のビデオフレームを圧縮する必要がないように、圧縮フレームを提供するように構成する必要があることに注意してください。

于 2010-11-10T09:11:36.143 に答える
20

これは、ターゲットの解像度と、ターゲットとするフレームレートのパフォーマンスの種類に大きく依存します。

抽象的観点からすると、おそらくAVCaptureOutputから直接バッファーを埋めるためのキャプチャスレッドと、xミリ秒ごとに以前に指定されたホストにバッファーを送信してゼロに戻すための通信スレッド(必要に応じてパディング)があります。

最初のデータ転送を完了した後、最低解像度で15 fpsを達成するように取り組み、通信スレッドが送信できるようになる前にバッファがオーバーフローするまで作業を進めます。これには、画像の解像度とバッファサイズのバランスが必要になります(おそらくGSMに依存します。 CDMAフレームサイズになります)、そして最後にそのバッファを送信できる最大レートです。

于 2010-11-10T03:24:54.727 に答える