直播系统中使用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

相关文章
|
29天前
|
消息中间件 安全 物联网
MQTT常见问题之新增自定义主题后平台侧收不到发布的数据如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
4月前
|
SQL 消息中间件 Java
想要流畅体验 TDengine 3.0 数据订阅功能?要点都在这里
在本文中,TDengine 资深研发将以 TDengine 3.0 为对象,为大家介绍数据订阅功能的正确打开方式,给到有需要的人作参考指南,避免走入应用误区。
157 0
|
11月前
|
5G 网络性能优化 文件存储
带你读《5G 系统技术原理与实现》——1.2.3 5G 系统接口功能与协议
带你读《5G 系统技术原理与实现》——1.2.3 5G 系统接口功能与协议
带你读《5G 系统技术原理与实现》——1.2.3 5G 系统接口功能与协议
|
缓存 JSON 网络协议
海量用户系统-客户端结构改进2|学习笔记
快速学习海量用户系统-客户端结构改进2
83 0
海量用户系统-客户端结构改进2|学习笔记
|
网络协议 前端开发 测试技术
海量用户通讯系统——服务端结构改进1|学习笔记
快速学习海量用户通讯系统——服务端结构改进1
81 0
海量用户通讯系统——服务端结构改进1|学习笔记
|
JSON 前端开发 网络协议
海量用户通讯系统-服务端结构改进2|学习笔记
快速学习海量用户通讯系统-服务端结构改进2
72 0
|
网络协议 测试技术 Go
海量用户通讯系统——客户端结构改进1|学习笔记
快速学习海量用户通讯系统——客户端结构改进1
79 0
海量用户通讯系统——客户端结构改进1|学习笔记
|
机器学习/深度学习 JSON 网络协议
海量用户通讯系统-显示在线用户列表(7)|学习笔记
快速学习海量用户通讯系统-显示在线用户列表(7)
92 0
|
机器学习/深度学习 JSON 网络协议
海量用户通讯系统-显示在线用户列表(3)|学习笔记
快速学习海量用户通讯系统-显示在线用户列表(3)
98 0
|
网络协议 测试技术 Go
海量用户通讯系统-显示在线用户列表(5)|学习笔记
快速学习海量用户通讯系统-显示在线用户列表(5)
73 0