IPhoneからUstreamやQikなどのサーバーに動画をライブストリーミングする方法AppleからのHttp Live Streamingと呼ばれるものがあることは知っていますが、私が見つけたほとんどのリソースは、サーバーからiPhoneへのビデオのストリーミングについてのみ話します。
AppleのHttp Living Streamingは私が使用すべきものですか?または、他の何か?ありがとう。
私が知る限り、これを行うための組み込みの方法はありません。おっしゃるとおり、HTTPライブストリーミングはiPhoneへのダウンロード用です。
私が行っている方法は、AVCaptureSessionを実装することです。AVCaptureSessionには、すべてのフレームで実行されるコールバックを持つデリゲートがあります。そのコールバックは、ネットワークを介して各フレームをサーバーに送信します。サーバーには、フレームを受信するためのカスタム設定があります。
そしてここにいくつかのコードがあります:
// make input device
NSError *deviceError;
AVCaptureDevice *cameraDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *inputDevice = [AVCaptureDeviceInput deviceInputWithDevice:cameraDevice error:&deviceError];
// make output device
AVCaptureVideoDataOutput *outputDevice = [[AVCaptureVideoDataOutput alloc] init];
[outputDevice setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
// initialize capture session
AVCaptureSession *captureSession = [[[AVCaptureSession alloc] init] autorelease];
[captureSession addInput:inputDevice];
[captureSession addOutput:outputDevice];
// make preview layer and add so that camera's view is displayed on screen
AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession];
previewLayer.frame = view.bounds;
[view.layer addSublayer:previewLayer];
// go!
[captureSession startRunning];
次に、出力デバイスのデリゲート(ここではself)がコールバックを実装する必要があります。
-(void) captureOutput:(AVCaptureOutput*)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection*)connection
{
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer( sampleBuffer );
CGSize imageSize = CVImageBufferGetEncodedSize( imageBuffer );
// also in the 'mediaSpecific' dict of the sampleBuffer
NSLog( @"frame captured at %.fx%.f", imageSize.width, imageSize.height );
}
フレームを1つずつサーバーに送信せずにこれを行う方法をいくつかの人々が尋ねました。答えは複雑です...
基本的に、上記のdidOutputSampleBuffer
関数では、サンプルをAVAssetWriter
に追加します。実際、私は一度に3人のアセットライター(過去、現在、未来)を別々のスレッドで管理していました。
過去の作家が映画ファイルを閉じてアップロードしている最中です。現在のライターは、カメラからサンプルバッファーを受信しています。将来のライターは、新しいムービーファイルを開いて、データ用に準備している最中です。 5秒ごとにpast=current; current=future
とシーケンスを再開します。
次に、ビデオを5秒のチャンクでサーバーにアップロードします。必要に応じて、ffmpeg
でビデオをつなぎ合わせるか、HTTPライブストリーミング用にMPEG-2トランスポートストリームにトランスコードできます。ビデオデータ自体はアセットライターによってH.264でエンコードされているため、トランスコーディングによってファイルのヘッダー形式が変更されるだけです。
これに役立つライブラリを1つ見つけました。
上記のライブラリは、RTMPまたはHLSを介してストリーミングするすべてのオプションを提供しています。
与えられた手順に従ってこのライブラリを実行し、すべての説明を注意深く読んでください。このライブラリで提供されているサンプルコードを直接実行しないでください。必要なクラスとポッドをデモアプリに取得する代わりに、エラーが発生します。
これで、画面、カメラ、オーディオを記録できます。