什么事SEI

SEI即补充增强信息(Supplemental Enhancement Information),属于码流范畴,它提供了向视频码流中加入额外信息的方法,是H.264/H.265这些视频压缩标准的特性之一。SEI的基本特征如下:

1.  并非解码过程的必须选项

2.  可能对解码过程(容错、纠错)有帮助

3.  集成在视频码流中

也就是说,视频编码器在输出视频码流的时候,可以不提供SEI信息。虽然在视频的传输过程、解封装、解码这些环节,都可能因为某种原因丢弃SEI内容,但在视频内容的生成端和传输过程中,是可以插入SEI信息的。这些插入的信息,和其他视频内容一同经过传输链路到达消费端。举例来说,当前火爆的直播问答模式,就是通过SEI传递较多和答题业务相关的信息,通过SEI承载的信息,极大地优化了题目显示和观众音视频观看的同步性。

那么在SEI中可以添加哪些信息呢?以下是一些用户场景可任意扩展的例子:

1.  传递编码器参数

2.  传递视频版权信息

3.  传递摄像头参数

4.  传递内容生成过程中的剪辑事件(引发场景切换)

对于SEI如何应用,我们先以H.264/AVC这一视频编码标准为例。在这一标准中,整个系统框架分为两层:视频编码层面(Video Coding Layer,简称VCL)和网络抽象层面(Network Abstraction Layer,简称NAL)。VCL负责表示有效视频数据的内容,NAL负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。NAL unit是NAL的基本语法结构,它包含一个字节的头信息(NAL header)和一系列来自VCL的原始数据字节流(RBSP)。

基于SEI的阿里云直播答题架构

直播问答的一核心需求是“画题同步”,这也是决定用户体验的关键。阿里云解决方案:

  1. 主持人提出问题,此时准备推送题目。为了能快速让用户看到题目,题库都存在阿里云持久型缓存数据库Redis上。
  2. 现场人员发出信息,通过接入方的AppServer,调用阿里云的OpenAPI,在直播视频流当前位置中插入若干SEI帧,帧内容可由业务自定义。
  3. 播放SDK接收到视频流后,解析出SEI帧,并回调给APP。此时APP立即向AppServer请求问题信息,然后显示在APP上,完成整个出题过程。
  4. 收到用户答题后,用户答题结果实时写入Redis进行判断答题是否正确返回给现场人员。完成整个答题流程。

以上方案环环相扣,实现了从主持人信号与音视频通过同一传输通道同时传输,可实现高精度同步。

声网 SEI 规范

在默认情况下,声网进行服务端转码推流时,会在转码后的 H264/H265 的 SEI 帧中,增加当前视频的编码信息。该信息为 Json 格式的字符串,具体示例如下:


{"canvas": {"w": 640,"h": 360,"bgnd": "#000000"},"regions": [{"uid": 1,"alpha": 1.0,"zorder": 1,"volume": 50,"x": 0,"y": 0,"w": 320,"h": 360}, {"uid": 2,"alpha": 1.0,"zorder": 1,"volume": 89,"x": 320,"y": 0,"w": 320,"h": 360}],"ver": "20180828","ts": 1535385600000,"app_data": ""
}

