流媒体背景
非流式传输--->流式传输
用户通过网络体验多媒体应用必须将全部的媒体文件下载完毕,而后在本地运行--->流媒体技术(Streaming+Media)
直接数字化而未经压缩的视频数据量是十分惊人的。正是以损失清晰度换取压缩效果这一视频数据处理领域具有革命性的设计思想,催生了如今百花齐放的视频编码方式。
MPEG-1,MPEG-2,MPEG-4,MPEG-7,MPEG-21,H.264,H.265是视频编码方式(编解码器codec)
由于视频编码的主要任务是缩小视频文件的存储空间,因此,视频编码又称视频压缩编码或视频压缩,简单地说就是去除视频数据中的冗余信息。用以实现编码功能的软件称为编码器(coder),而用以实现解码功能的软件称为解码器(decoder),二者合称为编解码器(codec)
视频格式指视频文件格式(container format)。常见container format包括.mp4、.m4v、.avi、.mov等,container format 只是一个框(box),框中通常包含视频文件、音频文件、字幕和元数据
常见的流媒体协议解读:
首先流媒体协议分为两大类:1.基于Http协议 2.只属于应用层协议的流媒体协议
- RTSP(real time streaming protocol)
基于udp协议,实时性比较好、一般用于视频会议。
- RTMP(real time messaging protocol)
RTMP属于私有协议,被Adobe Systems收购。播放RTMP需要flash插件。
RTMP工作在TCP之上,默认使用端口1935
RTMP协议中,视频必须是H264编码,音频必须是AAC或MP3编码,且多以flv格式封包。
- HTTP-FLV
RTMP和HTTP-FLV的视频格式都是flv格式的,只是传输协议而不同。RTMP是tcp的传输协议,而HTTP-FLV是http长链接的传输协议。
HTTP-FLV就是对RTMP协议的封装,相比于RTMP,它是一个开放的协议。因此他具备了RTMP的实时性和RTMP不具备的开发性,而且随着flv.js出现(感谢B站),使得浏览器在不依赖flash的情况下,播放flv视频,从而兼容了移动端,所以现在很多直播平台,尤其是手机直播平台,都会选择它
- HLS(HTTP Live Streaming)
是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。
HLS协议由三部分组成:HTTP、M3U8、TS。这三部分中,HTTP 是传输协议,M3U8 是索引文件,TS 是实际的音视频文件。
.m3u8 文件,其实就是以utf-8编码的m3u文件,这个文件本身不能播放,只是存放了播放信息的文本文件。
HLS的实时性较差,不过优势是H5、IOS、Android都原生支持。
- WebRTC
注意事项
flv.js延迟问题
累积延迟:flv.js有累积延迟问题,它在播放的过程中,会越来越落后于视频流的进度,这里应该定期的清空MSE的缓冲。
flv.js的并发
chrome浏览器对于同一个域名的并发连接是6路,而HTTP-FLV是基于HTTP协议的长连接,一般不注意的话,很容易误以为流媒体服务器有什么并发上的性能问题,其实这是浏览器的锅,这里建议使用多域名或是多端口号来避开浏览器对单域名的并发数的限速。