一、相关概念
(1)流媒体:流媒体是指Internet上使用流式传输技术的连续时基媒体。当前在Internet上传输音频和视频等信息主要有两种方式:下载和流式传输两种方式。
下载情况下,用户需要先下载整个媒体文件到本地,然后才能播放媒体文件。在视频直播等应用场合,由于生成整个媒体文件要等直播结束,也就是用户至少要在直播结束后才能看到直播节目,所以用下载方式不能实现直播。
流式传输是实现流媒体的关键技术。使用流式传输可以边下载边观看流媒体节目。由于Internet是基于分组传输的,所以接收端收到的数据包往往有延迟和乱序(流式传输构建在UDP上)。要实现流式传输,就是要从降低延迟和恢复数据包时序入手。在发送端,为降低延迟,往往对传输数据进行预处理(降低质量和高效压缩)。在接收端为了恢复时序,采用了接收缓冲;而为了实现媒体的流畅播放,则采用了播放缓冲。
(2)延迟:延迟是分组从点A行进到点B所花费的时间,延迟源一般包括:编码,打包,网络传输,jitter buffer。
(3)抖动:分组延迟的变化程度,网络延时随时都在不停的变化称为抖动。
(4)丢包:丢失是从点A发送的分组的数量,其从未使其到达点B,丢包即:发送了多少包,最后并没有收到同样多数量的包,网络丢包率是指测试中所丢失数据包数量占所发送数据包的比率。
二、RTP协议介绍
RTP协议简介:
RTP:实时传输协议,对应RFC文档为:RFC3550,在RFC3550中,RTP被定义为在一对一或者一对多的传输情况下工作,其目的是为了提供时间信息和实现流同步。RTP的典型应用是建立在UDP上的,也可以建立在TCP等其它协议之上进行工作,一般将其看作传输层的一部分,位于UDP层之上,应用层之下。RTP本身只保证实时数据的传输,并不为按序传送数据包提供可靠的传输机制,不能保证服务质量(服务质量有RTCP提供)。
RTP数据包格式:
每一个RTP数据报主要有头部和负载构成,其中头部前12个字节含义是固定的,负载可以是音频或者视频数据。RTP数据报头部格式如下:
0 1 2 3
0 1 2 3 4 5 6 78 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| synchronization source (SSRC)identifier |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+