各项参数定义如下:

  • canvas:画布信息,画布的参数信息如下;

    • w:画布的宽度,单位为像素。主播在 APP 设置的 LiveTranscoding 中的 width 信息;
    • h:画布的高度,单位为像素。主播在 APP 设置的 LiveTranscoding 中的 height 信息;
    • bgnd:画布的背景颜色,RGB 格式,为 16 进制代码表示的字符串。主播在 APP 设置的 LiveTranscoding 中的 backgroundColor 信息;
  • regions:主播信息及主播布局信息,为 region 的列表。主播在 APP 设置的 LiveTranscoding 中的 transcodingUsers 信息。region 的参数信息如下;
    • suid:(可选)该区域对应主播的 String 型 User account。该参数适用于启用了 String 型 User account 的主播;
    • uid:该区域对应主播的 ID。主播在 APP 设置的 TranscodingUser 中的 uid 信息;
    • alpha:该区域的透明度,取值范围 [0.0, 1.0]。主播在 APP 设置的 TranscodingUser 中的 alpha 信息;
    • zorder:该区域的层级,取值范围 [1, 100]。主播在 APP 设置的 TranscodingUser 中的 zOrder 信息;
    • volume:该区域对应主播的音量大小,取值范围 [0, 255];
    • x:该区域在画布中对应的 x 坐标。主播在 APP 设置的 TranscodingUser 中的 x 信息;
    • y:该区域在画布中对应的 y 坐标。主播在 APP 设置的 TranscodingUser 中的 y 信息;
    • w:该区域的宽度。主播在 APP 设置的 TranscodingUser 中的 width 信息;
    • h:该区域的高度。主播在 APP 设置的 TranscodingUser 中的 height 信息;
  • ver:版本信息,当前版本为 20190611;
  • ts:生成该信息时的时间戳,单位 ms;
  • app_data:自定义信息。主播在 APP 设置的 LiveTranscoding 中的 transcodingExtraInfo 信息;

SEI 构成

下面是一段 SEI 帧的内容:

0000  0664bd7b 22617070 5f646174 61223a22  .d.{"app_data":"
0010  222c2263 616e7661 73223a7b 2262676e  ","canvas":{"bgn
0020  64223a22 23666666 66666622 2c226822  d":"#ffffff","h"
0030  3a363430 2c227722 3a333630 7d2c2272  :640,"w":360},"r
0040  6567696f 6e73223a 5b7b2261 6c706861  egions": [{"alpha
0050  223a3235 352c2268 223a3634 302c2275  ":255,"h":640,"u
0060  6964223a 33313031 32373137 39312c22  id":3101271791,"
0070  766f6c75 6d65223a 32382c22 77223a33  volume":28,"w":3
0080  36302c22 78223a30 2c227922 3a302c22  60,"x":0,"y":0,"
0090  7a6f7264 6572223a 317d5d2c 22747322  zorder":1}],"ts"
00a0  3a313533 37393630 32333537 38332c22  :1537960235783,"
00b0  76657222 3a223230 31383038 3238227d  ver":"20180828"}

字段说明:

  • 06:SEI 帧;
  • 64:用户定义的帧类型,这里声网定义 SEI 类型为 100;
  • bd:帧长度。如果帧长度超过 255,例如 922,则表示为 ffffff9d;
  • 其余部分:帧内容;

Reference

FFmpeg从入门到精通——进阶篇,SEI那些事儿

FFmpeg代码从入门到精通——基础篇

FFmpeg从入门到精通——中级篇,FLV文件结构解析

声网直播 SEI 规范

直播问答的风口与风险

