gpt4 book ai didi

avfoundation - AVAssetWriter 提示来自 BlackMagic 强度的输入被压缩,因此无法编码

转载 作者:行者123 更新时间:2023-12-04 04:08:08 27 4
gpt4 key购买 nike

我正在尝试构建一些东西,可以在 Mac 上实时捕获视频源并写出预分段的 mp4 block 。它适用于某些相机,但不适用于其他相机。

设置如下。

一个 AVCaptureVideoDataOutput有一个 AVCaptureVideoDataOutputSampleBufferDelegate .

dispatch_queue_t sampleQueue = dispatch_queue_create("samples", NULL);
[videoOutput setSampleBufferDelegate: delegate queue: sampleQueue];

输出还涉及 AVCaptureSession它保存到文件并显示预览,一切正常。

在委托(delegate)中,我有一个 AVAssetWriterInput .它是这样设置的:
NSDictionary
*videoFormat = [NSDictionary dictionaryWithObjectsAndKeys:
// Format options
AVVideoCodecH264, AVVideoCodecKey,// h264
[NSNumber numberWithInt: width], AVVideoWidthKey,
[NSNumber numberWithInt: height], AVVideoHeightKey,
// Encoder options
[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt: theQuality*1024], AVVideoAverageBitRateKey,// 256kbps
[NSNumber numberWithInt: 30], AVVideoMaxKeyFrameIntervalKey,// write at least one keyframe every 30 frames
nil], AVVideoCompressionPropertiesKey,
nil],
video = [[AVAssetWriterInput assetWriterInputWithMediaType: AVMediaTypeVideo outputSettings: videoFormat] retain];
[video setExpectsMediaDataInRealTime: YES];

有一种方法可以使用此委托(delegate)写入文件:
writer = [[AVAssetWriter assetWriterWithURL: url fileType: AVFileTypeMPEG4 error: &error] retain];
[writer setShouldOptimizeForNetworkUse: YES];
[writer addInput: video];

现在在 captureData里面委托(delegate)中的回调方法,其中我处理采样数据的缓冲区,我这样做:
   if([video isReadyForMoreMediaData])
[video appendSampleBuffer: sampleBuffer];

伟大的!这适用于我的 facetime 相机。现在我插入一个 BlackMagic Intensity 并使用它。

在这条线上:
        [video appendSampleBuffer: sampleBuffer]; 

我收到此错误:
*** -[AVAssetWriterInput appendSampleBuffer:] Input buffer must be in an uncompressed format when outputSettings is not nil

我玩过 videoOutput设置,无济于事。文档似乎提到这是无法压缩的东西。像:
// not all at the same time, of course.
videoOutput.videoSettings = nil;
videoOutput.videoSettings = [NSDictionary dictionaryWithObject:@"avc1" forKey:AVVideoCodecKey];

最好的部分是,如果我禁用输出上的所有编码内容,它会告诉我不支持直通编码。甜的。

幸运的是,谷歌搜索此错误消息会导致零点击。如果有人可以在这里指出我的解决方案,我很想知道我做错了什么。

最佳答案

sampleBuffer编解码器未解压时;即编解码器不是 yuvs 或 2vuy 或 RGB,则输出设置预计为零。然后它不会对样本缓冲区进行转码,因为它已经被压缩了。

关于avfoundation - AVAssetWriter 提示来自 BlackMagic 强度的输入被压缩,因此无法编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12207366/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com