连麦互动直播中混屏技术设计

目录

一. 混屏原理

二. 实现混屏关键技术

1. 并发解码

2. 图像合成

3. 视频同步

4. 编码输出

5. 内存管理

三. 具体实现流程

1、混屏流程

2、混屏算法

四. 音视频同步

五. 总结

参考文献:



本内容全原创,因作者才疏学浅,偶有纰漏,望不吝指出。本内容由灵声讯音频-语音算法实验室整理创作,转载和使用请与“灵声讯”联系,联系方式:音频/识别/合成算法QQ群(696554058)


一. 混屏原理

根据当前混屏或图像合成的研究成果,以及对市场上成型的混屏产品的分析,采用基于视频帧合成的实时流混屏方案。该方案需用高度并发解码方式,对RTPP双线交互的两路视频流进行实时解码成为视频帧序列;并通过将两个视频帧中的YUV图像合成,生成新视频帧,再对新视频帧进行编码,按要求输出目标格式的实时视频流。该方案的系统架构如图1所示:

图1 实时混屏系统框图

解码模块包括两个解码器,一个解码器负责对一个实时视频流进行解码,获得数据帧后,由预处理模块对视频帧进行以下处理。

首先,根据目标输出视频的像素比例,计算该视频画面在目标画面所占的实际大小,对视频帧进行缩放操作,在此缩放视频帧,可以减少后续处理的数据量,而不影响转换后的视频质量。然后,检查图像的色彩空间格式,如果不是YUV格式,统一为YUV格式。最后,将处理好的视频帧从队列尾部加入到待处理的视频帧队列中。

视频合成模块,访问各个编码器输出的待处理的视频帧队列,从队列头部取出视频帧,进行合并。在合并过程中,为保证视频同步,以其中一个视频流为基准,对其他视频流的数据帧采用插帧或丢弃,保证所有数据帧的时间戳一致。解码模块和视频合成模块对视频帧队列分别进行处理,解码模块输出数据帧插入到队列尾,而视频合成模块从视频帧队列头开始处理,将解码和编码的耦合度降到最低,解码与编码可以同时进行。

编码器对视频合成模块输出的视频帧序列进行编码,转换生成混屏后的实时视频流。

二. 实现混屏关键技术

1. 并发解码

实时视频流混屏处理多路实时视频流输入,并输出实时视频流。解码处理的数据量大,实时性要求高,对服务器的解码能力提出很高要求。高度并发解码,充分利用多核CPU计算能力是实现实时视频流混屏的关键。为提高并发度,并发解码至少包括两级并发,一级是两个实时流解码器的并发解码,二级是解码器Frame级别的并发解码。

两个解码器分别对不同的视频源进行处理,并将分别独立输出数据帧,以队列的方式保存,供后续模块调用。解码器之间相互独立,不存在制约关系,可并发处理,提高CPU利用率。解码器Frame级别的并发,解码器采用线程池方式进行解码。在解码器初始化时,根据服务器CPU核数,初始化相应数目的解码线程。解码线程接收输入数据,并对数据进行解码。外部程序通过解码器提供的调用入口,进入解码器的主线程。

2. 图像合成

将两个视频混屏,可通过图像合成的方式,将两个实时流的数据帧图像合成新图像,将合成后的视频帧作为输入进行编码得到实时视频流输出。两个数据帧的图像合成必须采用统一的图像格式。图像数据在存储中的存储格式主要包括RGB和YUV。YUV格式所需存储空间比RGB格式存储空间小,因此YUV格式主要用于多媒体数据传输。高清实时视频流多采用H.264编码方式,其采用的色彩空间是YUV。在合成过程中,如发现视频源的图像采用RGB方式,则需要将其转换成YUV才可合成。

RGB图像和YUV图像可相互转换,从RGB到YUV的转换公式见公式(1)。

Y=0.30R+0.59G+0.11B

U=0.493(B-Y)                                                                                                             (1)

V=0.877(R-Y)

另外,YUV格式也存在多种不同的采样比。在实际应用中,为减少运算量,可选择使用视频源中最普遍使用的格式,而将其他格式的图像进行转换,形成统一格式。

将两个YUV图像合成一个YUV图像,可根据各个图像排列的位置,对图像的三个分量重新进行排列组合成新图像。以Planar格式为例,将两个YUV图像合成一个YUV图像,可将YUV三个通道各自分开处理,对每个通道的分量,按照每行分量的位置从左到右排列,各行从上到下排列。

3. 视频同步

图像合成组成新的视频需解决两路视频间的同步问题。由于两路高清视频流的来源不一致,解码后获得包含图像的数据帧的帧率不一致,为确保合成后视频的质量,必须将多路视频的输出图像进行同步处理。同步方法如下。

