From: gn64_jp Date: Tue, 27 Oct 2009 12:35:56 +0000 (+0000) Subject: make it faster. X-Git-Url: http://git.osdn.net/view?p=rec10%2Frec10-git.git;a=commitdiff_plain;h=e3700b06c36a5d573e415b8438032d06f515aa52 make it faster. git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/rec10@188 4e526526-5e11-4fc0-8910-f8fd03428081 --- diff --git a/jTsSplitter/trunk/src/jtssplitter/Main.java b/jTsSplitter/trunk/src/jtssplitter/Main.java index 618462c..16b450d 100644 --- a/jTsSplitter/trunk/src/jtssplitter/Main.java +++ b/jTsSplitter/trunk/src/jtssplitter/Main.java @@ -14,11 +14,23 @@ public class Main { /** * @param args the command line arguments */ + public static boolean debug_mode=false; public static void main(String[] args) { // TODO code application logic here + String inf,outf; + int ch=0; + if (args.length>1){ + inf=args[0]; + outf=args[1]; + if (args.length>2){ + ch=Integer.parseInt(args[2].trim(),10); + } + } Tsfile t1=new Tsfile(); //t1.readTs("D:\\jTssplitter\\test-sp.ts"); - t1.splitTS("D:\\jTssplitter\\test.ts", "D:\\jTssplitter\\test-sp.ts",0); + inf="D:\\jTssplitter\\test.ts"; + outf="D:\\jTssplitter\\test-sp-profile.ts"; + t1.splitTS(inf,outf,0); } } diff --git a/jTsSplitter/trunk/src/jtssplitter/Mpeg2TSPacket.java b/jTsSplitter/trunk/src/jtssplitter/Mpeg2TSPacket.java index f4936fc..b7efe1e 100644 --- a/jTsSplitter/trunk/src/jtssplitter/Mpeg2TSPacket.java +++ b/jTsSplitter/trunk/src/jtssplitter/Mpeg2TSPacket.java @@ -50,26 +50,16 @@ public class Mpeg2TSPacket { /** * 188バイトのtsから読み出したbyteを与える */ - String tsbyte = new String(); - for (int i = 0; i < 188; i++) { - int it = ts[i] & 0xFF; - String s = Integer.toBinaryString(it); - if ((s.length() < 8) & (s.length() > 0)) { - for (int i2 = s.length(); i2 < 8; i2++) { - s = "0" + s; - } - } - tsbyte = tsbyte + s; - } - header = tsbyte.substring(0, 31); + String tsbyte = byte2String(ts); + //header = tsbyte.substring(0, 31); payload = tsbyte.substring(32); - starter = TSString2Int(tsbyte, 0, 8); - transporterror = TSString2Int(tsbyte, 8, 1); - payloadstart = TSString2Int(tsbyte, 9, 1); - transport_priority = TSString2Int(tsbyte, 10, 1); + //starter = TSString2Int(tsbyte, 0, 8); + //transporterror = TSString2Int(tsbyte, 8, 1); + //payloadstart = TSString2Int(tsbyte, 9, 1); + //transport_priority = TSString2Int(tsbyte, 10, 1); PID = TSString2Int(tsbyte, 11, 13); adaptation_field = TSString2Int(tsbyte, 26, 2); - continuity_counter = TSString2Int(tsbyte, 28, 4); + //continuity_counter = TSString2Int(tsbyte, 28, 4); payload = ""; if (PID != 8191) { if (adaptation_field == 1) { @@ -276,9 +266,9 @@ public class Mpeg2TSPacket { //////////////////// //rets=header+payload_temp.substring(0,64+(32*patnum)); - String st=header.substring(header.length()-8)+payload_temp.substring(0,64+(32*patnum)); - System.out.print("Collect0:" + crcnow + "\n"); - System.out.print("Now0:" + getCRC32(st)+ "\n"); + //String st=header.substring(header.length()-8)+payload_temp.substring(0,64+(32*patnum)); + //System.out.print("Collect0:" + crcnow + "\n"); + //System.out.print("Now0:" + getCRC32(st)+ "\n"); //sb = Stream2Byte(tsheader + (payload_temp.substring(0, 64 + (32 * patnum)))); /* crc.reset(); @@ -309,7 +299,7 @@ public class Mpeg2TSPacket { for (int ir = 0; ir < ill3; ir++) { rets = rets + "1"; } - showPAT(tsheader+rets); + //showPAT(tsheader+rets); return rets; } private String getCRC32(String s){ @@ -357,20 +347,60 @@ public class Mpeg2TSPacket { return s; } - + private String addzero(int num){ + StringBuffer s2=new StringBuffer(); + for (int i2 = 0; i2 < num; i2++) { + s2.append("0");// = "0" + s2; + } + return s2.toString(); + } private String byte2String(byte[] b) { - String ret = ""; + StringBuffer sb=new StringBuffer(8*b.length); + //String ret = ""; for (int i = 0; i < b.length; i++) { - int it = b[i] & 0xFF; - String s = Integer.toBinaryString(it); - if ((s.length() < 8) & (s.length() > 0)) { + StringBuffer sb2=new StringBuffer(8); + //String s = Integer.toBinaryString(b[i] & 0xFF); + sb2.append(Integer.toBinaryString(b[i] & 0xFF)); + //if ((s.length() < 8) & (s.length() > 0)) { + /*String s2=""; for (int i2 = s.length(); i2 < 8; i2++) { - s = "0" + s; + s2 = "0" + s2; } + s=s2+s; + */ + //s=addzero(8-s.length())+s; + //sb2.append(addzero(8-s.length())); + //} + if ((sb2.length() < 8) & (sb2.length() > 0)) { + sb2.insert(0,addzero(8-sb2.length())); } - ret = ret + s; + String s3=sb2.toString(); + // ret = ret + s ; + sb.append(sb2); } - return ret; + //if (!ret.matches(sb.toString())){ + // System.out.println("MisMatch"); + //} + //return ret; + return sb.toString(); + /* + * + *StringBuffer sb= new StringBuffer(); + int cnt= b.length; + for(int i= 0; i< cnt; i++){ + sb.append(Integer.toHexString( (b[i]>> 4) & 0x0F ) ); + sb.append(Integer.toHexString( b[i] & 0x0F ) ); + } + return sb.toString(); + * + * + * + */ + //StringBuffer sb=new StringBuffer(); + //int cnt=b.length; + //for (int i=0;i0){ - + p_table=csch; }else{ - int[] pidst=getPID(origpath); - p_table=pidst[0]; - pids=new int[pidst.length-1]; - for (int i=0;i0){ + if (ii2[0]==p_table){ pat_det[0]=ii2[0]; pat_det[1]=ii2[1]; i=pat.size(); @@ -199,4 +223,77 @@ public class Tsfile { } return reti; } + private int getFirstP_Table(String fpath){ + /** + * PIDを取得し、これと思われる必要なPIDを抜き出す。 + * @return プログラム番号(return[0])とPIDのリスト(return[1-]) + */ + FileInputStream in = null; + int[] reti=null; + int[] pat_det=new int[2]; + pat_det[0]=0; + try { + ArrayList ret=new ArrayList(); + byte[] tb = new byte[188]; + int[] ib = new int[188]; + ArrayList pat = new ArrayList(); + ArrayList pmt = new ArrayList(); + String[] sb = new String[188]; + in = new FileInputStream(fpath); + //int[] PIDCount = new int[8200]; + int imax=1000; + for (int i = 0; i < imax ; i++) { + in.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.getFirstP_Table()]++; + if ((i==imax-1)&&(pmt.size()==0)){ + imax=imax+500; + } + } + + for (int i=0;i0){ + pat_det[0]=ii2[0]; + pat_det[1]=ii2[1]; + i=pat.size(); + } + } + + /*ret.add(0); + ret.add(pat_det[1]); + for (int i=0;i