【问题标题】:iOS record video first frame is blackiOS录制视频第一帧是黑色的
【发布时间】:2023-03-02 22:41:01
【问题描述】:

我做了一个录制视频的应用,但第一帧总是黑色的。

我用:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 

和assetWriter写入样本缓冲区。

发现第一个sample buffer是mediaType:'soun',是不是有问题。

我该怎么办

【问题讨论】:

    标签: ios video-recording


    【解决方案1】:

    感谢@ethnchli 的回复,它对我有帮助,所以我决定添加一些细节。

    首先,如果您不使用 AVCaptureAudioDataOutputSampleBufferDelegate 扩展,请尝试卸载它,因为它运行与 AVCaptureVideoDataOutputSampleBufferDelegate 扩展相同的功能。

    func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection){}

    或者如果您需要 audioSamleBoofer :)

    试试这个 - 检查仅存在于视频连接中的方向支持。

        if connection.isVideoOrientationSupported {
            // Work with video samle boofer
        } else {
            // Work with audio sample boofer audio
        }
        
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。而且我认为第一个样本缓冲区是“声音”应该是问题所在。我试图做的是忽略第一个样本缓冲区,如果它是健全的。等到第一个“视频”样本缓冲区进入,然后执行 AVAssetWriter startWriting 事情。我通过这样做解决了我的问题。

      【讨论】:

      • 谢谢,它也适用于我。我认为,这个答案应该被标记为最好的。
      • 只是保证这也是正确的答案。应标记为已回答!
      • 它对我不起作用。我没有连接麦克风,所以我没有得到声音样本缓冲区。所有缓冲区都具有相同的类型 (CMFormatDescriptionGetMediaType) 和子类型 (CMFormatDescriptionGetMediaSubType)。还有什么可以尝试的?谢谢。
      • 在获得视频帧之前不要开始会话——在此之前忽略所有音频数据。然后确保开始时间为零,如果不是则调整。
      • @drewster 你能发布一个如何忽略音频的示例吗? stackoverflow.com/questions/63002615/…
      猜你喜欢
      • 1970-01-01
      • 2011-07-04
      • 2016-08-13
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      相关资源
      最近更新 更多