本文可以了解到
移动端视频直播相关的基础知识,以及如何利用腾讯云直播 SDK 搭建自己的直播系统。
前言
1. 视频时代已经来临
当今的互联网,视频已经成为一股洪流,冲刷着每一个人。
2020 年,由于新型冠状病毒疫情的爆发,视频直播互动更是一飞冲天,在网购、游戏、教育、金融等等方面都呈现爆发式发展。
可见音视频相关的技术,已经是我们不得不去了解的内容了。
2. 视频开发包括哪些内容
移动端的音视频开发一般有:短视频和视频直播互动。
在本人的【Android 音视频开发打怪升级】系列文章中,主要讲解的就是「短视频开发」相关的知识。
而「直播」涉及到的技术,更加庞大,可以说是「短视频开发」的一个超集,因为它不仅涉及到本地视频的编辑,还涉及到直播服务器的架设,以及面对不稳定网络的优化等等,搭建一个直播系统并非易事。
那么你肯定要问了,既然很难,那我直接用第三方的 SDK
就可以了,干嘛还要学习这些晦涩难懂的视频知识?
3. 为什么学习直播基础知识
如果不了解基本知识,直接接入第三方的 SDK
可以吗?当然可以!
但俗话说得好:工欲善其事,必先利其器!
如果不了解其中原理,在未来遇到问题时,要么难以有效地解决,要么需要付出比现在成倍的努力。
一、直播基础知识
最原始的直播系统其实并没有想象的那么复杂,无非就是主播端将音视频数据推送到服务器,观众端则从服务器拉取数据播放。
1. 基础流程
通过下面这个数据流程图,能清晰地看到整个直播的过程。
最简单的直播系统
可以看到,「主播客户端」处理的事情,其实就是短视频开发中最重要的内容:
流程 | 详细操作 |
---|---|
音视频数据采集 | 通过摄像头和麦克风采集 |
音视频滤镜 | 通过 OpenGL 和 SoundTouch 等工具实现音视频编辑 |
音视频编码 | 通过系统硬编码 或 FFmpeg 软编码,将数据编码为 H264 和 AAC |
数据封装打包 | 将编码好的数据封装成指定的格式 |
唯一不一样的地方,短视频会将封装好的数据保存到本地,直播则是通过 推流协议
将数据推送到服务器。
关于
H264
、AAC
、封装格式
等知识,不清楚的可以查看这篇文章【音视频基础知识】。
- 推流
推流,是直播中的一个术语,意思是将流媒体数据推送到服务器。如何推流,关键就在于使用的推流协议。
- 拉流
拉流,指的是「观众端」流媒体数据的拉取,同样也需要通过约定的拉流协议来拉取。
2. 直播协议
直播协议包含了上面提到的 「推流」和「拉流」协议。
主要有一下三种:
- RTMP
RTMP 全名:Real Time Messaging Protocol,实时消息传送协议。是 Adobe 公司开发的,用于 Flash Player 和服务器间之间传输音视频数据。RTMP
是基于 TCP
开发的,属于应用层的协议,默认端口为 1935
。
RTMP 主要特点是实时性好,延时比较低(1~3s)。既可以用来推流,也可以用来拉流。
但是由于其基于 TCP
长链接协议,默认端口非公共端口,可能会被防火墙拦截。
RTMP 视频数据封装格式为 flv
。
- HTTP-FLV
HTTP-FLV,从其命名可以大概看出工作模式。即:将音视频数据封装为 flv
格式,通过 HTTP
长链接协议传输。既然是基于 HTTP
,其默认端口就是 80
,可以直接穿透防火墙。
其传输方式和 RTMP
一样,只是将协议更换为 HTTP
,所以实时性也比较好。
由于 HTTP-FLV
的特点,非常适合用于 App
直播拉流。
- HLS
HLS:HTTP Live Streaming。是苹果公司推出的基于 HTTP
的流媒体传输协议,视频封装格式是 ts
,在 iOS 和 Mac 支持比较好。
与 RTMP
和 HTTP-FLV
不同的是,HSL
是切片传输,它会将视频切为一个个小的 ts
文件,并将切片信息记录在 .m3u8
文件中。
拉流客户端根据 .m3u8
中的 ts
索引信息,按顺序下载播放。
由于其切片的特点,会导致比较大的延迟,在实时性要求比较高的情况下,效果不好。
以上,就是在直播系统中经常使用到的三大协议。
综合以上特点,推流的时候,经常使用的是
RTMP
协议;拉流播放的时候,经常使用的是HTTP-FLV
和HLS
协议。
3. 直播服务器
有了协议,那么客户端和服务器就可以通讯了,怎么样搭建服务器呢?
服务器:一般都是 Nginx
+ 协议拓展模块。
协议拓展模块:
i. nginx-rtmp-module
,不支持 http-flv;
ii. nginx-http-flv-module
,兼容nginx-rtmp-module,并支持 http-flv 直播;
iii. srs(simple-rtmp-server)
,支持三种协议。
搭建服务器也是一个比较繁琐的过程,涉及到的知识也很多,本文不再深入,网上也有很多相关资料可查看。
二、直播中的重难点
在直播中,有几个非常重要的地方,会直接影响直播效果,导致用户流失。
1. 首屏时间
首屏时间,即从观众打开直播,到看到画面呈现出来的时间。影响这个时间的是 H264
编码中的一个概念: GOP
。
- GOP
全称:Group of Picture。即一组帧组成的一个序列。
在 H264
中,分别有 I帧、P帧、B帧 三种帧类型。
GOP
就是由一个 I帧
和多个 P帧
或 B帧
组成的一组相近的画面 。
GOP
解码器可以直接解码 I帧
,但是 P帧
和 B帧
必须依赖 I帧
,或者前后的 P 或 B
才能解码。
首次连上直播间时,需要抛弃掉 P
和 B
帧,等待 I帧
。
所以,影响首屏时间最重要的因素就是 I帧
,也就是两个 GOP
之间的间隔时间。
GOP 间隔的设置并非越小越好,太小则两个
I帧
之间的P/B帧
越少,压缩率越低,画面质量越差,需要做好权衡。