• RTMP推流FLV插入自定义SEI数据总结


    一、需求

      在RTMP推送的流中添加一个接口,可以添加自定义的数据(一段字节数组)。

      经过分析,在H264的流中可以通过SEI添加自定义数据,下面是实施的总结

    二、实施

      1)准备工具

        RTMP推流客户端

        ffmpeg命令行工具

        flvlib命令行分析工具

        flvAnalyzer UI 分析工具

      2)理论知识准备

        

        RTMP中会将音频视频分开以Tag的方式打包发送,视频的Tag的Payload中是H264的数据,Avcc格式,也就是每个NALU前面4个字节标记的是大小。

        NALU在H264中的定义会有不同的类型,定义如下:

        

        以上是NALU中常见的帧类型,sps、pps、vps、sei都是非音视频内容数据帧

        SEI数据是解码非必须的数据,加强信息,存在的时候可以增强解码帮助解码器的容错能力。

        一个NALU开始的第一个字节标记这个NALU的类型是什么

        

        开始码:SEI的类型是 0x06 , 注意H265的类型是0x4E、0x01

        自定义:SEI除了开始NALU类型之外,还存在不同的子类型,第二个字节(h265是第三个)0x05表示后续是自定义数据

        负载长度:表示后续紧跟着的自定义数据的长度,计算方法是 n * FF + XY, 也就是将数据长度减去255,有多少个就写多少个FF,剩下的如果不为0,再写一个字节

        负载内容:负载内容是UUID + payload content ,UUID 固定16个字节,用于区分不同的业务, payload content 表示自定义数据

        注意:这里的负载内容因为可能存在 0x000001,0x000002,0x000003 与NALU的分隔符产生歧义,因此需要加入扰码

        那么计算的公式:

    //H265
    0x4E 0x01, FF(255)的个数*255+非FF值,  16 , userData, 0x80
    //H264
    0x06, FF(255)的个数*255+非FF值,  16 , userData, 0x80
    

      

        3)代码:

          具体代码,这里因为公司内部,就不贴了

        4)效果

          使用客户端推流,然后使用ffmpeg录制播放的流:

          ffmpeg -i "rtmp url or http-flv url" -acodec copy -vcodec copy -f flv -y test.flv

          使用debug-flv分析flv

          

           可以看到第4个Tag是IDR帧,我们是将SEI数据打入I帧之前的,也就是SEI跟随I帧。

        使用UI工具查看

        

        选中的就是SEI数据

    三、参考资料

      1)https://www.jianshu.com/p/4d9120dfcd69

      2)https://www.jianshu.com/p/a8f9ee7754ec

      3)https://depthlove.github.io/2015/11/13/flv-analysis-in-rtmp-live-play/

      4)https://pypi.org/project/flvlib/  

  • 相关阅读:
    将Python 程序打包成 .exe格式入门
    浅论各种调试接口(SWD、JTAG、Jlink、Ulink、STlink)的区别
    用pyinstaller打包python程序,解决打包时的错误:Cannot find existing PyQt5 plugin directories
    win10下 anaconda 环境下python2和python3版本转换
    zsh: command not found: conda的一种解决方法
    mac-os安装autojump
    六环外的商业
    浮躁的社会没错,错的是缺少一颗平静的心
    一张图看懂STM32芯片型号的命名规则
    OpenOCD的概念,安装和使用
  • 原文地址:https://www.cnblogs.com/doudouyoutang/p/9676212.html
Copyright © 2020-2023  润新知