iOS:如何修复使用 AVAssetWriter 保存电影的半尺寸帧
我正在使用 AVAssetWriter 和 AVAssetWriterInputPixelBufferAdaptor 编写电影文件。
用于构建 CVPixelBuffer 的 CGImage 看起来很正常(如屏幕上显示的那样),输出影片显示压缩到帧上半部分的输入图像。所有宽度、高度和 bytes_per_row 都是相同的(对于 CGImage、AVAssetWriter 设置和 CVPixelBuffer 设置)。
什么可能导致这种问题?
I am writing a movie file with AVAssetWriter and AVAssetWriterInputPixelBufferAdaptor.
The CGImage that is used to build the CVPixelBuffer looks normal (as displayed on the screen), the output movie shows the input image compressed into the top half of the frame. All of the widths, heights, and bytes_per_row are identical (for the CGImage, the AVAssetWriter settings, and the CVPixelBuffer settings).
What could be causing this kind of problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题来自于这样一个事实:当您向 AVAssetWriterInputPixelBufferAdaptor 提供设置以用于配置 CVPixelBufferPool 以生成 CVPixelBuffers 时,CVPixelBufferPool 显然将这些设置用作请求而不是实际设置。您获得的 CVPixelBuffer 可能具有不同的配置。我不确定这可能是苹果代码中的一个错误。
在任何情况下,您都可以使用 CVPixelBufferGetBytesPerRow(CVPixelBuffer) 读取每行的实际字节,并相应地调整您的代码。为我工作!
The problem comes from the fact that when you supply settings to AVAssetWriterInputPixelBufferAdaptor for use in configuring the CVPixelBufferPool to generate CVPixelBuffers, the CVPixelBufferPool apparently uses the settings as a request rather than as the actual setting. The CVPixelBuffer you get may have a different configuration. This might be a bug in Apple's code, I'm not sure.
In any case you can read the actual bytes per row using CVPixelBufferGetBytesPerRow(CVPixelBuffer), and adjust your code accordingly. Worked for me!