4

AppleのHTTPライブストリーミングで使用するために適切にフォーマットされたビデオファイルを作成しようとしています。ファイルを作成するコードは次のとおりです。

// Init the device inputs
AVCaptureDeviceInput *newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:[self backFacingCamera] error:nil];
AVCaptureDeviceInput *newAudioInput = [[AVCaptureDeviceInput alloc] initWithDevice:[self audioDevice] error:nil];

// Create session
AVCaptureSession *newCaptureSession = [[AVCaptureSession alloc] init];
newCaptureSession.sessionPreset = AVCaptureSessionPresetMedium;
self.session = newCaptureSession;

// Add inputs and output to the capture session
if ([newCaptureSession canAddInput:newVideoInput]) {
    [newCaptureSession addInput:newVideoInput];
}
if ([newCaptureSession canAddInput:newAudioInput]) {
    [newCaptureSession addInput:newAudioInput];
}

// Setup the output
AVCaptureMovieFileOutput *aMovieFileOutput = [[AVCaptureMovieFileOutput alloc] init];
if ([self.session canAddOutput:aMovieFileOutput])
    [self.session addOutput:aMovieFileOutput];

aMovieFileOutput.maxRecordedDuration = CMTimeMakeWithSeconds(10.f, 1);

// Begin recording
AVCaptureConnection *videoConnection = [self.captureOutput connectionWithMediaType:AVMediaTypeVideo];
if ([videoConnection isVideoOrientationSupported])
    [videoConnection setVideoOrientation:[self calculateVideoOrientation]];

[aMovieFileOutput startRecordingToOutputFileURL:[self nextOutputURL] recordingDelegate:self];

[self nextOutputURL]有効なを返しますNSURL。ファイルはディスクに正常に保存され、VLCとQuickTimeでファイルを開いて表示できます。VLCで見たビデオフォーマットは「avc1」で、私が集めたのはH.264と同じです。QuickTimeで表示されるビデオ形式はH.264です。もちろん、ファイルの拡張子は.tsです。

すべてが正しく行われているようですが、を使用してHTTP Liveストリームを検証しようとするとmediastreamvalidator、次のエラーが発生します。

http://imac.local.:2020/fileSequence000.ts:
ERROR: (-12971) failed to parse segment as either an MPEG-2 TS or an ES

誰かが私が間違っているかもしれないことを知っていますか?

4

1 に答える 1

3

指定されたコードはMPEG-2トランスポートストリームを生成せず、標準のMPEG-4ファイルを生成しますが、拡張子は.tsです。VLCとQuickTimeはどちらもファイルを認識して再生できますが、mediastreamvalidatorはそれがMPEG-2TSではないことを正しく認識します。生成されたファイルがMPEG-2TSであるかどうかを確認する簡単な方法は、最初のバイトを調べることです。0x47でない場合、MPEG-2TSにはなりません。

于 2012-06-25T23:21:12.387 に答える