在直播系统中,除了直播音视频之外,有时候还想从主播端发布文本信息等,这些信息可以不通过视频传输通道发送给用户播放端,但如果传输的数据想和视频保持精准同步,那最好的办法就是这些信息和视频数据打包在一起传输, 通过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消息而已。第三个是完全和视频保持同步,这个是其他传输通道无法做到的.

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

  1. 如何在RTSP/RTMP直播过程中加入SEI扩展数据发送和接收解析

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

  2. 实现1V1音视频实时互动直播系统 十二、第三节 直播系统中的信令及其逻辑关系

    今天我们开始讲真正的音视频传输了,也就说将我们之前讲解的信令服务器与我们后面讲解的端到端传输过程,那么整个将他们连接到一起,这样就形成了一个真正的直播系统.看似很简单的东西,其实我们要改造的内容还是有 ...

  3. 手机直播/PC直播/摄像头直播等流媒体直播系统中如何进行推流优化?

    流媒体直播系统的推流是视频播放中很重要的一个步骤,推流跟播放其实是逆向的,具体流程就不多说了. 我们视频直播点播流媒体服务器可以进行视频推流播放,那么在视频直播系统中,推流优化是如何实现的?本篇我们就 ...

  4. linux系统中的文件传输

    Linux系统中的文件传输 1 实验环境 2 scp命令 3 rsync命令 3.1 rsync和scp命令对比 3.2 rsync命令用法 4 文件的归档压缩 4.1 文件归档 4.2 文件压缩 4 ...

  5. 直播带货系统,带货直播系统中发布商品的逻辑处理流程

    直播带货系统的风潮最近突然就刮了起来,这大概要归功于淘宝直播带货达人"李佳琦".作为优质的直播系统开发商,为了能给众多用户带来实用性强且变现方式多元化的直播产品体验,推出了带货直播 ...

  6. 教育直播系统中不可或缺的功能部件:电子白板

    大家好,今天我们介绍下在Ubuntu环境中用Qt-Creator设计网络电子白板,所谓的电子白板就是指在网络上通过客户端与服务器进行图元的绘画,然后由服务端广播出去发送到多个客户端上,从而实现图元绘画 ...

  7. 移动端实时音视频直播技术中推流和传输详解

    推流是直播的第一公里,直播的推流对这个直播链路影响非常大,如果推流的网络不稳定,无论我们如何做优化,观众的体验都会很糟糕.所以也是我们排查问题的第一步,如何系统地解决这类问题需要我们对相关理论有基础的 ...

  8. VLC-DSS搭建直播系统中链路断开影响测试

    系统环境搭建如图所示.计算机77上运行VLC从摄像机51上取流,推送给一级DSS服务器30:二级DSS服务器78从一级DSS服务器30上取流转发.(其配置参见<用VLC读取摄像头产生RTSP流, ...

  9. 双绞线传输距离_视频监控系统中布线常用传输线缆分类及制作方法

    同轴电缆: 同轴电缆 同轴电缆可分为两种基本类型,基带同轴电缆和宽带同轴电缆.目前基带是常用的电缆,其屏蔽线是用铜做成的网状的,特征阻抗为75(如RG-8.RG-58等):宽带同轴电缆常用的电缆的屏蔽 ...

最新文章

  1. c语言枚举3位数相加等于10,C语言 联合和枚举
  2. 一种清除windows通知区域“僵尸”图标的方案——XP系统解决方案
  3. qt 单元格加上边框_Excel如何自动添加边框?学会这个方法效率加倍!
  4. 哪一类功率放大电路效率最高_最简单逆变器电路讲解计算,电工电子动手学技术,电路好案例推荐...
  5. python 如何重定向输出
  6. 用StyleCop规范团队代码
  7. 去哪儿-04-iconsDev
  8. 数据不动模型动-联邦学习的通俗理解与概述
  9. 阶段性总结_学习笔记
  10. 我的世界服务器改地皮生态系统,我的世界服务器怎么把地皮世界改为和平模式?...
  11. C# LINQ查询方法及Select()查询方法应用
  12. 计算机耗材管理系统,办公用品(消耗品)管理系统 单机版
  13. ntp时间校准服务器的调试方法
  14. 安捷伦仪器仪表 - 程控总结
  15. 关于QT 报错Error: Class declaration lacks Q_OBJECT macro.
  16. mysql 未找到 WinSxS_win7的winsxs文件清理方法
  17. 抠像互动技术使人物与各种景物叠加,形成神奇的艺术效果
  18. 15nm粒径球形纳米金AuNPs-Thrombin修饰R-藻红蛋白/阿霉素的制备过程
  19. 顺序表练习(三):对称矩阵的压缩储存
  20. 单工通信、半双工通信和双工通信

热门文章

  1. JQuery $.each遍历JSON字符串报Uncaught TypeError:Cannot use 'in' operator to search for
  2. quick time不可用_那些校园中“不可言说”的鄙视链
  3. android实现推送方式解决方案,Android实现推送方式解决方案系列教程
  4. [转载] Java ArrayList toArray(T[] a) 解惑
  5. [转载] java面试100问+参考答案
  6. 计算机课伤害事故的防范,体育课安全伤害事故的防范与处理
  7. python 桌面应用 启动缓慢_如何加快Python 应用的启动时间
  8. java队列实现限流,java中应对高并发的两种策略
  9. python饼形图_Python | 饼形图
  10. java timezone_Java TimeZone setDefault()方法与示例