直播系统---从直播答题看SEI帧的原理和作用相关推荐

  1. 4 转推流格式_网络互联互通直播系统 分会场直播一体机 各地连线直播推流

    网络互联互通直播系统 分会场直播一体机 各地连线直播推流 LiveMix Cloud无线互联系统完全满足广大客户通过互联网互动制作的需求,可以大大节省制作成本,提高系统延展性,可以远程连接手机或者摄像 ...

  2. 不盲目选择定购直播系统,不要单看价格——云豹直播分析

    在PC+移动直播的时代,想要在直播这片深海分一杯羹的人,首先需要对自己需求的直播有个清楚的定位以及对市场深入的判断和了解,不要盲目的投资,感觉直播火热就盲目跟风投资上市,结果没有了解好市场无奈半途中断 ...

  3. 直播系统开发直播源码搭建流程分享!

    直播作为互联网时代的新产物收到广大人民的欢迎,与此同时,直播市场巨大的商机也让各行各业蠢蠢欲动,直播APP开发的需求也不断上升,本文就将手机直播APP开发搭建流程分享出来,希望能够帮助各大企业了解直播 ...

  4. 语音直播系统开发 直播行业发展新趋势

    最近短视频平台渐渐的都在开放直播权限,究其原因还是因为直播市场的繁荣, 像抖音类的短视频内容生产APP 除了在带货直播上发力 也瞄准了语音直播这一领域 一 语音直播系统开发该如何定位: 从字面意思来看 ...

  5. 体育直播app/原生双端app/体育赛事OBS直播系统/体育直播源码/NBA直播/电竞直播app

    体育直播源码简介: 功能完善系统包含热门球赛.即时比分.赛程类别.比赛直播.赛事解说.赛程列表 多端源码包含电脑PC端+苹果APP+安卓APP 开发周期短,源码是成品,搭建部署快,只需对接好赛事数据即 ...

  6. php图文直播系统,图文直播

    16:33 2019-08-28 16:33 2019-08-28 16:31 2019-08-28 16:30 2019-08-28 16:28 2019-08-28 16:26 2019-08-2 ...

  7. 1对1直播系统-C135 直播源码-含安卓IOS双端

    介绍: 市面上找来的,并未测试,喜欢的可以拿走测试吧,UI的挺不错的,双端都支持 网盘下载地址: http://kekewangLuo.net/RFHnP1cbfVY0 图片:

  8. 腾讯云低延时直播系统架构设计与弱网优化实践

    "直播带货"可能是2020年最具代表性的词汇之一,那么传统电商该如何融合直播系统,直播过程如何保障用户的最佳观看体验?本文由腾讯云资深架构师何书照在LiveVideoStack线上 ...

  9. 直播系统解决方案:直播平台如何开发搭建

    2019独角兽企业重金招聘Python工程师标准>>> 当下,直播依然非常的火爆,想要分羹的人也是非常多,看到这么充满激情的直播市场,免不了一些从事开发编程人员对直播的进一步开发和研 ...

最新文章

  1. 2018:数据科学20个最好的Python库
  2. java中实现将十六进制按位取反
  3. 反射型XSS漏洞详解
  4. c char转int_c/c++基础之sizeof用法
  5. GitHub热榜第四!这套Python机器学习课,免费获取还易吸收 | 资源
  6. java静态方法没有this,super与this无法用在static方法中
  7. 语言百马百担求马匹数_C语言经典编程题(下)
  8. ThreadGroup(线程组)
  9. 项目resource下文件读取失败
  10. AH8063,输入6.6V-30V,4A大电流,三节锂电池充电管理芯片iC
  11. 计算机excel取整函数,Excel取整公式集锦
  12. 危地马拉惊现“地狱之门”
  13. 小米5 Android 8.0解bl,小米8 刷机 解账号BL锁 隐藏帐户 免授权解锁刷机包-刷机之家...
  14. BPMN 2.0规范
  15. iphone远没有android好用,IPhone真的比Android流畅?不要被视觉欺骗了
  16. 哪些工具可以让嵌入式开发事半功倍?详细盘点嵌入式工程师必备工具!
  17. 查看自己电脑应用对应的端口号
  18. 全球及中国弹性运动胶带行业发展展望及投资趋势预测报告2022-2027年
  19. 电子商务组成与流程框架
  20. opencv learn by 贾志刚

热门文章

  1. 世界上第一台通用计算机的英语缩写,世界上第一台计算机诞生
  2. 有容云:微服务容器化的挑战和解决之道
  3. opengles的双PBO
  4. 【Turtle表白系列】你为什么还单身 ?因为昨天才遇见你。(爱心升级版本来袭)
  5. C# unity 中实现汉字转拼音
  6. java自学--容器
  7. 拆解----可充电LED小台灯
  8. 格兰杰因果检验-基础概念
  9. scrapy-爬取豆瓣电影排行250
  10. clang: warning: argument unused during compilation: ‘-no-pie‘ [-Wunused-command-line-argument]