播放器播放视频流程
流媒体
所谓流媒体是指采用流式传输的方式在Internet/Intranet播放的媒体格式,如音频、视频或多媒体文件。流媒体在播放前并不下载整个文件,只将开始部分内容存入内存,在计算机中对数据包进行缓存并使媒体数据正确地输出。流媒体的数据流随时传送随时播放,只是在开始时有些延迟。
流媒体协议
服务器和客户端之间通信遵守的协议,如RTP/RTCP/RTSP/RTMP/MMS/HLS
备注:播放本地视频不需要解协议
封装/解封装(demux/mux)
把视频码流和音频码流按照一定的格式存储在一个文件中
封装格式:mp4、rmvb、avi、flv、mkv等
视频编码/解码(code/encode)
视频编码是一种压缩标准,主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的,一部电影可能就要上百G的空间。
对比:MPEG4(MPEG-4 && MP4
MPEG4(MPEG-4)是一种编码标准(code),mp4是一种封装格式(mux)
对比:AVC & SVC & H.264
AVC是H.264的别名,advanced video code两者相等。
SVC是AVC的扩展模式,全程为Scalable video code,翻译为可分级编码
可分级编码
H.264 SVC以H.264 AVC视频编解码器标准为基础,利用了AVC编解码器的各种高效算法工具,在编码产生的编码视频时间上(帧率)、空间上(分辨率)可扩展,并且是在视频质 量方面可扩展的,可产生不同帧速率、分辨率或质量等级的解码视频。
H.264 SVC通过在GOP(编码图像组)中设置可丢弃的参考帧实现时间上的可分级。0-16视频帧构成全帧率视频,除T3标志外的所有视频帧构成了半帧率视频,所有 T0标志和T2标志的视频帧构成了1/3帧率视频,所有 只是T0标志的视频帧构成了1/4帧率视频。
SVC 时间可分级、SVC 空间可分级
H.264 SVC通过在在编码码流嵌入具有相关性的多个不同分辨率的子流实现空间上的可分级。上层所有的视频帧构成了高分辨率视频,下层所有的视频帧构成了低分辨率视频,为此,具备H.264 SVC编码的视频会议系统,在保证高效的视频压缩性能的基础上,视频广播端可以通过一次编码产生具有不同帧率、分辨率的视频压缩码流,以适应不同网络带 宽、不同的显示屏幕和终端解码能力的应用需求,从而有效地避免了视频会议系统中MCU上复杂而昂贵的转码。
音频编码
主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。音频编码也是互联网视音频技术中一个重要的技术。但是一般情况下音频的数据量要远小于视频的数据量,因而即使使用稍微落后的音频编码标准,而导致音频数据量有所增加,也不会对视音频的总数据量产生太大的影响。高效率的音频编码在同等的码率下,可以获得更高的音质。
点播、直播技术的发展
1. 渐进式下载:解决视频的下载问题
其实直播时在点播之后的技术。点播说白了就是请求一个视频文件进行播放,直接使用HTTP来请求文件即可。
但是,视频一般比较大,下载完成之后播放不太现实,所以在HTTP的基础上发展出了渐进式下载。如此,就可以在头部中获取整个视频的完整信息,然后下载视频的一个片段进行播放。
2. range-request:解决跳播的问题
渐进式下载解决了播放的延迟问题,但是拖动进度条,不能播放后面的视频内容。因此出现了 range-request 技术,此技术是“指定偏移字节数来请求文件的部分数据”。因为在头部可以获取到视频的长度、码率、帧数,通过进度条计算出时间,然后计算出起始文件的位置,也就是偏移字节数,如此就可以使用 range-request 来请求指定的视频内容进行播放。range-request基本已经被所有的 HTTP 服务器支持;
3. 直播协议的产生
直播不同于点播,点播中的视频是一个完整固定的数据,也就是大小、长度、帧数、码率都是固定的。而直播中,视频的整体大小是一直在增加的,所以 HTTP 协议没办法满足需求,因此才出现了各种各样的直播协议,比如RTMP、HLS等