一种基于TS包比例占用的固定码率TS流复用算法
来源:互联网 发布:王者荣耀辅助软件 编辑:程序博客网 时间:2024/05/21 06:48
一种基于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
三,在计算占用比率时,可能会出现小数,如果使用浮点数将会导致丢失精度,精度的丢失对长时间运行来讲会出现大的偏差,因此,所有计算需要采用分数来进行。
- 一种基于TS包比例占用的固定码率TS流复用算法
- 一种基于TS包比例占用的固定码率TS流复用算法
- 基于IP播放TS流的码率控制策略
- 基于IP播放TS流的码率控制策略
- 基于IP播放TS流的码率控制策略
- 基于IP播放TS流的码率控制策略
- 基于IP播放TS流的码率控制策略
- TS包的包头描述
- TS
- ts
- TS
- TS
- ts
- ts
- ts
- ts
- .ts是视频的一种封装格式
- 基于TR101-290标准的TS码流三级检测
- 黑马程序员-AOP技术
- 测试连接失败,因为初始化提供程序试发生错误。发生了一个ORACLE错误,但无法从ORACLE中检索错误信息
- tikzpicture 缩放 图片 文字
- 磁盘冗余阵列 RAID
- android应用开发之intent的妙用二
- 一种基于TS包比例占用的固定码率TS流复用算法
- Android中webview的使用
- 我自己跑通的网上的lucene实例
- Job Hunting之路
- 改造Visual C++ 2008 Express
- asp.net中对xml的读写(二)
- 关于存储、读入Object,贴两个方法
- 关于TCP/IP数据包的截取和分析
- android.content.res.Resources$NotFoundException