Skip to main content
VRCHINA
 首页 » AR资讯

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

2016年08月28日 21:23:584140VR馆

与传统的手机直播推流不同的是, VR 直播推流往往存在多个采集端,且推流数据的码率远远高于传统的手机直播,这给 VR 直播的技术实现带来了一系列挑战。针对这些挑战,得图网络 CTO 孙其瑞结合多年 VR  行业从业经验,带来了「VR  应用在直播领域上实践与探索」.

以下是对他演讲内容的整理。

VR 实时推流的架构与实践

VR 应用在直播领域上的实践与探索 AR资讯 第1张

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

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

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

1、GPU 快速处理优化。

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

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

VR 应用在直播领域上的实践与探索 AR资讯 第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 的眼镜就可以在这里漫游一圈。

VR 应用在直播领域上的实践与探索 AR资讯 第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 码流的要求等,也会影响秒开速度。

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

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

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

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

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

多终端平台 VR 播放及架构

VR 应用在直播领域上的实践与探索 AR资讯 第4张

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

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

1.实时转录

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

VR 应用在直播领域上的实践与探索 AR资讯 第5张

2.沉浸感视角

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

3.跨平台 VR 漫游配置

因为 VR 漫游是纯视觉的东西,语言很难表述清楚。这是(https://github.com/suiqirui1987/DetuFlashVr)一个 flash 漫游系统,里面有 VR 漫游的做法,供大家参考。


评论列表暂无评论
发表评论