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)

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

 

posted @   BreakingY  阅读(45)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示