直播系统中使用SEI传输用户自定义数据方案讨论

简介:       在直播系统中,除了直播音视频之外,有时候还想从主播端发布文本信息等,这些信息可以不通过视频传输通道发送给用户播放端,但如果传输的数据想和视频保持精准同步,那最好的办法就是这些信息和视频数据打包在一起传输, 通过h264 sei方式就可以把数据放入h264 Access Unit中传输。

      在直播系统中,除了直播音视频之外,有时候还想从主播端发布文本信息等,这些信息可以不通过视频传输通道发送给用户播放端,但如果传输的数据想和视频保持精准同步,那最好的办法就是这些信息和视频数据打包在一起传输, 通过h264 sei方式就可以把数据放入h264 Access Unit中传输。

     H264 SEI 基本知识介绍:

     SEI 全称: Supplemental Enhancement Information  

     SEI Nal Unit Type: 6

     SEI 语法定义:

     Supplemental enhancement information RBSP syntax:

 sei_rbsp( ) {       C Descriptor
    do    
       sei_message( )   5  
    while( more_rbsp_data( ) )    
    rbsp_trailing_bits( )   5  
}    

     Supplemental enhancement information message syntax:

sei_message( ) {    C Descriptor
    payloadType = 0    
    while( next_bits( 8 ) = = 0xFF ) {    
        ff_byte /* equal to 0xFF */   f(8)
        payloadType += 255    
     }    
     last_payload_type_byte                                      5 u(8)
     payloadType += last_payload_type_byte    
     payloadSize = 0    
     while( next_bits( 8 ) = = 0xFF ) {    
         ff_byte /* equal to 0xFF */        5 f(8)
         payloadSize += 255    
     }    
     last_payload_size_byte  5 u(8)
     payloadSize += last_payload_size_byte    
     sei_payload( payloadType, payloadSize )             5  
}    

      SEI 语义:

      Supplemental enhancement information RBSP semantics

      Supplemental Enhancement Information (SEI) contains information that is not necessary to decode the samples of coded pictures from VCL NAL units.

      Supplemental enhancement information message semantics

      An SEI NAL unit contains one or more SEI messages. Each SEI message consists of the variables specifying the type
payloadType and size payloadSize of the SEI payload. SEI payloads are specified in Annex D. The derived SEI payload
size payloadSize is specified in bytes and shall be equal to the number of bytes in the SEI payload.
ff_byte  is a byte equal to 0xFF identifying a need for a longer representation of the syntax structure that it is used within.
last_payload_type_byte  is the last byte of the payload type of an SEI message.

last_payload_size_byte is the last byte of the size of an SEI message

    从上面的描述可以看出一个Sei Nal Unit中可以包含多个SEI消息,每个SEI消息都有一个payloadType,目前h264规定payloadType为5时,sei_playload可以使用户自定义数据, 那么我们就可以利用它来传输数据。

     到此为止SEI基本知识介绍完毕,如果要自己实现代码的话,还需要了解更多细节,建议仔细阅读h264文档,这里不再深入讨论,也欢迎一起交流讨论。接下来进入实践环节。

     先下载软件: https://github.com/daniulive/SmarterStreaming  为方便测试, 下载windows版本就可以.

     rtmp 传输文本信息:

     1. 启动推送端软件: SmartPublisherDemo.exe

     2. 做如下配置:

   

    3. 可以点击自动发送文本按钮

    4. 打开播放端SmartPlayer.exe查看数据传输播放效果:


    rtsp 传输文本信息:

    1. 启动推送端软件: SmartPublisherDemo.exe

    2. 做如下配置:

   



    3. 可以点击自动发送文本按钮

    4. 打开播放端SmartPlayer.exe查看数据传输播放效果:


    总结

    从上面的实验可以看出SEI的优势来, 第一个优势是并不依赖于相关协议,rtsp和rtmp都可以,其他协议只要播放端支持SEI解析的都可以使用。 第二个是兼容性很好,如果播放端不支持自定义SEI数据解析,把SEI数据丢给H264解码器,解码器只是忽略掉,并不影响正常播放. 上述操作也可以用VLC来播放,播放正常,只是不显示SEI消息而已。第三个是完全和视频保持同步,这个是其他传输通道无法做到的.

    如果有更多问题,欢迎交流qq群: 294891451   499687479

相关文章
|
4月前
|
存储 前端开发 JavaScript
在视频点播系统工程中,我们关注的是构建一个能够处理视频内容、用户交互、数据存储和检索等功能的系统。
在视频点播系统工程中,我们关注的是构建一个能够处理视频内容、用户交互、数据存储和检索等功能的系统。
|
6月前
|
存储 供应链 容灾
平台设计-用户数据来源
平台的基本理念是一个组织只有一套系统
|
11月前
|
SQL 消息中间件 Java
想要流畅体验 TDengine 3.0 数据订阅功能?要点都在这里
在本文中,TDengine 资深研发将以 TDengine 3.0 为对象,为大家介绍数据订阅功能的正确打开方式,给到有需要的人作参考指南,避免走入应用误区。
209 0
|
负载均衡
LOOK!直播APP源码平台的稳定控制方法
我就把简单两步控制直播APP源码平台的稳定的方法分享给大家了,开发直播APP源码平台优质知识分享,大家有什么不懂的或是想要开发直播APP源码平台可以问我
LOOK!直播APP源码平台的稳定控制方法
|
网络协议 前端开发 测试技术
海量用户通讯系统——服务端结构改进1|学习笔记
快速学习海量用户通讯系统——服务端结构改进1
海量用户通讯系统——服务端结构改进1|学习笔记
|
缓存 JSON 网络协议
海量用户系统-客户端结构改进2|学习笔记
快速学习海量用户系统-客户端结构改进2
海量用户系统-客户端结构改进2|学习笔记
|
网络协议 测试技术 Go
海量用户通讯系统——客户端结构改进1|学习笔记
快速学习海量用户通讯系统——客户端结构改进1
海量用户通讯系统——客户端结构改进1|学习笔记
|
编解码 光互联
关于云流化系统-实时云渲染延时性的讨论
时云渲染系统来做程序的流化,是将程序放在服务器上,用户终端的各种操作指令完成都是借助的服务器算力。而为了用户能拥有和本地安装类似的体验效果,指令执行和传回终端的时间就必须尽可能短,这是实时云渲染系统很重要的一个参数:延迟性。没有延迟,该方案就无法落地
232 0
关于云流化系统-实时云渲染延时性的讨论
|
JSON 前端开发 网络协议
海量用户通讯系统-服务端结构改进2|学习笔记
快速学习海量用户通讯系统-服务端结构改进2