织梦CMS - 轻松建站从此开始!

罗索

一种基于TS包比例占用的固定码率TS流复用算法

落鹤生 发布于 2012-07-26 09:48 点击:次 
每复用一个TS包,我们把该复用单元实际所占的比率加上它的复用比率。当实际占的比率大于100%时,表明应该复用该数据单元了,此时如果实际复用了该数据单元的一个TS包,应该减去100%。
TAG:

多节目TS流复用的主要技术难点在于参与复用的各数据单元——包括PSI/SI表格,PCR,音视频及空包——的交织算法。

在这些参与复用的数据单元中,PSI/SI和PCR需要按照固定的间隔进行插入,可以认为是固定码率,音频一般来讲也接近固定码率,而视频码率则变化不定,这主要是由于编码时IBP帧的编码方法不同产生的,但对于一个特定的视频帧而言,我们可以认为在这一帧时间内,视频的码率是固定的,我们可以称之为瞬时码率。

对于多节目的TS流复用,输出码率一般来讲为固定码率,这种情况下,我们可以通过计算每个数据单元的瞬时码率占复用后的TS流的总码率的的比率(mux-ratio,我们称其为每个数据单元的复用比率)进行复用。又因为TS流复用时的基本单位是TS包,所以可以认为复用比率就是每个数据单元在一个TS包中的比率,每复用一个TS包,就把该数据单元所占用的实际总比率加上复用比率,当总比率大于100%时,我们就认为该数据单元应该参与复用了。

对于按照固定间隔插入的数据单元,复用比率的计算方法为:

mux-ratio=((1/interval)*每次插入的TS包数*TS_LEN*8)/MPTS_Bitrate

对于有瞬时码率的数据单元,直接通过码率之比进行计算:

mux-ratio=瞬时码率/ MPTS_Bitrate

下面我们通过一组数据来说明上述算法。

MPTS(Bitrate=10000000bps)

 

PAT(1%)

PMT(1%)

PCR(5%)

Audio(20%)

Video(45%)

NULL

TS No

 

 

 

 

 

 

0

99

99

95

80

55

 

1

99+1=100
100-100=0

99+1=100

95+5=100

80+20=100

55+45=100

 

2

1+0=1

100+1=101
101-100=1

100+5=105

100+20=120

100+45=145

 

3

1+1=2

1+1=2

105-100=5
5+5=10

120+20=140

145+45=190

 

4

2+1=3

2+1=3

10+5=15

140+20=160
160-100=60

190+45=235

 

5

3+1=4

3+1=4

15+5=20

60+20=80

235+45=280
280-100=180

 

6

4+1=5

4+1=5

20+5=25

80+20=100
100-100=0

180+45=225

 

7

5+1=6

5+1=6

25+5=30

0+20=20

225+45=270
270-100=170

 

8

6+1=7

6+1=7

30+5=35

20+20=40

170+45=215
215-100=115

 

9

8+1=9

8+1=9

35+5=40

40+20=60

115+45=160
160-100=60

 

10

9+1=10

9+1=10

40+5=45

60+20=80

60+45=105
105-100=5

 

11

10+1=11

10+1=11

45+5=50

80+20=100
100-100=0

5+45=50

 

12

11+1=12

11+1=12

50+5=55

0+20=20

50+45=95

NULL

13

12+1=13

12+1=13

55+5=60

20+20=40

95+45=140
140-100=40

 

表1

在上表中,MPTS的输出码率为10000000bps。MPTS中,假设PAT表的复用比率为1%,PMT表的复用比率为1%,PCR的复用比率为5%,音频的复用比率为20%,视频的复用比率为45%。TS No列为每次复用TS包的序号。在复用之初,我们使用100%减去每个复用单元的比率作为初始比率(这样每个复用单元处于复用的临界状态)。

通过码率之比计算出来的每个复用单元的占用比率,即为TS中的每个复用单元应该占用的比率,从微观层面看,如果每个TS包可以分割的话,其中应该包括1%的PAT数据,1%的PMT数据,5%的PCR数据,20%的音频数据,45%的视频数据,剩下28%为空包数据;因此,每复用一个TS包,我们把该复用单元实际所占的比率加上它的复用比率。当实际占的比率大于100%时,表明应该复用该数据单元了,此时如果实际复用了该数据单元的一个TS包,应该减去100%。上表中,红色的部分表示本次参与复用的数据单元。如果所有的数据单元都没有达到100%,则插入空包。

在实际的复用过程中,可能会遇到以下几个问题。

一,如果有多个数据单元的实际所占比率同时达到了100%, 应该选择哪个参与复用呢?在上表中,我们只是简单的按照从左到右的顺序,但在实际复用时,需要做特别的处理。一般来讲,对于同时可以复用的相同类型的数据 单元(比如都是视频),这时可以选择实际占用百分比最大的哪个参与复用;对于不同类型的数据单元,需要设置复用的优先级,一般讲复用的优先级是:PSISI>PCR>音频>视频。

二,如前所述,因为我们使用的是瞬时码率,尤其对于视频来讲,通常每帧数据码率都是变化的。当码率出现变化时,需要注意两点,一是更新复用比率,二是如果当前实际的占用比率不为0,需要根据新的码率进行实际占用的比率,以上表中的视频为例,如果在第11包时,因为码率的变化,复用比率变更为60%,此时实际占用比率为50%,新的实际占用的比率的公式为:

X/(当前实际占用的比率)=新的应该占用比率/新的应该占用比率

X/50=60/45

X=50*60/45

三,在计算占用比率时,可能会出现小数,如果使用浮点数将会导致丢失精度,精度的丢失对长时间运行来讲会出现大的偏差,因此,所有计算需要采用分数来进行。

(wutong_login)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201207/16181.html]
本文出处:CSDN博客 作者:wutong_login 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容