选取一个实时视频流的输出数据帧作为基准序列,在单位时间内,对其他实时视频流解码后获得的数据帧序列,通过插帧或丢弃的方式,将视频帧的个数与基准源保持一致,以基准序列的时间戳作为合成后数据帧序列的时间戳。为提高视频质量,在对数据帧进行插帧或丢弃时,可根据对视频对象做真实运动的估值结果进行处理。

4. 编码输出

将合并后的数据帧序列作为原始数据,输入到编码器中。编码器根据目标输出设置的参数,生成实时流,将实时流推到流媒体服务器中。客户端只需要访问CDN服务器即可播放合成后的视频。图像合成只考虑视频处理。

5. 内存管理

数据帧的内存管理机制对数据帧提供创建、销毁、引用、撤销引用、引用迁移等操作,并增加数据区的引用计数器。在引用、撤销引用、引用迁移时,不重新申请数据区,而是建立、修改或撤销对数据区的引用关系,保持数据区指针在数据帧对象中,并修改数据区的引用计数器。当数据帧Buffer被创建时,计数初始化为1。当该Buffer被数据帧引用时,计数+1,当数据帧撤销引用时,计数-1。

每数据帧撤销引用时,检查计数器数值,只有当发现计数器被清零时,才释放该数据区。通过采用引用计数器的机制,有效防止内存泄露,并大大减少重复的内存申请和数据复制操作,提高处理性能。

三. 具体实现流程

1、混屏流程

⑴ 线程1和2相同流程是取得解码完的数据。

⑵ 不做帧内存管理,即时混屏。

⑶虚线左边为上层,右边为下层。

2、混屏算法

⑴ 缩放为按比例进行下采样得到。

⑵ 混屏为对内存数据改写。

其中, LAST_WIDTH 为360,LAST_HEIGHT为480,target_width为LAST_WIDTH/3,target_height为LAST_HEIGHT/3;

四. 音视频同步

音视频同步是实时流媒体互动最基本的需求。从技术上来说,解决音视频同步问题的最佳方案就是时间戳:首先选择一个参考时钟(要求参考时钟上的时间是线性递增的);生成数据流时依据参考时钟上的时间给每个数据块都打上时间戳(一般包括开始时间和结束时间);在播放时,读取数据块上的时间戳,同时参考当前参考时钟上的时间来安排播放(如果数据块的开始时间大于当前参考时钟上的时间,则不急于播放该数据块,直到参考时钟达到数据块的开始时间;如果数据块的开始时间小于当前参考时钟上的时间,则“尽快”播放这块数据或者索性将这块数据“丢弃”,以使播放进度追上参考时钟)。

可见,避免音视频不同步现象有两个关键:一是在生成数据流时要打上正确的时间戳。如果数据块上打的时间戳本身就有问题,那么播放时再怎么调整也于事无补。假如,视频流内容是从0s开始的,假设10s时有人开始说话,要求配上音频流,那么音频流的起始时间应该是10s,如果时间戳从0s或其它时间开始打,则这个混合的音视频流在时间同步上本身就出了问题。打时间戳时,视频流和音频流都是参考参考时钟的时间,而数据流之间不会发生参考关系;也就是说,视频流和音频流是通过一个中立的第三方(也就是参考时钟)来实现同步的。二是在播放时基于时间戳对数据流的控制,也就是对数据块早到或晚到采取不同的处理方法。

五. 总结

以上基于视频帧合成的实时流视频混屏的方法,两个解码器间互不干扰,为高度并发解码提供可能;并采用视频帧队列管理的方式,使得解码和编码的耦合降到最低,解码与编码可以同时进行。高度并发使服务器的多核CPU运算能力得到充分利用,仅依靠软件解码的方式就能实现两个高清视频的混屏。混屏处理后,以实时视频流的方式输出,客户端只需接收视频流进行播放即可,对客户端的配置要求低。

参考文献:

[1] 黄东君,陈松乔.基于源根组播的多点视频会议系统模型及其实现.电子学报,2005(1).

[2] 刘峰.视频图像编码技术及国际标准.北京邮电大学出版社,2005(7).

[3] 肖永豪,余英林.基于视频对象的自适应去帧/插帧视频处理.华南理工大学学报(自然科学版),2003(8).

[4] 刘晓玲,张涛. 基于帧图像合成的实时视频混屏关键技术研究.电信技术,2014(4).



本内容由灵声讯音频-语音算法实验室整理,转载和使用请与“灵声讯”联系,联系方式:音频/识别/合成算法QQ群(696554058)



