AVAssetWriter
, AVCaptureSession
, AVCaptureOutput
및 AVAssetWriterInput
으로 비디오를 캡처하려고합니다. 마무리 쓰기 위해AVAssetWriter로 캡처 한 비디오의 지속 시간이
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
if (self.assetWriter.status != AVAssetWriterStatusWriting) {
CMTime startTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
[self.assetWriter startWriting];
[self.assetWriter startSessionAtSourceTime:startTime];
}
if ([captureOutput isKindOfClass:AVCaptureVideoDataOutput.class] && self.videoWriterInput.isReadyForMoreMediaData) {
[self.videoWriterInput appendSampleBuffer:sampleBuffer];
}
else if ([captureOutput isKindOfClass:AVCaptureAudioDataOutput.class] && self.audioWriterInput.isReadyForMoreMediaData) {
[self.audioWriterInput appendSampleBuffer:sampleBuffer];
}
}
및 방법 :
- (void)finishCurrentWriting {
[self.videoWriterInput markAsFinished];
[self.audioWriterInput markAsFinished];
__weak ViewController *weakSelf = self;
[self.assetWriter finishWritingWithCompletionHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf runVideo];
});
}];
}
내가 파일에 쓰기 비디오를 종료하고있어, 난 내가 버퍼를 추가 해요 곳에있다
는AVCaptureOutput
위양 방법입니다
MPMoviePlayerController
을 통해 재생하려고합니다. 파일의 크기가 크기 때문에 데이터를 사용할 수 있지만 몇 가지 이유로 동영상 길이는 0입니다. 내가 도대체 뭘 잘못하고있는 겁니까?
테스트 코드가 포함 된 repository이 추가되었습니다. 그것은 HLS 스트리밍을위한 것입니다. 그래서 지금은 15s 비디오를 만들어야합니다. 그리고 플레이어의 화면 하단에 디스플레이해야합니다 (이제 플레이어는 검은 색이고 비디오 길이는 0입니다).
업데이트 질문, 어떤 다른 제안? –
몇 가지 제안 사항을 추가했습니다 –
내 코드는 업데이트되었지만 여전히 작동하지 않습니다 –