FLV封装H265

        我的音视频/流媒体开源项目(github)

        针对FLV格式,目前许多开源项目和常见的视频处理工具和流媒体服务器,仍主要支持H.264视频编码格式,尚未完全兼容H.265。ffmpeg和vlc都不支持H265编码格式的FLV,不知道后续版本会不会支持。RTMP也是用FLV格式传输音视频,这也导致很多RTMP流媒体服务器也不支持H265。本文将介绍FLV如何封装H265。

        FLV由FLV Header、PreviousTagSize、Tag组成。如下图所示,为FLV文件结构:

        Tag由Tag Header和Tag Data组成,RTMP传输音视频就是传输的Tag Data。Tag有三种类型,Audio Tag(音频Tag),Video Tag(视频Tag),script Tag(又称Metadata Tag),结构如下图所示:

        接下来重点看一下视频的Tag Data,如下图所示:

        如果CodecId=7则表示视频是H264编码,就是AVCVIDEOPACKET格式,如下图所示:

        如果 AVCPacketType = 0,那么Data就是AVCDecoderConfigurationRecord格式。如果AVCPacketType = 1,那么Data就是H264的NALU(4字节的NALU size+去掉起始码的NALU)。

        FLV封装H265和H264的流程是一样的,区别如下:

        1、H265的CodecId=12

        2、数据格式为HEVCVIDEOPACKET,和AVCVIDEOPACKET结构一样,就是名字不同而已

        3、如果 AVCPacketType = 0,那么Data就是HEVCDecoderConfigurationRecord格式,如果AVCPacketType = 1,Data和H264完全一样

        关于AVCDecoderConfigurationRecord和HEVCDecoderConfigurationRecord参考我的另外一篇文章:H264/H265的两种格式Annex B、AVCC(H264)/HVCC(H265)_265h,cc-CSDN博客

        推荐一个flv库:libflv。实现FLV封装、解封装,纯C语言实现,支持H264/H265、AAC,支持跨平台,也可以用于RTMP音视频Tag Data的生成和解析,地址:https://github.com/BreakingY/libflv

猜你喜欢

转载自blog.csdn.net/weixin_43147845/article/details/141899621