/**
* 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) {
////////////////////
//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();
for (int ir = 0; ir < ill3; ir++) {
rets = rets + "1";
}
- showPAT(tsheader+rets);
+ //showPAT(tsheader+rets);
return rets;
}
private String getCRC32(String s){
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;i<cnt;i++){
+ // sb.append(Integer.toBinaryString(b[i] & 0xFF))
+ //}
}
private String byte2HexString(byte[] b) {
int[] pids=null;
int p_table=0;
if (csch>0){
-
+ p_table=csch;
}else{
- int[] pidst=getPID(origpath);
- p_table=pidst[0];
- pids=new int[pidst.length-1];
- for (int i=0;i<pidst.length-1;i++){
- pids[i]=pidst[i+1];
- }
+ p_table=getFirstP_Table(origpath);
+ }
+ int[] pidst=getTablePID(origpath,p_table);
+ p_table=pidst[0];
+ pids=new int[pidst.length-1];
+ for (int i=0;i<pidst.length-1;i++){
+ pids[i]=pidst[i+1];
}
byte[] tb=new byte[188];
int[] ib=new int[188];
String[] sb=new String[188];
try {
FileInputStream in = new FileInputStream(origpath);
+ FileOutputStream fos=new FileOutputStream(destpath,true);
//int[] PIDCount=new int[8200];
byte[] wbyte=null;
for (int i=0;in.read(tb)!=-1;i++){
}
}
if (wbyte!=null){
- FileOutputStream fos=new FileOutputStream(destpath,true);
fos.write(wbyte);
- fos.close();
}
}
in.close();
-
+ fos.close();
} catch (IOException ex) {
Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
- private int[] getPID(String fpath){
+ private int[] getTablePID(String fpath,int p_table){
/**
* PIDを取得し、これと思われる必要なPIDを抜き出す。
* @return プログラム番号(return[0])とPIDのリスト(return[1-])
m2tp.setPMT(pmt);
m2tp.readTS(tb);
pat = m2tp.getPAT();
- pmt = m2tp.getPMT();
- //PIDCount[m2tp.getPID()]++;
+ for (int i2=0;i2<pat.size();i2++){
+ int[] il2=(int [])pat.get(i2);
+ if (il2[0]==p_table){
+ pat.clear();
+ pat.add(il2);
+ m2tp.setPAT(pat);
+ }
+ }
+ ArrayList pmtt=m2tp.getPMT();
+ for (int i2=0;i2<pmtt.size();i2++){
+ if (!(pmt.contains(pmtt.get(i2)))){
+ pmt.add(pmtt.get(i2));
+ }
+ }
if ((i==imax-1)&&(pmt.size()==0)){
imax=imax+500;
}
+ for (int i2=0;i2<pmt.size();i2++){
+ int[] il2=(int[])pmt.get(i2);
+ int itt=ret.size();
+ if (p_table==il2[2]){
+ if (!(ret.contains(il2[1]))){
+ ret.add(il2[1]);
+ i=imax;
+ }
+ }
+ if (ret.size()==itt){
+ imax=imax+100;
+ }
+ }
}
-
int[] pat_det=new int[2];
for (int i=0;i<pat.size();i++){
int[] ii2=(int[])pat.get(i);
- if (ii2[0]>0){
+ if (ii2[0]==p_table){
pat_det[0]=ii2[0];
pat_det[1]=ii2[1];
i=pat.size();
}
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;i<pat.size();i++){
+ int[] ii2=(int[])pat.get(i);
+ if (ii2[0]>0){
+ 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<pmt.size();i++){
+ int[] il2=(int[])pmt.get(i);
+ if (pat_det[0]==il2[2]){
+ if (!(ret.contains(il2[1]))){
+ ret.add(il2[1]);
+ }
+ }
+ }
+ reti=new int[ret.size()+1];
+ reti[0]=pat_det[0];
+ for (int i=0;i<ret.size();i++){
+ int retit=(Integer)ret.get(i);
+ reti[i+1]=retit;
+ }
+ in.close();
+ */
+ } catch (IOException ex) {
+ Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex);
+ } finally {
+ try {
+ in.close();
+ } catch (IOException ex) {
+ Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+ return pat_det[0];
+ }
}
\ No newline at end of file