网上赚钱揭秘

WebRTC为什么不能做直播平台_网上赚钱揭秘

admin 2019-08-10 16:42 网上挣钱方法 0 评论

什么直播平台容易赚钱吗WebRTC定义:

WebRTC is a free, open projectthat provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.

Our mission:To enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to comm unicate via a common set of protocols.

The WebRTC initiative is a project supported by Google, Mozilla and Opera, amongst others. This page is maintained by the Google Chrome team.

——来自WebRTC官网

定义说明了WebRTC可以为浏览器,手机和物联网设备构建富媒体和高质量的实时通信应用。按照定义来说,WebRTC做直播理论上是没有问题的。但是现实情况不容乐观!我们主要从以下几个方面来说一下:浏览器

如果直接使用WebRTC直接推流直播的话,目前Google浏览器最多可以支持6-8个人,人数再多的话,浏览器就崩溃了。不是使用直播推流不就可以了。理论上也是这样的,但是现实很残酷。Chrome虽然可以用相关的js的API获取到摄像头和麦克风的数据。但是如果长时间直播,Chrome的稳定性堪忧,我们项目的经验是,chrome这样运行24小时以上内存占用很厉害,而且容易崩溃。网络

如果不直接推流,而是通过WebRTC把流推给中转服务器,这样是可行的。完全没有问题。中国的网络环境相对于美国来说是比较差的,“人多就会卡”这是一些人使用WebRTC做直播的感受。5G普及的时候,这个问题可以得到解决。使用规模

如果你有10万粉丝同时观看的话,通过推流(标准流大概14kb)到 中转服务器,分发给10万观众,那么你的服务器宽带大概需要:100000x40KB=4000MB=4G。按照Ucloud直播云的价格计算的话,一天的费用大概是:500x1.1+3500x0.9=3700。这是10万人一天的宽带费用。据蓝鲸TMT的测算,按照去年的标准来算,直播平台的带宽通常取本月带宽峰值月结,如果按照峰值100万人来结算,就意味着带宽为1.5T,1.5T现在市场价最低大约是每月3000万(1T=1024G)。音视频编码部分

vpx编码器太弱,专利原因无法使用H264,所以需要自己改H264或者H265的代码。WebRTC人声编码还是很可疑的,但是对于音乐和非人声效果很糟糕。兼容性

你要保证你的用户使用的都是支持WebRTC的浏览器。那些用IE8的怎么办?

所以WebRTC在当前阶段来说,成为直播平台还是有很多障碍的。

那么问题来了,现在的直播平台是怎么做的呢?

我们来大体了解一下。

  直播的整体流程

直播视频采集端,由主播通过摄像头手机等采集设备,采集视音频流,编码后采用RTMP协议推流到直播流服务器。这里采用H.264编码对视频流进行编码,使用AAC对音频流进行编码,采用这两种编码的原因是hls协议要求使用这两种编码。 接下来直播服务器会对从采集端推送的流进行一定的处理。比如,hls协议会将视频流切片成一个个的TS视频文件缓存在服务器中,同时生成一个m3u8文件记录了视频流中的包含的TS文件。 之后如果有播放器请求某一个直播链接,服务器会使用RTMP或者hls协议将流推送到播放器。那么我们该如果根据情况选择这两种协议呢。首先,我们需要明确一点,这两种协议各有利弊。如下所示:

RTMP:RTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。支持FlashPlayer等网页播放器,移动端支持Vitamio。延迟在三秒左右,实时性较高。

HLS (HTTP Live Streaming),Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。支持Apple原生产品,Android3.0以上的提供原生支持,桌面端的浏览器提供插件支持,例如:JWPlayer。根据TS长度不同,一般会有10s的延迟。

综合以上因素,我们认为如 果对实时性要求较高,那么使用RTMP会比较好。网页端使用RTMP会比较好,因为Flash Player原生支持,而大多数的浏览器都会安装Flash player。而在移动端如果对实时性要求不高,那么采用hls比较好,因为ios包括3.0以上的安卓都原生支持hls协议。接下来本文将根据以上的三个步骤的具体实现分别展开说明,为了篇幅考虑,我们会将一些内容放到子文章中。视频采集与编码

视频采集可以有多重途径,比如通过电脑摄像头,通过OBS等录屏软件进行录屏,通过手机摄像头采集。由于目前户外直播和移动互联网很火,所以我们就选择实现在安卓设备上通过摄像头采集视频流。 为了实现这一功能,我们使用了一个开源项目javacv 它包含了一些在计算机视觉领域应用比较多的库,我们主要使用的是它的FFMpeg库。使用FFMpeg的FFMpegFrameRecoder类,我们能够方便地将从android摄像头采集到的帧传输到服务器。具体的通过Camera和FFMpeg推流到服务器的实现请看我们的另一篇文章Android使用FFMpeg实现推送视频直播流到服务器。另外FFMpeg也支持H.264和AAC编码。直播流服务器

关于直播服务器,我们选择使用我们中国人开发的一个开源项目——srs,它支持RTMP/HTTP/RTSP等协议的流输入,支持RTMP/HDS/HLS/HTTP等协议的流输出,同时它也支持集群。给作者点赞。

关于srs的安装和使用可以直接看它在github上的wiki,这里不再赘述。需要注意的一点是该项目在centos 6.x 和ubunut12.x上能正常编译通过,但是在比如我使用的ubuntu14.04上会有一些依赖包的缺失。所以为了方便考虑的话,读者可以在centos和ubuntu12.x上进行测试。播放器

我们在试验的过程中,使用多种播放器和库在全平台实现了rtmp和hls的播放。在网页端使用了videojs,在安卓端使用vitamio。具体的实现请看我们的另外一篇如何在网页端和移动端播放rtmp和hls视频流总结

当然本文中的解决方案只是最简单的,对于直播服务器集群,直播间的创建和管理,直播间直播密码和权限,内容分发网络CDN都没有进行深入的研究。但是通过本实验性项目,我认为对于我们了解整个直播的业务流程还是很有帮助的。

一些名词释义:

Real Time Messaging Protocol (RTMP) was initially a proprietary protocol developed by Macromedia for streaming audio, video and data over the Internet, between a Flash player and a server. Macromedia is now owned by Adobe, which has released an incomplete version of the specification of   the protocol for public use. (reference from wikipedia )

Flash Player是天生能够播放RTMP流的,所以RTMP流可以在网页上得到很好的支持,另外也有很多其他浏览器能够支持播放RTMP流,如比较知名的JW player,videoJS。另外RTMP流的延迟只有3s,比较适合一些实时性和互动性较高的直播。

AAC(Advanced Audio Coding),中文名:高级音频编码,出现于1997年,基于MPEG-2的音频编码技术。由Fraunhofer IIS、杜比实验室、AT&T、Sony等公司共同开发,目的是取代MP3格式。2000年,MPEG-4标准出现后,AAC重新集成了其特性,加入了SBR技术和PS技术,为了区别于传统的MPEG-2 AAC又称为MPEG-4 AAC。

HLS (HTTP Live Streaming),Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。

参考资料:

WebRTC官网: (需要科学上网)

知乎:question/25497090

Ucloud:video/ulive/charge

In Coding:blog/2016/01/29/直播解决方案-搭建你自己的直播平台/