流媒体部分

Es流:基本码流,包含了视频,音频或数据的连续码流(h264,265,aac)

Pes流:打包基本流 将基本流es按照需要划分成长度不等的数据包,然后再加上包头

PS流:PS流由多个ps gop组成,每个ps gop由一个或多个ps包组成,一个ps包内包含了一个psH(ps head)和多个pes。

Gop: 视频流中两个I帧之间的时间距离。

TS流: ts由一系列长度固定为188字节的ts包组成,ts包分为tsheader4个字节和tspayload两部分,负载部分携带了pes包 部分内容,由多个ts包拼成一个pes包。

PS和ts的差异在于,ts是定长的,而ps包结构是可变长的,这种结构的差异性导致他们对传输误码具有不同的抵抗能力。当传输误码破坏了某一ts包的同步信息时,接收机可以在固定的位置检测它后面包中的同步信息,从而恢复同步,避免丢失。而PS包由于长度不固定,一旦某一ps包的同步信息丢失,接收机无法确定下一包的同步位置,导致信息丢失。

所以在信道环境比较恶劣的情况下采用ts流,环境好采用ps流。

RTP协议:
RTP定义了两种报文格式,RTP和RTCP,RTP用以传输数据部分(音视频流),它由rtp头和rtp包体两部分组成,包体又称为其载荷。rtcp用以传送信息控制信息。其中rtp和rtcp可以用udp来进行数据传输,使用udp的时候,rtp和rtcp使用两个相邻的端口,rtp使用低端口,rtcp使用高端口。当使用其他的协议的时候,rtp和rtcp报文可以合并,放在一个数据单元中一起进行发送。通常控制信息在前,媒体数据在后。
rtp报文格式
包头
|—|---|—|---|—|---|—😐
|v(2bit)|p(1bit)|x(1bit)|CC(4bit)|M(1bit)|载荷类型(7bit)|序号(16bit)|
|时间戳(4bytes)|
|同步源标记符(4bytes)SSRC|

贡献源标记符CSRC(4bytes)

版本号(v) 用来标记rtp版本
填充位P rtp包尾部包含附加的填充位
扩展位x 不为空的rtp包头后面就有一个扩展头部
M标记,不同的载荷有不同的意义,对于视频而言 标记1帧的结束,对于音频标记会话的开始
CSRC计数器
载荷类型:7bit 标记了rtp载荷的类型
序列号sn 每发送一个rtp包序号+1
同步源标记符 SSRC 同步源就是指RTP包流的来源,在同一个RTP会话中不能包含相同的SSRC值
Payload Type
Codec
0
PCM μ -Law
8
PCM-A Law
9
G…722 audio codec
4
G…723 audio codec
15
G…728 audio codec
18
G…729 audio codec
34
G…763 audio codec
31
G…761 audio codec

rtp本身只保证数据的传送,不提供数据的顺序送达和提供可靠的传送机制, 它依靠RTCP来提供这些服务。

rtsp

sdp:会话描述文件,包含了一些音视频的网络协议格式,地址信息

Rtp流:Rtp流由多个rtp包组成,rtp包包含rtp头标准字段,rtp头私有扩展字段,rtp标准负载字段,rtp填充字段。

Rtmp和http类似 都是在一个tcp通道上进行命令和数据传输,rtsp会建立2-3个通道,将信令和数据分开传输。

H264

   对于一张图片,h264编码器首先要对其进行宏块划分,h264默认使用16*16区域作为一个宏块。

   划分宏块之后,计算宏块的像素值。

   H264对比平坦的像素使用16*16的宏块,为了更高的压缩率还可以使用更小的宏块,这样再经过帧内压缩,可以得到更高效的数据。

帧分组:

   对于视频数据主要有两类数据冗余,一类是时间上的数据冗余,另一类是空间上的数据冗余,其中时间上的数据冗余最大。每秒摄像头抓拍30帧,这30帧大部分情况下都是关联密切的,对于这些关联密切的帧,我们只需要保留1帧数据,其他帧都可以通过这一帧,然后通过某种规则推测出来。

   H264编码器会按顺序,每次取出两幅相邻的帧,进行宏块比较,然后计算两帧的相似度,进而发现这一组帧的关联度都是非常高的,因此这几帧可以划分为一组(算法是有差别的像素点不会超过10%,亮度差变化不会超过2%,而色度差的变化只有1%)。在这样一组帧中,我们只保留第一帧的完整数据,其他帧都通过参考第一帧计算出来,我们称第一帧为I帧,其他帧为p/b帧,这样编码后的数据帧组称为GOP

运动估计与补偿

   在h264编码器将帧分组后,就要计算帧内物体的运动矢量。

   H264编码器首先会从缓冲区中取出前两帧,然后进行宏块扫描,当发现一幅图片中的物体时,就在另一幅图的临近位置进行搜索,如果此时在另一幅图中找到该物体,那么久可以计算出该物体的运动矢量。

   运动矢量计算出来之后,将相同部分减去,就得到了补偿数据,我们最终只需要将补偿数据进行保存,之后解码就可以恢复原图。我们把运动矢量与补偿称为帧间压缩技术

帧内预测

   图片被划分好宏块之后,编码器会对每个宏块进行9种模式的预测,然后找出与原图最近似的一种预测模式,然后将原始图像与帧内预测后的图像相减得到残差值,再讲我们之前得到的预测模式信息一起保存起来,这样就能在解码的时候得到原图

对残差数据做DCT

将残差数据做整数离散余弦变换,去掉数据相关性,进一步数据压缩,

CABAC

无损压缩 : 哈夫曼编码,给高频词一个短码,给低频词一个长码从而达到数据压缩的目的。

CABAC 也是给高频词短码,给低频词长码,同时还会根据上下文相关性进行压缩,这种方式比VLC高效很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值