【问题标题】:Captured video with AVAssetWriter have duration zero使用 AVAssetWriter 捕获的视频的持续时间为零
【发布时间】:2016-12-08 11:04:38
【问题描述】:

我正在尝试使用AVAssetWriterAVCaptureSessionAVCaptureOutputAVAssetWriterInput 捕捉视频。

这是AVCaptureOutput 的委托方法,我在其中添加缓冲区:

- (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];
        });
    }]; 
}

当我结束将视频写入文件时,我正在尝试通过MPMoviePlayerController 播放它。数据可用是因为文件大小很大,但由于某些原因,视频的持续时间为零。我做错了什么?

添加了repository 和测试代码。它用于 HLS 流媒体,所以现在它应该制作 15 秒的视频,然后在屏幕底部的播放器中显示(现在播放器只是黑色,视频时长为 0)。

【问题讨论】:

    标签: ios objective-c video avfoundation avassetwriter


    【解决方案1】:

    完成后请务必致电[AVAssetWriter finishWritingWithCompletionHandler:]

    您应该调用 startSessionAtSourceTime 并使用您收到的第一个缓冲区的演示时间戳。

    您可以删除[self.assetWriter endSessionAtSourceTime:kCMTimeZero];

    【讨论】:

    • 更新了问题,提供更多信息,还有其他建议吗?
    • 添加了一些建议
    • 你能在github上放一个小例子吗?
    【解决方案2】:
    [self.assetWriter endSessionAtSourceTime:kCMTimeZero];
    

    您将会话结束时间设置为零,使录制时间为 0 秒...

    【讨论】:

    • 我应该在那里设置什么?可以说,我有视频持续时间的 NSTimeInterval 值。
    • 这取决于您的 fps 和持续时间。 Look here for some explanationhere
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多