现在的位置: 首页 > 综合 > 正文

流媒体基础

2012年12月08日 ⁄ 综合 ⁄ 共 2405字 ⁄ 字号 评论关闭

流媒体直播系统构成

流媒体(StreamingMedia)直播(Live)系统通常由摄像机、编码器(Encoder)、影像服务器、影像显示终端构成。摄像机负责采集图像,编码器把采集的图像数据进行数据变换和压缩,影像服务器负责图像数据的存储,影像显示终端根据图像数据生成图像。

流媒体直播系统的处理流程可分为两种,通过服务器的中继方式和由编码器直接播放方式。

服务器中继方式指编码器先将变换和压缩后的图像数据发送到服务器,服务器把接受到的数据进行保存,然后再由服务器发送到显示终端。目前,网上直播常采用这种方式。不过,图像经存储后再转发会有数十秒的延迟。

编码器直接播放方式指编码器将变换和压缩后的图像数据直接发送到服务器和显示终端,服务器把接受到的数据进行保存以便将来利用。由于数据同时发送给服务器和显示终端,不会因数据存储和转发延迟图像的显示。

3、流媒体直播系统的数据传输方式

如果采用中继方式,当图像数据从服务器到显示终端传输时,可采用单播和组播者两种方式。同样,如果采用直接方式,当图像数据从编码器到显示终端传输时,也可采用单播和组播者两种方式。

单播(Unicast)指发送端对每个接收端分别进行数据传输,或称1对1数据传输方式。随着

接收端的增加,服务器(中继方式)或编码器(直接方式)的负荷,以及网络设备路由器的负荷将增加,对服务器(中继方式)或编码器(直接方式)的性能,以及网络带宽都有很高要求。单播更适用于视频点播(VOD)。

组播(Multicast)指发送端对特定的一组接收端同时发送数据,或称1对n数据传输方式。由于发送端只发出一个数据包,即使接收端的数量增加,网络的传输量(Traffic)不会增加。

组播对服务器(中继方式)或编码器(直接方式)的性能,以及网络带宽的要求都不高。组播可以更加流畅地实时地传输大画面、高清晰的图像。不过,组播采用UDP而非TCP,数据包的损失不可避免。可采用FEC(Forward Error Correction)、DCCP(Datagram Congestion Control Protocol)技术,以减少数据损失所带来的影响。

4、组播在IPv4互联网所遇到的问题

在IPv4互联网(Internet)内,组播地址是D类地址。只有已经取得AS号(RFC2770)的组织才能利用组播,而且IPv4的组播地址空间窄,所以IPv4互联网不适合进行组播的商业利用。

不过,在IPv4内部网(Intranet)仍可使用组播。假设某个企业有若干部门,每个部门有自己的局域网(LAN), 部门和部门之间通过互联网相连,为了在整个内部网实现跨区域的组播,在穿越互联网时,可进行协议转换。在各个局域网内设置一个协议转换服务器。在穿越互联网之前进行组播—单播转换,在穿越互联网之后再进行单播—组播转换,这样就可进行内部网的组播。

5、IPv6使组播触手可及

IPv6的组播地址空间非常大,组播地址可由全局(Global)IP地址的前缀(Prefix)生成(RFC3306),所以很容易获得全局的组播地址。有了全局的组播地址,就可在IPv6互联网内通过组播这一形式开展视频服务。

实时流协议(RTSP)是应用级协议,控制实时数据的发送。RTSP提供了一个可扩展框架,使实时数据,如音频与视频的受控、点播成为可能。数据源包括现场数据与存储在剪辑中数据。该协议目的在于控制多个数据发送连接,为选择发送通道,如UDP、组播UDP与TCP,提供途径,并为选择基于RTP上发送机制提供方法。

 

 大致的来说,播放一个视频分为4个步骤:
1.  acess 访问,或者理解为接收、获取、得到
2. demux 解复用,就是把通常合在一起的音频和视频分离(还有可能的字幕)
3. decode 解码,包括音频和视频的解码
4. output 输出,也分为音频和视频的输出(aout和vout)
拿播放一个UDP组播的MPEG TS流来说吧,access部分负责从网络接收组播流,放到VLC的内存缓冲区中,access模块关注IP协议,如是否IPv6、组播地址、组播协议、端口等信息;
如果检测出来是RTP协议(RTP协议在UDP头部简单得加上了固定12个字节的信息),还要分析RTP头部信息。这部分可以参看VLC源码 /modules/access/udp.c 。

而demux部分首先要解析TS流的信息。TS格式是MPEG2协议的一部分,概括地说,TS通常是固定188字节的一个packet,一个TS流可以包含多个program(节目),
一个program又可以包含多个视频、音频、和文字信息的ES流;每个ES流会有不同的PID标示。而又为了可以分析这些ES流,TS有一些固定的PID用来间隔发送program和es
流信息的表格:PAT和PMT表。关于TS格式的详细信息可以去google一下。

VLC专门做了一个独立的库libdvbpsi来解析和编码TS流,而调用它的代码可以参见VLC源码 /modules/demux/ts.c。
其实之所以需要demux,是因为音视频在制作的时候实际上都是独立编码的,得到的是分开的数据,为了传输方便必须要用某种方式合起来,这就有了各种封装格式也就有了demux。

demux分解出来的音频和视频流分别送往音频解码器和视频解码器。因为原始的音视频都是占用大量空间,
而且冗余度较高的数据,通常在制作的时候就会进行某种压缩。这就是我们熟知的音视频编码格式,包括
MPEG1(VCD)、MPEG2(DVD)、MPEG4、H.264、rmvb等等。音视频解码器的作用就是把这些压缩了的数据还原成
原始的音视频数据。VLC解码MPEG2使用了一个独立的库libmpeg2,调用它的源文件是 /modules/codec/libmpeg2.c。
VLC关于编解码的模块都放在/modules/codec目录下,其中包括著名的庞大的ffmpeg。

 

抱歉!评论已关闭.