2020 年初,一场突如其来的疫情,小时候破天荒的想法竟然真的成了现实:
随着各地中小学纷纷网上开学,至此,辛勤的园丁们摇身一变,变成了当红主播,通过在线直播为学生授课;而学生们则变成了为主播刷“666”,刷“火箭”的粉丝。同时,五花八门的直播课教学“事故”也跟着层出不穷。
例如有老师声情并茂地讲了一节课,最后发现没有开麦,一直对着空气滔滔不绝……
而有的同学上课忘记关麦还不自知,数学课上背历史,场面一度十分尴尬……
有的老师家里网络太卡,等到网络恢复,卡顿结束,下课时间也到了……各种“翻车现场”虽然让直播网课的“娱乐性”直线上升,但学生的学习效能也略打折扣。于是,老师和同学有了共同的心愿:希望疫情早日结束,我们要开学!
虽然网课直播产生了很多段子,但还是以教学为主,是现阶段“停课不停学”较有效的学习方式。
其实,不止于网课,公司会议、亲友拜年、朋友小聚,都可以通过直播实现,这样既可以防止人群聚集,又能完成想要的事情,一举两得。
直播的协议选择
说到直播,大家最关心的肯定都是直播延迟问题,因为这会直接影响到直播的质量。过年期间在家,我那即将高考的妹妹在家上网课,而她最常说的一句话就是:“老师手速真快,问题还没回答呢,答案就已经出现到公屏上了。”
这就是直播延迟导致的。
众所周知,延迟和网络环境有很大的关系。网速跟不上,延迟就会变高;传递数据丢包时,会出现画面和声音“卡顿”现象。因此,想要进行一场完美的直播,无论直播环境还是观看环境,都要保证网络的稳定。
除了网络因素,还有一个很大的影响直播延迟的原因,那就是直播架构中选择的直播协议。目前常用的直播协议有三种,分别是:RTMP、HLS 和 HTTP-FLV。
RTMP
RTMP,即 Real Time Messaging Protocol(实时消息传输协议)。它是 Adobe 为 Flash 播放器和服务器之间的数据传输所开发的专有协议,该协议可通过 Internet 在编码器和服务器之间提供视频,音频和数据的高性能传输。RTMP 是一种基于 TCP 的复杂实时网络协议,专为低带宽下的高性能传输而设计。它对底层的优化也比其它协议更加优秀,基本上所有的编码器(摄像头之类)都支持 RTMP 输出。
除了上述的一些优点,RTMP 的最重要优势之一就是传输中的实时延迟非常低(大约在1-3秒),而 HTTP 流的延时一般在 10 秒以上。RTMP 流的技术成熟(现在已经有 10 多年的历史了)可以相对轻松地实现。它不但可以传输多种格式的视频和音频,还可以应用诸如播放器验证之类的安全功能。
但是,RTMP 也有一些缺点:
- 仅适用于 Flash,不适用于 HTML5
- 很多设备无法播放,特别是在 iOS 端,需要使用第三方解码器才能播放
- 容易受到防火墙的阻拦,因为它使用的是特殊的 1935 端口
HLS
在 2019 年,使用过 Chrome 浏览器的用户应该都收到过浏览器的弹窗:“自 2020 年 12 月开始,Flash Player 将不再受支持”。其实不止 Chrome 浏览器,其他浏览器也这类提示。目前大家还可以手动选择启用 Adobe Flash Player 插件,但到今年 12 月份后,Chrome 将彻底禁止调用 Flash 插件。为此各个网站只能选择放弃 Adobe Flash Player,转身投入 HTML5 的怀抱。而 Adobe 也已经宣布,2020 年底将停止更新 Flash Player。
到 2020 年末,Flash 最终将会消失。这也是 Apple 向用户推广 HLS(HTTP Live Streaming)协议为流视频首选方式的原因。
HLS 是 Apple 推出的基于 HTTP 协议的动态码率自适应技术,它支持 HTML5,并且实现非常简单。同时因为 HLS 是 Apple 提出的,所以无论是 iPhone、 iPad、Safari 都不需要安装任何插件就可以原生支持播放 HLS, 而现在 Android,Microsoft 和 Linux 设备也都支持播放使用 HLS 推送的流。
为了向每个观看流媒体的人(包括屏幕小,网络不稳定的人)提供高质量的流,HLS 可以根据每个设备的情况动态调整分辨率,这被称为自适应比特率流传输。当然了,HLS 不是以一个比特率创建一个实时流,而是使用一个代码转换器(通常位于服务器中)来创建具有不同比特率和分辨率的多个流。然后,流媒体服务器再根据每个设备的屏幕和网络情况发送最高分辨率的流。
HLS 同时还兼具以下特点:
- 支持的音频编解码器:AAC-LC,HE-AAC+v1 和 v2,MP3
- 支持的视频编解码器:H.264,H.265
- 着重于观看体验,延迟较高,大约 6 到 30 秒
- 变体:低延迟 HLS(可到 2 秒或更短),PHLS(Protected HLS)
HLS 可以说是现在最常用的流协议了。在国外发布的一份《2019 年视频流延迟报告》中显示,超过 45% 的参与者表示他们在使用 HLS 协议进行流分发。
HTTP-FLV
一般的直播应用要么使用 Adobe 的 RTMP 协议,要么使用 Apple 的 HLS 协议,下面我们来说说既结合了 RTMP 的低延时,又可以复用现有 HTTP 分发资源的流式协议:HTTP-FLV。
FLV 大家都比较熟悉,它是 Flash Video 的简称,FLV 流媒体格式是随着 Flash MX 的推出发展而来的视频格式。而 HTTP-FLV 代表通过 HTTP 以 FLV 格式传递的实时流。对于服务器端,由于现在还是普遍使用 RTMP 进行推流,可以将 RTMP 流转换为 FLV;对于客户端,播放 FLV 流与播放静态资源中的 FLV 视频相同。当然,需要支持 FLV 的播放器。
HTTP-FLV 还具有以下特点:
- 支持渐进式下载,只要有足够的缓冲,在下载完成之前就可以开始播放流媒体
- 不需要特殊的协议,而且可以使用 HTTPS 做加密通道
- 很好的兼容 HTTP 302 跳转,调度灵活
- 不太可能被防火墙拦截
三种协议对比
直播的弹幕实现
对于经常看直播和视频的小伙伴们,感兴趣的肯定不仅是视频内容,当然少不了有趣的弹幕了。如果说视频是一块蛋糕,那弹幕就是蛋糕上那些五颜六色的点缀。弹幕的出现,让视频的内容表达更加丰富多彩,让大家突然发现原来有这么多人陪我一起看,我们还能一起互动,这种归属感是何等的强烈。
可以说弹幕是直播必不可少的一部分,那它可以借助什么技术实现呢?下面我们来说的就是 WebSocket。
WebSocket 是一种全新的协议,它将 TCP 的 Socket(套接字)应用在了 web page 上,从而使通信双方建立起一个保持在活动状态连接通道,并且属于全双工(双方同时进行双向通信)。而直播发送的弹幕需要实时显示,通过 WebSocket 协议可将本地客户端发送的弹幕信息通过服务端全部推送至其他用户的客户端并进行实时展示。WebSocket 协议更好的节省了服务器资源和带宽,并且能够更实时地进行通讯。
在这之前,很多网站使用的是 HTTP 的轮询。HTTP 协议是半双工协议,也就是说在同一时间点只能处理一个方向的数据传输,属于单向传输。比起 HTTP,WebSocket 协议是全双工的,服务器可以随时主动给客户端下发数据,可以双向发送或接受信息,属于双向传输。WebSocket 可以通过客户端和服务器的握手建立连接,并且连接一直保持“打开”状态,这样既避免了资源浪费,又保证了实时性。
总结一下,WebSocket 主要有以下优势:
- 较少的资源浪费
- 更强的实时性
- 可以保持长连接
不止直播弹幕,类似网站在线咨询窗口、在线教育、体育实况更新等场景都可以通过 WebSocket 实现。又拍云将 WebSocket 协议 与 CDN 完美融合,支持单一域名即有 WebSocket 服务又包含 HTTP 服务,可实现两种服务同时加速,并通过多种技术优化手段,提升用户访问效率。
同时,针对疫情期间线上医疗、在线学习的需求量上升,又拍云提供了完整的在线解决方案,从文件上传、内容存储、音视频处理、内容分发、安全防护等方面为在线用户提供一站式服务。什么?你是技术小白?完全不怕,上直播零门槛搭建线上直播,观看直播也无需下载任何 App,自动生成直播分享观看页面,同时还支持在第三方平台同步观看。还在等什么,赶快行动起来!
往期技术文章都在微信同步分享,可以添加微信:upyun0001
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。