什么是流媒体?
流媒体是指采用流式传输的方式在Internet/Intranet播放的媒体格式,包含音频、视频、多媒体文件;流媒体在播放前不会下载整个文件,只将开始部分存入内存,在用户访问时对数据包进行缓存,让媒体数据正确地输出,流媒体数据流随时传送随时播放,只是在开始时有些延迟。
流媒体传输的过程是什么样的?
CDN:Content Delivery Network,第三⽅提供的⽹站资源加速下载或传输的⽹络,其原理是把同样的静态⽂件或者实时多媒体流同时发布到电信、移动、联通等运营商的⽹络内,⽅便⽤户就近下载实现更快、更稳定的传输速度。
推流:客户端采集的⾳视频数据,经过编码和⽹络传输,发送给流媒体服务器的过程,服务器可能是⾃⼰搭建的,也可能是CDN提供的。
拉流:客户端或者播放器从服务器下载(拉取)指定的媒体流并在本地播放的过程。
流媒体相关协议及概念有哪些?
WebSocket:WebSocket是一种在单个TCP连接上进行全双工通信的协议。
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 HTML5定义了WebSocket协议,Websocket 通过HTTP1.1 协议的101状态码进行握手,信令传输一般用到此协议。
RTP:RTP是基于UDP的一种流媒体传输协议,RTP本身不具备按时发送机制和质量服务,完全依赖底层服务去实现这个过程,相当于是基于UDP进行二次开发的一种协议。
RTMP:Adobe开发的⼀种基于TCP的实时流媒体传输协议,有公开标准,所以主流的CDN⼚商都⽀持这种协议类型的数据流的分发。RTMP协议同时⽀持采集端推流和播放端拉流。RTMP 基于 flash ,无法在 iOS 的浏览器里播放,实时性比 HLS 要好。
HLS:H5标准定义的⼀种将实时流切割、保存成m3u8分⽚⽂件,提供给播放器下载的协议。HLS只⽀持拉流,不⽀持推流。CDN⽀持将RTMP推送的媒体流⾃动转换成m3u8格式并提供HLS下载。
主要用于PC和Apple终端的音视频服务,包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件,用于直播和点播都可以。
WebRTC:名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。
⚪视频引擎(VideoEngine)WebRTC的视频部分,包含采集、编解码(I420/VP8)、加密、媒体文件、图像处理、显示、网络传输与流控(RTP/RTCP)等功能。
⚪音效引擎(VoiceEngine)WebRTC的音频部分,包含设备、编解码(iLIBC/iSAC/G722/PCM16/RED/AVT、NetEQ)、加密、声音文件、声音处理、声音输出、音量控制、音视频同步、网络传输与流控(RTP/RTCP)等功能。
⚪会议管理(Session Management)
⚪iSAC:音效压缩
⚪APIs(Native C++ API, Web API)
什么是流式传输
客户端通过链接视频服务器实时传输音、视频信息,实现“边下载边播放”。
⚪顺序流式传输
即顺序下载音、视频文件,可以实现边下载边播放,不过,用户只能观看已下载的视频内容,无法快进到未 下载的视频部分,顺序流式传输可以使用Http服务器来实现,比如Nginx、Apache等。
⚪实时流式传输
实时流式传输可以解决顺序流式传输无法快进的问题,它与Http流式传输不同,它必须使用流媒体服务器并 且使用流媒体协议来传输视频,它比Http流式传输复杂。常见的实时流式传输协议有RTSP、RTMP、RSVP 等。
1.将原始的视频文件通过编码器转换为适合网络传输的流格式,编码后的视频直接输送给媒体服务器。
2.媒体服务获取到编码好的视频文件,对外提供流媒体数据传输接口,接口协议包括 :HTTP、RTSP、 RTMP等。
3.播放器通过流媒体协议与媒体服务器通信,获取视频数据,播放视频。
视频点播方案
⚪方案1
播放器通过 http协议从http服务器上下载视频文件进行播放
问题:必须等到视频下载完才可以播放,不支持快进到某个时间点进行播放
⚪方案2
播放器通过rtmp协议连接媒体服务器以实时流方式播放视频
问题: 使用rtmp协议需要架设媒体服务器,造价高,对于直播多采用此方案
⚪方案3
播放器使用HLS协议连接http服务器(Nginx、Apache等)实现近实时流方式播放视频
HLS协议:基于Http协议,视频封装格式为ts,视频的编码格式为H264,音频编码格式为MP3、AAC或者AC- 3。
采用HLS方案可以实现边下载边播放,并且不用使用rtmp流媒体协议,不用构建专门的媒体服务器,节省成本。
什么是HLS
HLS (HTTP Live Streaming)是Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。
IOS、Android设备、及各大浏览器都支持HLS协议。
⚪HLS的工作方式
将视频拆分成若干ts格式的小文件,通过m3u8格式的索引文件对这些ts小文件建立索引。一般 10秒一个ts文件,播放器连接m3u8文件播放,当快进时通过m3u8即可找到对应的索引文件,并去下载对应的ts文 件,从而实现快进、快退以近实时 的方式播放视频。
⚪HLS视频编码
将视频编码成HLS格式,最终会输出两类文件,m3u8文件和ts文件
⚪视频播放
1.客户端先下载m3u8文件
2.根据m3u8文件列表下载ts文件
3.客户端播放ts文件
什么是视频编码
所谓视频编码方式就是指通过压缩技术,将原始视频格式的文件转换成另一种视频格式文件的方式。
⚪文件格式
指.mp4、.avi、.rmvb等 这些不同扩展名的视频文件的文件格式。
⚪编码格式
通过音视频的压缩技术,将视频格式转换成另一种视频格式,通过视频编码实现流媒体的传输。 比如:一个.avi的视频文件原来的编码是a,通过编码后编码格式变为b,音频原来为c,通过编码后变为d。
⚪常见音视频编码格式
MPEG系列 (由ISO[国际标准组织机构]下属的MPEG[运动图象专家组]开发 )视频编码方面主要是Mpeg1(vcd用 的就是它)、Mpeg2(DVD使用)、Mpeg4(的DVDRIP使用的都是它的变种,如:divx,xvid等)、Mpeg4 AVC(正热门);音频编码方面主要是MPEG Audio Layer 1/2、MPEG Audio Layer 3(大名鼎鼎的mp3)、 MPEG-2 AAC 、MPEG-4 AAC等等。注意:DVD音频没有采用Mpeg的。
H.26X系列 (由ITU[国际电传视讯联盟]主导,侧重网络传输,注意:只是视频编码) 包括H.261、H.262、 H.263、H.263+、H.263++、H.264(就是MPEG4 AVC-合作的结晶)
目前最常用的编码标准是视频H.264,音频AAC