我正在尝试创建格式正确的视频文件,以便在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',我收集的是the same as H.264。在QuickTime中查看的视频格式是H.264。当然,文件的扩展名是.ts。
看来我正在做的一切正确,但当我尝试使用mediastreamvalidator
验证我的HTTP直播流时,我收到以下错误:
http://imac.local.:2020/fileSequence000.ts:
ERROR: (-12971) failed to parse segment as either an MPEG-2 TS or an ES
任何人都知道我可能做错了什么?
答案 0 :(得分:3)
给定的代码不生成MPEG-2传输流,而是生成标准的MPEG-4文件,但扩展名为.ts。 VLC和QuickTime都会识别文件并能够播放它,但是mediastreamvalidator正确地指出它不是MPEG-2 TS。检查生成的文件是否为MPEG-2 TS的快速方法是查看第一个字节。如果它不是0x47,那么它将不是MPEG-2 TS。