X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=jTsSplitter%2Ftrunk%2Fsrc%2Fjtssplitter%2FTsfile.java;h=3d64dd76f750bf5e4bf3d598cff608121396889c;hb=57efc5e2ad13338bddfa94217e0dc3ffeae5757c;hp=b4e463c1db6e3fd73572b7170a931def21a625f5;hpb=0d63aeb9de22dafdd78d3d8443523fc0189bf3e2;p=rec10%2Frec10-git.git diff --git a/jTsSplitter/trunk/src/jtssplitter/Tsfile.java b/jTsSplitter/trunk/src/jtssplitter/Tsfile.java index b4e463c..3d64dd7 100644 --- a/jTsSplitter/trunk/src/jtssplitter/Tsfile.java +++ b/jTsSplitter/trunk/src/jtssplitter/Tsfile.java @@ -1,6 +1,6 @@ /* - * To change this template, choose Tools | Templates - * and open the template in the editor. + * jTsSplitter - java based mpeg2ts splitter. + * Copyright (C) 2009-2010 Yukikaze */ package jtssplitter; @@ -17,62 +17,20 @@ import jtssplitter.data.PMTData; * @author Administrator */ public class Tsfile { - public void readTs(String fpath){ - byte[] tb=new byte[188]; - int[] ib=new int[188]; - ArrayList pat=new ArrayList(); - ArrayList pmt=new ArrayList(); - String[] sb=new String[188]; - try { - FileInputStream in = new FileInputStream(fpath); - BufferedInputStream bis=new BufferedInputStream(in); - int[] PIDCount=new int[8200]; - for (int i=0;i<3000;i++){ - bis.read(tb); - String last8; - Mpeg2TSPacket m2tp; - m2tp=new Mpeg2TSPacket(); - m2tp.setPAT(pat); - m2tp.setPMT(pmt); - m2tp.readTS(tb); - pat=m2tp.getPAT(); - pmt=m2tp.getPMT(); - PIDCount[m2tp.getPID()]++; - } - for (int i=0;i<8200;i++){ - if (PIDCount[i]>0){ - } - } - for (int i=0;i<188;i++){ - int it=tb[i]& 0xFF; - ib[i]=it; - String s=Integer.toBinaryString(it); - if (s.length()<8){ - for (int i2=s.length();i2<8;i2++){ - s="0"+s; - } - sb[i]=s; - } - } - bis.close(); - in.close(); - } catch (IOException ex) { - Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex); - } - - } - public void splitTS(String origpath,String destpath,int csch){ + public void splitTS_byte(String origpath,String destpath,int csch){ int[] pids=null; int p_table=0; if (csch>0){ p_table=csch; }else{ - p_table=getFirstP_Table(origpath); + p_table=getFirstP_Table_byte(origpath); } - PIDs pidss=getTablePID(origpath,p_table); + PIDs pidss=getTablePID_byte(origpath,p_table); p_table=pidss.Program_Table; pids=pidss.PIDs; int pmt_pid=pidss.PMT_PID; + System.out.println("番組の同定終了"); + System.out.println("Program Table : "+Integer.toString(p_table)); byte[] tb=new byte[188]; try { FileInputStream in = new FileInputStream(origpath); @@ -93,36 +51,83 @@ public class Tsfile { wbyte=null; Mpeg2TSPacket m2tp; m2tp=new Mpeg2TSPacket(); - int ii=m2tpp.getPIDFirst(tstt); + //int ii=m2tpp.getPIDFirst(tstt); + int ii=m2tpp.getPIDFirst_byte(tstt); + //if (ii!=i2){ + // System.out.println("not match"); + //} boolean alreadyreaded=false; for (int k=0;k187)){ - //Mpeg2TSPacket m2tp2=new Mpeg2TSPacket(); - wbyte=m2tpp.splitPAT(tb,p_table); - }else if ((ii==pmt_pid)&&(readti>187)){ - wbyte=tb; - ArrayList pmtss=m2tpp.readPMT(tb, pmt_pid); - int[] new_pids=new int[pmtss.size()+3]; - new_pids[pmtss.size()]=0; - new_pids[pmtss.size()+1]=pmt_pid; - new_pids[pmtss.size()+2]=pmtss.get(0).PCR_PID; - for (int i=0;i187)){ + Mpeg2TSPacket m2tp2=new Mpeg2TSPacket(); + m2tp2.readTS_byte(tb); + ArrayList pats=new ArrayList(); + pats=m2tp2.getPAT(); + boolean containp_table=false; + for (int iii=0;iii0){ + System.out.println("Program Tableの変更を検知"+Integer.toString(p_table)+" to "+Integer.toString(pats.get(iii).Program_TABLE)); + p_table=pats.get(iii).Program_TABLE; + for (int it=0;it187){ - wbyte=tb; + wbyte=m2tpp.splitPAT_byte(tb,p_table); + //wbyte=m2tpp.splitPAT(tb, p_table); + /*byte[] wbytet=m2tpp.splitPAT(tb, p_table); + for (int kk=0;kk187)){ + wbyte=tb; + ArrayList pmtss=m2tpp.readPMTglobal_byte(tb, pmt_pid); + if (pmtss.size()>0){ + int[] new_pids=new int[pmtss.size()+3]; + new_pids[pmtss.size()]=0; + new_pids[pmtss.size()+1]=pmt_pid; + new_pids[pmtss.size()+2]=pmtss.get(0).PCR_PID; + for (int i=0;i187)){ + ArrayList eitss=m2tpp.readEIT(tb); + */ + }else if (readti>187){ + wbyte=tb; + + }else { + readend=true; + } + k=pids.length; } - k=pids.length; } ik++; } @@ -143,23 +148,7 @@ public class Tsfile { Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex); } } - private void writeTS(byte[] tspacket,String path){ - FileOutputStream fos = null; - try { - fos = new FileOutputStream(path,true); - fos.write(tspacket); - fos.close(); - } catch (IOException ex) { - Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex); - } finally { - try { - fos.close(); - } catch (IOException ex) { - Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex); - } - } - } - private PIDs getTablePID(String fpath,int p_table){ + private PIDs getTablePID_byte(String fpath,int p_table){ /** * PIDを取得し、これと思われる必要なPIDを抜き出す。 * @return プログラム番号(return[0])とPIDのリスト(return[1-]) @@ -178,13 +167,16 @@ public class Tsfile { //int[] PIDCount = new int[8200]; int imax=1000; for (int i = 0; i < imax ; i++) { - in.read(tb); + if (in.read(tb)==-1){ + break; + } String last8; Mpeg2TSPacket m2tp; m2tp = new Mpeg2TSPacket(); m2tp.setPAT(pat); m2tp.setPMT(pmt); - m2tp.readTS(tb); + //m2tp.readTS(tb); + m2tp.readTS_byte(tb); pat = m2tp.getPAT(); for (int i2=0;i20){ patdd=pat.get(i);