流媒体封装格式和流媒体传输协议介绍

来源:互联网 发布:java中的弱引用 编辑:程序博客网 时间:2024/06/06 01:59

1、流媒体封装格式介绍

  一个流媒体文件由音频流和视频流两种数据组成。
  
  h264/mpeg4等就是视频流编码格式,视频流一般以帧的单位存在,i帧、p帧、b帧,帧率(frame rate)是每秒显示帧数(frames per second,简称:fps),如果帧率是25,那么帧与帧的时间撮间隔应该是40ms。
  
  adpcm/g711a/g723 等就是音频流编码格式(pcm是原始音频数据),音频数据就没有帧的概念了,就是一包一包的音频数据。下面计算一下 pcm 音频流的码率,采样率值×采样大小值×声道数 bps。一个采样率为 44.1khz,采样大小为 16bit,双声道的pcm编码的wav文件,它的数据速率则为 44.1k×16×2 = 1411.2 kbps。我们常说 128k 的mp3,对应的 wav 的参数,就是这个 1411.2 kbps,这个参数也被称为数据带宽,它和 adsl 中的带宽是一个概念。将码率除以 8,就可以得到这个 wav 的数据速率,即 176.4kb/s。这表示存储一秒钟采样率为 44.1khz,采样大小为 16bit,双声道的 pcm 编码的音频信号,需要 176.4kb 的空间,1分钟则约为 10.34m,这对大部分用户是不可接受的,尤其是喜欢在电脑上听音乐的朋友,要降低磁盘占用,只有2种方法,降低采样指标或者压缩。降低指标是不可取的,因此就有了各种压缩方案。
  
  流媒体文件就是把音频流和视频流数据打包封装成一定的文件格式。mp4/ts/ps/avi/flv 等是一些常用的封装格式。封装格式(也叫容器):所谓封装格式就是将已经编码压缩好的视频流和音频流按照一定的格式放到一个文件中,就是说仅仅是一个外壳,或者把它当成一个放视频流和音频流的文件夹也可以。说通俗点,视频流媒体相当于饭,而音频流媒体相当于菜,封装格式是选择什么样的容器(碗或锅),用来盛放某种视频流和音频流的组合。

2、流媒体传输协议介绍

  网络间的数据传输无外乎两种方式 tcp 和 udp,应用场景不同,所选择的传输方式不一样。 而流媒体传输的协议一般有 rtp/rtsp/rtcp(可基于 tcp 或者 udp)、http(一般是 tcp 方式)。流媒体传输会存在两种需求:顺序流式传输(progressive streaming)和实时流式传输(real time streaming)。
  
  顺序流式传输(progressive streaming)的特点:期望音视频数据无错误无丢失顺序的从一端传输到另一端,例如警方对视频监控录像回放取证、网络电影播放等都需要数据正常到达然后解码播放,对于这种情况一般采用可靠的 tcp 方式传输。
  
  实时流式传输(real time streaming)的特点:期望音视频数据实时的的从一段传输到另一端,例如数字电视行业的电视直播,由于 tcp 的包确认机制的开销大,基于窗口的拥塞控制技术不太适应稳定的流媒体传输,tcp 重传机制对实时流没有必要,对于这种情况一般采用 udp 方式传输。解决方案为:http(基于 tcp)做控制信息的传输,rtp(基于udp)做实时数据流的传输;http live streaming (hls) 码流自适应也可作为实时流传输的解决方案。


转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%8E%92%E8%A1%8C/4555.shtml

0 0