【直播技术探讨第一章】
【直播技术探讨第一章】
1、 首先了解一下视频直播的流程图吧
视频直播的流程可以分为如下几步:
采集 —>处理—>编码和封装—>推流到服务器—>服务器流分发—>播放器流播放
1) 采集包括视频采集和音频采集
视频采集需要用到的协议
由摄像头等设备拍摄成 YUV 编码的原始数据,然后经过编码压缩成 H.264 等格式的数据分发出去。常见的视频封装格式有:MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV、RMVB 和 WebM 等。
图像采集和编码面临的主要挑战在于:设备兼容性差、延时敏感、卡顿敏感以及各种对图像的处理操作如美颜和水印等。
音频采集需要用到的协议:
频的采集过程主要通过设备将环境中的模拟信号采集成 PCM 编码的原始数据,然后编码压缩成 MP3 等格式的数据分发出去。常见的音频压缩格式有:MP3,AAC,HE-AAC,Opus,FLAC,Vorbis
(Ogg),Speex 和 AMR等。
音频采集和编码主要面临的挑战在于:延时敏感、卡顿敏感、噪声消除(Denoise)、回声消除(AEC)、静音检测(VAD)和各种混音算法等。
2) 处理
视频的处理
一般为美颜、水印、滤镜(可以使用GPUImage这个开源类库处理图片)
以及设备兼容性,延时,卡顿,等
音频的处理
延时敏感、卡顿敏感、噪声消除(Denoise)、回声消除(AEC)、静音检测(VAD)和各种混音算法
3) 编码封装
帧内编码流程图:
a.帧内预测(去除空间冗余)
b.变换(去除空间冗余)
c.量化(去除视觉冗余,有损压缩)
d.熵编码(去除编码冗余)
帧间编码流程图:
a. 帧内预测(去除时间冗余)
b. 变换(去除空间冗余)
c. 量化(去除视觉冗余,有损压缩)
d. 熵编码(去除编码冗余)
主要区别:就是第一步不相同,其实这两个流程也是结合在一起的,我们通常说的I帧和P帧就是分别采用了帧内编码和帧间编码
如今的编码器有哪些对比
压缩编码
目前流行:MPEG-2、H.264(MPEG-4AVC)及VC-1
方案一: H.264/AVC.将原始YUV420SP视频帧压缩成H.264再传输,常见的基于H264的开源Encoder有JM、X264、T264、Hdot264等
方案二: MPEG4.将原始YUV420SP视频帧压缩成MPEG4再传输
最新技术方向:H.265、VP9,FFmpeg
H.265也叫HEVC,与H.264相比,H.265的最大本领是可以在维持画质基本不变的前提下,让数据传输带宽减少至H.264的一半。同时其还支持最高为7680*4320的分辨率,因此即使是2160P甚至是更高级别的超高清视频同样可以通过H.265格式进行编码。
Google公司,他们提出的VP9编码是最有可能跟H.265一较高下的新标准。VP9全称是WebM open-source V9,此前Google推广过VP8,VP9时代才算渐入佳境,Google嫡系如Youtube、Chrome等都已支持VP9编码,还争取到了FireFox的支持,Intel、ARM、NVIDIA、三星、Marvell等硬件厂商也早就宣布支持VP9了。
注:音频编码器有Mp3,AAC等。
4) 推流
针对Android端的RTMP推流选择方案主要有两大类:
1、RTMP
2、HLS
3、RTSP
RTMP
RTMP(Real TimeMessaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播
放器和服务器之间音频、视频和数据传输开发的开放协议。
它有三种变种:
1) 工作在TCP之上的明文协议,使用端口1935;
2) RTMPT封装在HTTP请求之中,可穿越防火墙;
3) RTMPS类似RTMPT,但使用的是HTTPS连接;
RTMP协议(Real Time Messaging Protocol)是被Flash用于对象,视频,音频的传输.这个协议建立在TCP协议或者轮询HTTP协议之上.
RTMP协议就像一个用来装数据包的容器,这些数据既可以是AMF格式的数据,也可以是FLV中的视/音频数据.一个单一的
连接可以通过不同的通道传输多路网络流.这些通道中的包都是按照固定大小的包传输的.
HLS
HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案
HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。
HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。
根据以上的了解要实现HTTP Live Streaming直播,需要研究并实现以下技术关键点
1. 采集视频源和音频源的数据
2. 对原始数据进行H264编码和AAC编码
3. 视频和音频数据封装为MPEG-TS包
4. HLS分段生成策略及m3u8索引文件
5. HTTP传输协议
RTSP(Real TimeStreaming Protocol):
实时流传送协议,是用来控制声音或影像的多媒体串流协议, 由Real Networks和Netscape共同提出的;
5) 播放
电脑端:VLC等
手机端:Vitamio以及ijkplayer等
总结:
一般情况下我们把上面流程的前四步称为第一部分,即视频主播端的操作。视频采集处理后推流到流媒体服务器,第一部分功能完成。第二部分就是流媒体服务器,负责把从第一部分接收到的流进行处理并分发给观众。第三部分就是观众啦,只需要拥有支持流传输协议的播放器即可。
注释:个人总结学历历程,欢迎大神亲临指导,小白努力中。。。
参考链接:http://www.jianshu.com/p/bd42bacbe4cc
http://blog.****.net/stn_lcd/article/details/56012437
http://blog.****.net/xiejiashu/article/details/34860575
http://blog.****.net/tttyd/article/details/12032357/
http://blog.****.net/mediapro/article/details/53423851