Author:baohonglai
Email:baohonglai@gmail.com
版权所有。转载本BLOG内任何文章,请以超链接形式注明出处。
最近一些项目经常会用到IOS的硬件编解码接口,其中硬件编解码在IOS8以后开发了videotoolbox框架,提供了接口使用。
不过videotoolbox编码用的比较少,常用的硬件写文件的方法采用的是AVAssetWriter接口,videotoolbox主要用于解码。不过这两套接口都需要配置一些参数,其中一个个人觉得比较容易出问题的就是kCVPixelBufferBytesPerRowAlignmentKey这个参数,它在官方文档中介绍的比较少。我的理解是视频帧的cvpixelbuffer中每行占用的内存按照多少位对齐,如果不设置,默认多少位对齐,还没研究清楚。
在视频编解码时,因为需要创建CVPixelBuffer,如果不明确设置
kCVPixelBufferBytesPerRowAlignmentKey ,对于视频的宽高如果不被16整除的话,在某些机型就会出现用OpenGL渲染时花屏的bug,因为一般OpengGL对pixelBuffer的每行的占用空间是有限制的,一般要求按16位对齐,或者32位对齐。我是在调用VTDecompressionSessionCreate解码之前设置kCVPixelBufferBytesPerRowAlignmentKey 为16 就能避免这个问题。
而在编码调用CVPixelBufferCreate 创建pixelBuffer的时候 NSDictionary *pixelAttributes = (id)kCVPixelBufferBytesPerRowAlignmentKey:@(32)};
以上只是个人在项目中遇到的问题以及解决办法,如有更好的办法,请留言指出
版权所有。转载本BLOG内任何文章,请以超链接形式注明出处。