您的位置:首页 > 其它

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

2016-07-29 23:01 260 查看
一种基于TS包比例占用的固定码率TS流复用算法
多节目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

三,在计算占用比率时,可能会出现小数,如果使用浮点数将会导致丢失精度,精度的丢失对长时间运行来讲会出现大的偏差,因此,所有计算需要采用分数来进行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: