[绍棠] VR应用在直播领域上的实践与探索
来源:互联网 发布:棉麻格子连衣裙淘宝 编辑:程序博客网 时间:2024/05/20 16:41
与传统的手机直播推流不同的是,VR直播推流往往存在多个采集端,且推流数据的码率远远高于传统的手机直播,这给VR直播的技术实现带来了一系列挑战。对此,孙其瑞结合多年VR行业从业经验,主要分享了VR实时推流的架构与实践。以下为正文:
VR实时推流的架构与实践
图1是VR直播流程。与传统的手机直播推流不同的是,VR推流可能存在多个采集端,通常手机推流数据最多达到 1024P或者1080P,但在VR领域4K才刚刚起步。因为VR的展示跟普通的展示不一样,它是非平面、360度的,所以会多一个拼接和展示环节。拼接环节会用显卡加速到得图,然后分发到电脑、手机等各个终端,再做展示。这是VR直播与传统的直播相比最主要的区别。
在VR实时视频拼接中,最大的难点是速度而不是算法,速度决定了算法的优劣。视频拼接的算法一般会在显卡上完成(显卡编程,指的是GPU编程,与显卡的思维不一样)。除了实时拼接上的难点,超4K直播的推流控制也是VR直播中的一大难点。
总结起来,在这个过程中主要遇到如下挑战:
GPU快速处理优化;
来自网络的波动。4K直播对网络要求很高,网络波动时做4K直播,无法根据网络进行优化;
音视频同步。VR直播时,视频和音频不一样,视频要把6路、8路或者是12路进行实时拼接,再加音频口进行混合推流,这时会出现不对等现象。
如何做到实时拼接?
4路及以上的1920x1080/30fps实时处理。一般来说要达到1920×1080、30fps,会用3.0 HDMI接口;
CUDA 并发处理运算。CUDA 是专门针对显卡进行优化的;
硬编解码。做 4K 的时候经常会遇到硬编码,也是显卡编码;
多种输出格式,包括 SDI 切换台、RTMP 流、HTC 眼镜等。SDI 切换台应用比较广泛,比如春晚的时候,可能有 3-4 个机位是通过有 SDI 的接口输出到切换台,由切换台选择哪路流进行推流,所以 SDI 切换台可以做视频编辑,加字幕、文字等等。HTC 的眼镜就是 PCVR 的眼镜,眼镜端在 PC 电脑上,拼接好的数据直接推到眼镜上面,在直播的时候放一个一体机在这里,用户戴上 HTC 的眼镜就可以在这里漫游一圈。
图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播放及架构
以图4为例,演示VR直播服务过程。得图网是做VR直播硬件服务的公司,推流端有VR直播一体机,经常到七牛进行回调、转录、统计、计费监控等。如果做VR直播、全景,可以调用得图网开发者平台的SDK。
在VR直播技术上做了以下优化措施:
- 实时转录。以苹果手机为例,做实时转录是因为手机上面是HLS ,不能进行3D贴图。转录推流上去的时候,每5分钟转录成MP4,移动端播放的时候延时很大。
沉浸感视角。图5是小行星沉浸式视角,看到这个图片会觉得有视觉冲击力,因为此时视场角脱离地球站在比较远的地方。VR的原理就是演进和基变,所谓演进就是用一个凸镜经过光线的反射产生不均匀的同心圆,所谓基变就是把理论上光线原本应该产生的位置找出来。做法就是靠棋盘格通过拍照,找出原本的位置,然后进行数据拟合,然后把基变弯曲的曲线拉直。
跨平台VR漫游配置。因为VR漫游是纯视觉的东西,语言很难表述清楚。这是一个flash漫游系统,里面有VR漫游的做法,供大家参考。
- VR应用在直播领域上的实践与探索
- [绍棠] VR应用在直播领域上的实践与探索
- 知识图谱技术在司法领域的应用:国双科技的探索与技术分享
- 【SLAM】同时定位与地图创建在无人车领域的应用探索
- 同时定位与地图创建在无人车领域的应用探索
- 社交数据在征信领域的应用探索
- 独家 | 知识图谱技术在司法领域的应用:国双科技的探索与技术分享
- 在 Oculus和 Gear VR上开发跨平台的 VR应用
- Groovy探索 DSL在Calendar类上的实践 一
- React Native在直播应用中的实践
- 锤子发布会除了VR直播,居然还在电视上直播了
- runtime在应用国际化上的实践
- php在移动领域的开发探索
- 区块链在版权保护方面的探索与实践
- 团购网在大数据应用上的探索
- 有关Unity3D在VR领域的优化措施
- 有关Unity3D在VR领域的优化措施
- BDTC 2017丨大数据在金融、交通、医疗、工业领域落地实践与应用
- MIT让iPhone电池的电量提高一倍,他们是怎么做到的?
- 腾讯第二季度财报:支付、云服务增速明显,To B业务将成为战略方向
- 关于机器人的未来,这些学术大牛是怎么说的
- php 文件处理
- Matlab 一些文件命令
- [绍棠] VR应用在直播领域上的实践与探索
- 2017全球大数据典型公司盘点分析
- C语言最长回文子串
- 场同摩擦力(场辩证应用)
- mysql 时间戳与日期格式之间相互转换
- 手机之后,董明珠杀入汽车市场,格力拟130亿收购珠海银隆
- 四岁的微信公众平台,是如何从“小个体”成长为“大平台”的?
- 本周锋评:谁敢偷我无人车的车轱辘?
- C#数据结构--栈Stack