返回 登录
0

VR应用在直播领域上的实践与探索

阅读4790

声明:本文来自「七牛云主办的架构师实践日——泛娱乐+直播技术最佳实践」的演讲内容整理。PPT、速记和现场演讲视频等参见“七牛架构师实践日”官网。
嘉宾:孙其瑞,得图网络CTO。
责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qianshg@csdn.net,另有「CSDN 高级架构师群」,内有诸多知名互联网公司的大牛架构师,欢迎架构师加微信qshuguang2008申请入群,备注姓名+公司+职位。

与传统的手机直播推流不同的是,VR直播推流往往存在多个采集端,且推流数据的码率远远高于传统的手机直播,这给VR直播的技术实现带来了一系列挑战。对此,孙其瑞结合多年VR行业从业经验,主要分享了VR实时推流的架构与实践。以下为正文:

VR实时推流的架构与实践

图片描述

图 1

图1是VR直播流程。与传统的手机直播推流不同的是,VR推流可能存在多个采集端,通常手机推流数据最多达到 1024P或者1080P,但在VR领域4K才刚刚起步。因为VR的展示跟普通的展示不一样,它是非平面、360度的,所以会多一个拼接和展示环节。拼接环节会用显卡加速到得图,然后分发到电脑、手机等各个终端,再做展示。这是VR直播与传统的直播相比最主要的区别。

在VR实时视频拼接中,最大的难点是速度而不是算法,速度决定了算法的优劣。视频拼接的算法一般会在显卡上完成(显卡编程,指的是GPU编程,与显卡的思维不一样)。除了实时拼接上的难点,超4K直播的推流控制也是VR直播中的一大难点。

总结起来,在这个过程中主要遇到如下挑战:

  1. GPU快速处理优化;

  2. 来自网络的波动。4K直播对网络要求很高,网络波动时做4K直播,无法根据网络进行优化;

  3. 音视频同步。VR直播时,视频和音频不一样,视频要把6路、8路或者是12路进行实时拼接,再加音频口进行混合推流,这时会出现不对等现象。

图片描述

图 2

如何做到实时拼接?

  1. 4路及以上的1920x1080/30fps实时处理。一般来说要达到1920×1080、30fps,会用3.0 HDMI接口;

  2. CUDA 并发处理运算。CUDA 是专门针对显卡进行优化的;

  3. 硬编解码。做 4K 的时候经常会遇到硬编码,也是显卡编码;

  4. 多种输出格式,包括 SDI 切换台、RTMP 流、HTC 眼镜等。SDI 切换台应用比较广泛,比如春晚的时候,可能有 3-4 个机位是通过有 SDI 的接口输出到切换台,由切换台选择哪路流进行推流,所以 SDI 切换台可以做视频编辑,加字幕、文字等等。HTC 的眼镜就是 PCVR 的眼镜,眼镜端在 PC 电脑上,拼接好的数据直接推到眼镜上面,在直播的时候放一个一体机在这里,用户戴上 HTC 的眼镜就可以在这里漫游一圈。

图片描述

图 3

图3是CUDA的架构图,左边是核数,核数决定CUDA的大小,比如960P有1千多的核,1080P是2800多个核。目前,CPU的发展基本到了一定瓶颈,但是GPU却在每年翻倍发展。GPU有自己的架构,有最基础的网格,每个网格都有一个块,每块下面都有限制的数,所以用GPU运算做大数据处理最好。但CUDA在并行运算时会遇到坑:

第一个坑是CPU与显卡的总线带宽。这是一个硬性的标准,因为CPU-GPU有一个物理距离,是无法改变的。比如运算一张图片,基本上有两个FOR循环,但是在GPU里面完全不同,GPU要实现2000多个核同时计算,必须要防止越界,合理分配网络数据。访问一个9×9的图片,让每个块里面有3个像素,取的时候线程里面有3个数据,都配合交叉取二维里面的数据。再比如把两张图片从CPU拷到GPU里面运算,分配的空间是两个不连续的空间,这样做对于GPU的运算很不友好。而且,把一张图片通过内存拷贝到显卡里的过程很耗时,必须进行优化处理,最好的优化方式就是把图片变成一个连续的内存,一次性拷过去。

第二个坑是顺序内存空间。 GPU编程很重要的一方面就是顺序的对乘,比如要将一个1G的文本放到GPU里运算,首先要考虑的事情就是考量一下传输时间和计算时间,如果传输时间远远大于计算时间,用GPU运算就失去了意义。目前,传输带宽最大限额是2.5G,超过这个值GPU运算不过来。但是传输时间是毫秒级开运算的,如果忽略掉传输时间,在1080显卡同时计算一个矩阵相乘,GPU至少是CPU百倍以上的速度。根据以往直播的经验,把CPU关掉、把GPU打开,输入进30帧输出时都能保证30帧,所以GPU运算性能强大。

第三个坑是并行优化。通过GPU进行运算有很多坑,因为它的调试很麻烦,必须调用CUDA里面的内核,通过GPU异步复制的方式进行并行优化,过程往往很复杂。

如何做到高清码率秒开?

做4K的时候,不仅要解决「秒开」问题,还要解决推流问题,因为首帧时间、大小等因素,直接影响最后秒开的速度。此外,编码、带宽、网络波动、4K码流的要求等,也会影响秒开速度。

做到高清码流要做到以下几点:

  1. 必须优化H.264的首帧,在远程播放的时候,首次缓存更多帧下来,就可以让直播变得更流畅;

  2. I帧、B帧和P帧,一般的相机只有I帧或者是P帧,不会有B帧(B帧是一个动画帧,影视设备才有,普通的手机或者是硬件基本不会有),如果推流的时候有音视频不同步,一般是视频里面插了一个B帧,因为多一个帧就多一个网络数据;

  3. 优化GOP数据,H.264里面有一个这样的数据;

  4. 网络结点,因为推流对网络结点要求很高,做VR直播的时候要提前沟通好网络结点,看终端推流端到终端的延时大概要多久,然后优化网络结点。

多终端平台VR播放及架构

图片描述

图 4

以图4为例,演示VR直播服务过程。得图网是做VR直播硬件服务的公司,推流端有VR直播一体机,经常到七牛进行回调、转录、统计、计费监控等。如果做VR直播、全景,可以调用得图网开发者平台的SDK。

在VR直播技术上做了以下优化措施:

  1. 实时转录。以苹果手机为例,做实时转录是因为手机上面是HLS ,不能进行3D贴图。转录推流上去的时候,每5分钟转录成MP4,移动端播放的时候延时很大。

图片描述

图 5

  1. 沉浸感视角。图5是小行星沉浸式视角,看到这个图片会觉得有视觉冲击力,因为此时视场角脱离地球站在比较远的地方。VR的原理就是演进和基变,所谓演进就是用一个凸镜经过光线的反射产生不均匀的同心圆,所谓基变就是把理论上光线原本应该产生的位置找出来。做法就是靠棋盘格通过拍照,找出原本的位置,然后进行数据拟合,然后把基变弯曲的曲线拉直。

  2. 跨平台VR漫游配置。因为VR漫游是纯视觉的东西,语言很难表述清楚。这是一个flash漫游系统,里面有VR漫游的做法,供大家参考。

编辑推荐:架构技术实践系列文章(部分):

评论