如何計算 一個音視頻文件 (.ts)文件 (包含pcr信息). 播放所使用的帶寬

 

 

以下是計算一個音視頻文件,播放所需要帶寬的程序:

public int getBitrate(String path) {
        
        File f 
= new File(path);
        
if (f.exists()) {
            
int mpegPackets = 0;
            
int getpcr = 0;
            
long pcr0 = 0;
            
long pcr1;
            
int pid = 0;
            
try {
                FileInputStream in 
= new FileInputStream(f);
                
while (true{
                    
byte[] b = new byte[188];

                    
int ret = in.read(b, 0188);
                    
if (ret == -1)
                        
break;
                    mpegPackets
++;
                    
if (b[0!= 0x47{
                        
return -1;
                    }

                    System.out.println(
"");
                    System.out.println(mpegPackets 
+ " : ");
                    
for(int k=0; k<ret; k++){
                        System.out.print(Integer.toHexString(b[k]
&0xFF+ "  ");
                        
if(k%10 ==0){
                            System.out.println(
"");
                        }

                    }

                    
if ((((b[3>> 4& 0x3& 0x02!= 0{//ptati判斷adaptation_field_control =='10' || ='11') 
                        
//確定後面爲adaptation_field
                        if (b[4== 0)  //adaptation_field_length = 0 則退出循環
                            continue;
                        
if ((b[5& 0x10!= 0//對應 PCG_flag = 0 則表示此packet 不包含pcr 信息
                            if (getpcr == 10//當找到第11個包含pcr 信息的packet
                                pid = ((b[1& 0xff & 0x1f<< 8)
                                        
| (b[2& 0xff);
                                
int tmp;
                                pcr0 
= ((((b[6& 0xff<< 24)
                                        
+ ((b[7& 0xff<< 16)
                                        
+ ((b[8& 0xff<< 8+ (b[9& 0xff)));
                                pcr0 
<<= 1;
                                
if ((b[10& 0xff & 0x80!= 0)
                                    pcr0 
|= 1;
                                
//pcr0 爲 program_clock_reference_base (33bit)
                                pcr0 *= 300
                                
//OPCR(i) = OPCR_base(i)*300 + OPCR_ext(i)
                                tmp = ((b[10& 0xff & 1<< 8+ b[11];
                                
//tmp 爲 program_clock_reference_extension (9bit)
                                pcr0 += tmp;
                                mpegPackets 
= 0;
                            }

                            
if ((getpcr > 20)  
                                    
&& pid == (((b[1& 0xff & 0x1f<< 8| (b[2& 0xff))) {
                                
//從第21個包含pcr信息的packet的包並且pid與"第11個包含pcr 信息的packet的pid"相同
                                int tmp;
                                pcr1 
= ((((b[6& 0xff<< 24)
                                        
+ ((b[7& 0xff<< 16)
                                        
+ ((b[8& 0xff<< 8+ (b[9& 0xff)));
                                pcr1 
<<= 1;
                                
if ((b[10& 0xff & 0x80!= 0)
                                    pcr1 
|= 1;
                                pcr1 
*= 300;
                                tmp 
= ((b[10& 0xff & 1<< 8+ b[11& 0xff;
                                pcr1 
+= tmp;
                                
long PCRdelta = pcr1 - pcr0;
                                
double bitRate = ((40608 * mpegPackets * 1.0/ PCRdelta) * 1000000;
                                
//40608 = 188 * 216
                                return (int) bitRate;
                            }

                            getpcr
++;
                        }

                    }

                }

            }
 catch (FileNotFoundException e) {
                e.printStackTrace();
            }
 catch (IOException e) {
                e.printStackTrace();
            }


        }
 else
            
return 0;
        
return 0;
    }

以上是根據pcr來計算播放所需要帶寬 

                                                                                                                      [email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章