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

什么事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进行判断答题是否正确返回给现场人员。完成整个答题流程。

 

773e9d54836cac7a9ff08f8d9b0a509735ea077d

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

声网 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 规范

直播问答的风口与风险

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FeelTouch Labs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值