连麦互动直播中混屏技术设计相关推荐

  1. 连麦互动直播方案全实践3:网易云信连麦互动的实现方案

    毫无疑问直播是当前移动互联网最热门的领域之一,在超强热度的引导下直播领域也吸引了大量的商业资本.在各大直播应用万花齐放的时刻,也正是直播应用面临的真正风口.站在这个风口上,直播应用只把握好风向标,推出 ...

  2. 连麦互动直播方案全实践2:网易云信连麦互动直播方案的演变过程

    毫无疑问直播是当前移动互联网最热门的领域之一,在超强热度的引导下直播领域也吸引了大量的商业资本.在各大直播应用万花齐放的时刻,也正是直播应用面临的真正风口.站在这个风口上,直播应用只把握好风向标,推出 ...

  3. 直播体验深度优化方案——连麦互动直播

    摘要:一.前言移动直播这把火从2015年一直烧到2016年,毫无疑问直播是当前移动互联网最热门的领域之一,在超大热度的引导下直播领域也吸引了大量的商业资本.在这各大直播应用万花齐放的时刻,也正是直播应 ...

  4. 网易云信吴桐:连麦互动直播方案全实践

    演讲 | 吴桐 人物名片:网易云信多媒体资深技术架构师.网易云信音视频实时通话项目与互动直播项目技术负责人,负责项目的架构和实现.加入网易后,先后参加了网易UU网游加速器.易信音视频实时通话等项目. ...

  5. 网易云信吴桐:直播体验深度优化方案——连麦互动直播

    一.前言 移动直播这把火从2015年一直烧到2016年,毫无疑问直播是当前移动互联网最热门的领域之一,在超大热度的引导下直播领域也吸引了大量的商业资本.在这各大直播应用万花齐放的时刻,也正是直播应用面 ...

  6. 连麦互动直播方案全实践1:什么是连麦互动直播?

    毫无疑问直播是当前移动互联网最热门的领域之一,在超强热度的引导下直播领域也吸引了大量的商业资本.在各大直播应用万花齐放的时刻,也正是直播应用面临的真正风口.站在这个风口上,直播应用只把握好风向标,推出 ...

  7. 连麦互动直播 将成直播体验深度优化的必然形式

    视频流媒体文件从电视专网广播到PC公网点播,再到手机移动网络直播的转变,显然已经是2016年不能再热的话题.短短不到一年时间,市场上出现几百家直播APP,内容触及真人秀.赛事.旅游.电商.海淘.教育. ...

  8. 0918 iOS10兼容/iOS系统过高或过低配置包/混合引擎的在线视频连麦互动直播/源码管理工具/Xcode8插件升级/导航栏渐变

    1 兼容iOS 10 资料整理笔记 http://www.jianshu.com/p/42e506998082 iOS developerDiskImage 这是由于真机系统过高或者过低,Xcode中 ...

  9. 高热度领域 连麦互动直播全方位实现

    一.前言 移动直播这把火从2016年一直烧到2021年,毫无疑问直播是当前移动互联网最热门的领域之一,在超大热度的引导下直播领域也吸引了大量的商业资本.在这各大直播应用万花齐放的时刻,也正是直播应用面 ...

最新文章

  1. pytorch自动微分,反向传播(一)
  2. 加速100倍,性能媲美SOTA!浙大提出无数据知识蒸馏新方法FastDFKD
  3. python3扫雷代码_GitHub - pantaduce/minesweeper: Python代码编写的扫雷游戏
  4. zabbix系列之九——添加钉钉告警
  5. python学习 day19
  6. DOS命令编译JAVA程序
  7. PGA内存作用和构成
  8. 斐波那契数列(fabnacci)java实现
  9. NHibernate学习笔记(转载):many-to-one/one-to-many/many-to-many关系映射
  10. Linux mount: Structure needs cleaning 错误解决方法
  11. python如何调用c函数实现真正意义的多线程_python如何使用多线程执行多个函数?...
  12. 运行错误5无效的过程调用或参数_FANUC系统常用参数汇总
  13. LeetCode 1560. 圆形赛道上经过次数最多的扇区
  14. 景点门票销售系统系统java_某景点门票销售管理系统
  15. cad2014打开文件崩溃_CAD玩的再牛,崩溃了咋办?
  16. oracle dg 备库未设置convert参数导致ORA-01111,ORA-01110
  17. Java基础————理解Integer对象的缓存策略
  18. 搭建LNMP基础框架
  19. 程序员如何一键“Get”高清壁纸?
  20. Android 小項目之--猜名字有獎!RadionButton 和RadionGroup應用(附源碼)

热门文章

  1. 数字ic验证门槛高吗?
  2. win11华为matebookxpro蓝牙开关消失解决办法
  3. Unity学习笔记—二次元日系游戏制作(实践篇-游戏初始化场景制作)
  4. 银联报文中和密码相关域
  5. WIN10无法创建或加入家庭组的解决办法
  6. oracle报错数据复数,在ORACLE数据库间移动或复制表空间测试
  7. linux 内存 active,解读vmstat中的ACTIVE/INACTIVE MEMORY
  8. QT颜色选择框以及如何将RGB转为16进制数
  9. practically
  10. 戴尔灵越游匣+Ubuntu16.04的NVIDIA GTX1050显卡驱动安装.md