要播放H264裸码流,可以分拆为以下三个工作:
1.解码H264裸码流获取YUV数据
2.将YUV数据转换为RGB数据填充图片
3.将获取的图片进行显示
要完成工作1,我们可以直接使用海思的解码库,由于海思的解码库是C++的动态库,要完成在C#中进行调用可以参考海思h264解码库这篇文章,介绍的很详细。但是对于该博文只介绍了一种帧解码的方法,并没有介绍真正实用的流式解码方法。自己根据解码库的参考文档写了一份C#版的流式解码算法。
//初始化 // 这是解码器输出图像信息 hiH264_DEC_FRAME_S _decodeFrame = new hiH264_DEC_FRAME_S(); // 这是解码器属性信息 hiH264_DEC_ATTR_S decAttr = new hiH264_DEC_ATTR_S(); decAttr.uPictureFormat = 0; decAttr.uStreamInType = 0; /* 解码器最大图像宽高, D1图像(1280x720) */ decAttr.uPicWidthInMB = (uint)width / 16; decAttr.uPicHeightInMB = (uint)height / 16; /* 解码器最大参考帧数: 16 */ decAttr.uBufNum = 16