package jtssplitter;
+
import java.util.ArrayList;
import java.util.zip.CRC32;
/*
* @author Administrator
*/
public class Mpeg2TSPacket {
+
public String header;
public String payload;
public String adaptation;
//private ArrayList<TsDate> date=new ArrayList<TsDate>();
//date.add(new TsDate("Starter"))
public int type;//
-
private int starter;//0-7
private int transporterror;//本TSパケットの誤りを示す 1bit 8
private int payloadstart;//セクションの先頭バイトが入っているかどうか1bit 9
private int transport_priority;//1bit 10
- private int PID;//tsパケットの種類 13bit 11-23
+ private int PID = -1;//tsパケットの種類 13bit 11-23
private int transport_scrambled;//2bit 00is " not scrambled" 24-25
private int adaptation_field;//2bit 26-27 01:adaptation fieldなしでおk 10は絶対いる 11はペイロードはアダプテーションに続く00は予約
private int continuity_counter;//連続性(PIDごとの通し番号) 4bit 28-31
private int random_access;//1bit ランダムアクセスの開始場所となる
private int ES_priority;//1bit プライオリティ
private int five_flag;//5bit
- private ArrayList pat_list_now=new ArrayList();//[0]:番組番号 [1]:PMT PID
- private ArrayList pat_list_all=new ArrayList();
- private ArrayList pmt_list=new ArrayList();//[0]番組番号 [1]テーブルID
+ private ArrayList pat_list_now = new ArrayList();//[0]:番組番号 [1]:PMT PID
+ private ArrayList pat_list_all = new ArrayList();
+ private ArrayList pmt_list = new ArrayList();//[0]番組番号 [1]テーブルID
private int pointer_field;//8bit adaptation fieldの次?
-
private String payload_s;
//ここからオプションフィールド
//PCR42 OPCR42
//ここまでオプションフィールド
private int staffing_byte;//
- public Mpeg2TSPacket(){
+
+ public Mpeg2TSPacket() {
}
- public void readTS(byte[] ts){
+
+ public void readTS(byte[] ts) {
/**
* 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;
- }
+ 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;
+ tsbyte = tsbyte + s;
}
- 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);
- PID=TSString2Int(tsbyte,11,13);
- adaptation_field=TSString2Int(tsbyte, 26, 2);
- continuity_counter=TSString2Int(tsbyte, 28, 4);
- payload="";
- if (PID!=8191){
- if (adaptation_field==1){
- pointer_field=TSString2Int(tsbyte, 32, 8);
- payload=tsbyte.substring(40);
- }else if (adaptation_field==3){
- adaptation_length=TSString2Int(tsbyte,32,8);
- if (adaptation_length<188){
- adaptation_length=adaptation_length*8;
+ 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);
+ PID = TSString2Int(tsbyte, 11, 13);
+ adaptation_field = TSString2Int(tsbyte, 26, 2);
+ continuity_counter = TSString2Int(tsbyte, 28, 4);
+ payload = "";
+ if (PID != 8191) {
+ if (adaptation_field == 1) {
+ pointer_field = TSString2Int(tsbyte, 32, 8);
+ payload = tsbyte.substring(40);
+ } else if (adaptation_field == 3) {
+ adaptation_length = TSString2Int(tsbyte, 32, 8);
+ if (adaptation_length < 184) {
+ adaptation_length = adaptation_length * 8;
}
- adaptation=tsbyte.substring(32,40+adaptation_length);
- pointer_field=TSString2Int(tsbyte, 40+adaptation_length, 8);
- payload=tsbyte.substring(48+adaptation_length);
+ //System.out.println(adaptation_length);
+ adaptation = tsbyte.substring(32, 40 + adaptation_length);
+ pointer_field = TSString2Int(tsbyte, 40 + adaptation_length, 8);
+ payload = tsbyte.substring(48 + adaptation_length);
}
}
- if (PID==0){
+ if (PID == 0) {
//System.out.print("Pointer field ? : "+pointer_field+"\n");
- pat_list_now=readPAT(payload);
+ pat_list_now = readPAT(payload);
pat_list_all.addAll(pat_list_now);
//System.out.print("ここから変更済み\n");
//readPAT(changePAT(payload));
}
- for (int i=0;i<pat_list_now.size();i++){
- int[] pid_temp=(int[])pat_list_now.get(i);
- if ((PID==pid_temp[1])&&(PID!=0)){
+ for (int i = 0; i < pat_list_now.size(); i++) {
+ int[] pid_temp = (int[]) pat_list_now.get(i);
+ if ((PID == pid_temp[1]) && (PID != 0)) {
//System.out.println("PMT PID : 0x"+Integer.toHexString(PID));
-
- pmt_list.addAll(readPMT(payload,pid_temp[0]));
+ pmt_list.addAll(readPMT(payload, pid_temp[0]));
}
}
- tsbyte="";
+ tsbyte = "";
}
- private ArrayList readPAT(String payload_temp){
+
+ private ArrayList readPAT(String payload_temp) {
/*
* payloadの文字列を入力して[intテーブル,int PID]のArrayListを返す。
*/
int tableid;
int sectionlength;
- ArrayList program_number=new ArrayList();
- tableid=TSString2Int(payload_temp,0,8);
- sectionlength=TSString2Int(payload_temp,12,12);//-40-32;
+ ArrayList program_number = new ArrayList();
+ tableid = TSString2Int(payload_temp, 0, 8);
+ sectionlength = TSString2Int(payload_temp, 12, 12);//-40-32;
//int patnum=sectionlength*8-32;
- int patnum=sectionlength*8-72;
- patnum=patnum/32;
- byte[] test=Stream2Byte(payload_temp);
- String stest="";
- for (int ij=0;ij<test.length;ij++){
- int it=test[ij]& 0xFF;
- String s=Integer.toBinaryString(it);
- if (s.length()<8){
- for (int i2=s.length();i2<8;i2++){
- s="0"+s;
+ int patnum = sectionlength * 8 - 72;
+ patnum = patnum / 32;
+ byte[] test = Stream2Byte(payload_temp);
+ String stest = "";
+ for (int ij = 0; ij < test.length; ij++) {
+ int it = test[ij] & 0xFF;
+ String s = Integer.toBinaryString(it);
+ if (s.length() < 8) {
+ for (int i2 = s.length(); i2 < 8; i2++) {
+ s = "0" + s;
}
}
- stest=stest+s;
+ stest = stest + s;
}
- payload_temp=stest;
- int nowbit=64;
- //System.out.print(Integer.toString(patnum)+"\n");
- for (int i=0;i<patnum;i++){
+ payload_temp = stest;
+ int nowbit = 64;
+ //System.out.print(Integer.toString(patnum)+"\n");
+ for (int i = 0; i < patnum; i++) {
//System.out.print(payload_temp.substring(64+32*i,95+32*i+1)+"\n");
- int[] pat=new int[2];
- pat[0]=TSString2Int(payload_temp,64+32*i,16);
- pat[1]=TSString2Int(payload_temp,32*i+64+19, 13);
+ int[] pat = new int[2];
+ pat[0] = TSString2Int(payload_temp, 64 + 32 * i, 16);
+ pat[1] = TSString2Int(payload_temp, 32 * i + 64 + 19, 13);
//System.out.print("TABLE : "+Integer.toString(pat[0])+"\n");
//System.out.print("PMT PID : "+Integer.toString(pat[1])+"\n");
program_number.add(pat);
//System.out.print(Integer.toBinaryString(TSString2Int(payload_temp,65,32))+"\n");
return program_number;
}
- private ArrayList readPMT(String payload_temp,int PAT_TABLE){
- ArrayList pmt_t=new ArrayList();
- int tableid=TSString2Int(payload_temp,0,8);
- int section_length=TSString2Int(payload_temp,12,12);
- int program_info_length=TSString2Int(payload_temp,84,12);
- boolean end=false;
- int cur_point=96+program_info_length*8;
- while (end!=true){
- int pmt_stream_type=TSString2Int(payload_temp,cur_point,8);
- int elementary_PID=TSString2Int(payload_temp,cur_point+11,13);
- int es_length=TSString2Int(payload_temp,cur_point+28,12);
- int[] pmt=new int[3];
- pmt[0]=pmt_stream_type;
- pmt[1]=elementary_PID;
- pmt[2]=PAT_TABLE;
+
+ private ArrayList readPMT(String payload_temp, int PAT_TABLE) {
+ ArrayList pmt_t = new ArrayList();
+ int tableid = TSString2Int(payload_temp, 0, 8);
+ int section_length = TSString2Int(payload_temp, 12, 12);
+ int program_info_length = TSString2Int(payload_temp, 84, 12);
+ boolean end = false;
+ int cur_point = 96 + program_info_length * 8;
+ while (end != true) {
+ int pmt_stream_type = TSString2Int(payload_temp, cur_point, 8);
+ int elementary_PID = TSString2Int(payload_temp, cur_point + 11, 13);
+ int es_length = TSString2Int(payload_temp, cur_point + 28, 12);
+ int[] pmt = new int[3];
+ pmt[0] = pmt_stream_type;
+ pmt[1] = elementary_PID;
+ pmt[2] = PAT_TABLE;
pmt_t.add(pmt);
- System.out.print("Table : 0x"+Integer.toHexString(tableid)+" | Stream_type : 0x"+Integer.toHexString(pmt_stream_type)+" |elementary PID : 0x"+Integer.toHexString(elementary_PID)+"\n");
- cur_point=cur_point+40+es_length*8;
- if (cur_point>section_length*8){
- end=true;
+ System.out.print("Table : 0x" + Integer.toHexString(tableid) + " | Stream_type : 0x" + Integer.toHexString(pmt_stream_type) + " |elementary PID : 0x" + Integer.toHexString(elementary_PID) + "\n");
+ cur_point = cur_point + 40 + es_length * 8;
+ if (cur_point > section_length * 8) {
+ end = true;
}
}
return pmt_t;
}
- private int TSString2Int(String s,int begin,int length){
+
+ private int TSString2Int(String s, int begin, int length) {
//System.out.print(Integer.toString(begin)+"//"+Integer.toString(length)+"\n");
- String st=s.substring(begin,begin+length);
- int i=Integer.parseInt(st, 2);
+ String st = s.substring(begin, begin + length);
+ int i = Integer.parseInt(st, 2);
return i;
}
- public byte[] splitPAT(byte[] ts,int p_table){
+
+ public byte[] splitPAT(byte[] ts, int p_table) {
/**
*
* p_tableで指定された番組テーブルのみを取り出すPATを作る。
*/
- String tsbyte=new String();
+ /*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;
+ 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;
+ }
}
- String tsheader="";
- 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);
- PID=TSString2Int(tsbyte,11,13);
- adaptation_field=TSString2Int(tsbyte, 26, 2);
- continuity_counter=TSString2Int(tsbyte, 28, 4);
- payload="";
- if (PID!=8191){
- if (adaptation_field==1){
- pointer_field=TSString2Int(tsbyte, 32, 8);
- tsheader=tsbyte.substring(0,40);
- payload=tsbyte.substring(40);
- }else if (adaptation_field==3){
- int al=TSString2Int(tsbyte,32,8);
- if (al<188){
- al=al*8;
+ tsbyte=tsbyte+s;
+ }*/
+ String tsbyte = byte2String(ts);
+ //System.out.println("Base");
+ //(tsbyte);
+ String tsheader = "";
+ 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);
+ PID = TSString2Int(tsbyte, 11, 13);
+ adaptation_field = TSString2Int(tsbyte, 26, 2);
+ continuity_counter = TSString2Int(tsbyte, 28, 4);
+ int adaptation_length_t = TSString2Int(tsbyte, 32, 8);
+ payload = "";
+ if (PID != 8191) {
+ if (adaptation_field == 1) {
+ pointer_field = TSString2Int(tsbyte, 32, 8);
+ tsheader = tsbyte.substring(0, 40);
+ payload = tsbyte.substring(40);
+ } else if (adaptation_field == 3) {
+ if (adaptation_length_t < 188) {
+ adaptation_length_t = adaptation_length_t * 8;
}
- tsheader=tsbyte.substring(0,40);
- payload=tsbyte.substring(48+al);
+ tsheader = tsbyte.substring(0, 48 + adaptation_length_t);
+ payload = tsbyte.substring(48 + adaptation_length_t);
}
}
- if (PID==0){
+ if (PID == 0) {
//System.out.print("Pointer field ? : "+pointer_field+"\n");
- payload=makePAT(payload, p_table);
+ payload = makePAT(tsheader,payload, p_table);
//System.out.print("ここから変更済み\n");
//readPAT(changePAT(payload));
}
- String rets = tsheader+payload;
+ String rets = tsheader + payload;
+ //System.out.println("New");
+ //showPAT(rets);
return Stream2Byte(rets);
}
- private String makePAT(String payload_temp,int Table){
+
+ private String makePAT(String tsheader,String payload_temp, int Table) {
int tableid;
int sectionlength;
- ArrayList program_number=new ArrayList();
- tableid=TSString2Int(payload_temp,0,8);
- sectionlength=TSString2Int(payload_temp,12,12);//-40-32;
- int patnum=sectionlength*8-72;
- String rets=payload_temp.substring(0,12);//セクション長の前まで
- int new_section_length=(2*32+32+40)/8;
- rets=rets+Int2String(new_section_length,12);
- rets=rets+payload_temp.substring(24,64);//ループ前まで
+ ArrayList program_number = new ArrayList();
+ tableid = TSString2Int(payload_temp, 0, 8);
+ sectionlength = TSString2Int(payload_temp, 12, 12);//-40-32;
+ int patnum = sectionlength * 8 - 72;
+ String rets = "";//="00000000";//pointer field
+ rets = rets + payload_temp.substring(0, 12);//セクション長の前まで
+ int new_section_length = (2 * 32 + 32 + 40) / 8;
+ //int new_section_length = (5 * 32 + 32 + 40) / 8;
+
+ rets = rets + Int2String(new_section_length, 12);
+ rets = rets + payload_temp.substring(24, 64);//ループ前まで
String loop = "";
- patnum=patnum/32;
- for (int i=0;i<patnum;i++){
+ patnum = patnum / 32;
+ String crcnow = payload_temp.substring(64 + 32 * patnum, 64 + 32 * patnum + 32);
+ for (int i = 0; i < patnum; i++) {
//System.out.print(payload_temp.substring(64+32*i,95+32*i+1)+"\n");
- int[] pat=new int[2];
- pat[0]=TSString2Int(payload_temp,64+32*i,16);
- pat[1]=TSString2Int(payload_temp,32*i+64+19, 13);
- if (pat[0]==0){
- loop=payload_temp.substring(64+32*i,95+32*i+1);
- }else if (pat[0]==Table){
- loop=loop+payload_temp.substring(64+32*i,95+32*i+1);
- i=patnum;
+ int[] pat = new int[2];
+ pat[0] = TSString2Int(payload_temp, 64 + 32 * i, 16);
+ pat[1] = TSString2Int(payload_temp, 32 * i + 64 + 19, 13);
+ if (pat[0] == 0) {
+ loop = loop+payload_temp.substring(64 + 32 * i, 95 + 32 * i + 1);
+ } else if (pat[0] == Table) {
+ loop = loop + payload_temp.substring(64 + 32 * i, 95 + 32 * i + 1);
+ i = patnum;
}
}
- rets=rets+loop;
- CRC32 crc=new CRC32();
- for (int ipt=0;ipt*8+7<rets.length();ipt++){
- String st=rets.substring(8*ipt,8*ipt+8);
- int tt2=Integer.parseInt(st,2);
- crc.update(tt2);
+ rets = rets + loop;
+ //rets=rets+payload_temp.substring(64,64+32*patnum);
+ //rets=payload_temp.substring(0,64+(32*patnum));
+ //CRC32 crc = new CRC32();
+ String s2=tsheader.substring(tsheader.length()-8);
+ s2=s2+rets;
+ //byte[] sb = Stream2Byte(s2);
+ //crc.reset();
+ //crc.update(sb);
+ String s = getCRC32(s2);
+ rets = rets + s;
+
+ ////////////////////
+
+ //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");
+ //sb = Stream2Byte(tsheader + (payload_temp.substring(0, 64 + (32 * patnum))));
+ /*
+ crc.reset();
+ crc.update(sb);
+ long crcl = crc.getValue();
+
+ System.out.print("Now :" + Long2String(crc.getValue(), 32) + "\n");
+ //System.out.print("New3:"+s+"\n");
+ //
+ //
+
+ String sss = tsheader + payload_temp;
+ //System.out.print("Data:\n"+sss);
+ for (int ib = 0; ib < sss.length() - 1; ib++) {
+ for (int ie = ib + 1; ie < sss.length(); ie++) {
+ if (testCRC(sss, crcnow, ib, ie)) {
+ ib = sss.length();
+ ie = sss.length();
+
+ }
+ //System.out.println(Integer.toString(ib)+":"+Integer.toString(ie));
+ }
}
- rets=rets+Long2String(crc.getValue(),32);
+
+ */
+ ////
+ int ill3 = payload_temp.length() - rets.length();
+ for (int ir = 0; ir < ill3; ir++) {
+ rets = rets + "1";
+ }
+ showPAT(tsheader+rets);
return rets;
}
- private String Int2String(int num,int length){
- String ret=Integer.toBinaryString(num);
- if (ret.length()<length){
- int it=length-ret.length();
- for (int i=0;i<it;i++){
- ret="0"+ret;
+ private String getCRC32(String s){
+ return getCRC32(Stream2Byte(s),1);
+ }
+ private String getCRC32(byte[] data,int offset) {
+ // x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1
+ int[] g = {1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1};
+ int[] shift_reg = new int[32];
+ long crc = 0;
+ byte crc32[] = new byte[4];
+
+ // Initialize shift register's to '1'
+ java.util.Arrays.fill(shift_reg, 1);
+
+ // Calculate nr of data bits, summa of bits
+ int nr_bits = (data.length - offset) * 8;
+
+ for (int bit_count = 0, bit_in_byte = 0, data_bit; bit_count < nr_bits; bit_count++) {
+ // Fetch bit from bitstream
+ data_bit = (data[offset] & 0x80 >>> (bit_in_byte++)) != 0 ? 1 : 0;
+
+ if ((bit_in_byte &= 7) == 0) {
+ offset++;
+ }
+
+ // Perform the shift and modula 2 addition
+ data_bit ^= shift_reg[31];
+
+ for (int i = 31; i > 0; i--) {
+ shift_reg[i] = g[i] == 1 ? (shift_reg[i - 1] ^ data_bit) : shift_reg[i - 1];
+ }
+
+ shift_reg[0] = data_bit;
+ }
+
+ for (int i = 0; i < 32; i++) {
+ crc = ((crc << 1) | (shift_reg[31 - i]));
+ }
+
+ for (int i = 0; i < 4; i++) {
+ crc32[i] = (byte) (0xFF & (crc >>> ((3 - i) * 8)));
+ }
+ String s=Long2String(crc, 32);
+ return s;
+ }
+
+
+ private String byte2String(byte[] b) {
+ 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)) {
+ for (int i2 = s.length(); i2 < 8; i2++) {
+ s = "0" + s;
+ }
+ }
+ ret = ret + s;
+ }
+ return ret;
+ }
+
+ private String byte2HexString(byte[] b) {
+ String ret = "";
+ for (int i = 0; i < b.length; i++) {
+ ret = ret + Integer.toHexString(b[i] & 0xFF);
+ }
+ return ret;
+ }
+
+ private boolean testCRC(String base, String ans, int begin_n, int end_n) {
+ String tests1 = base.substring(begin_n, end_n);
+ byte[] test1 = Stream2Byte(tests1);
+ int t32 = 0;
+ int begin = begin_n;
+ int end = end_n;
+ byte[] test2 = Stream2Byte(ans);
+ String tests2 = ans;
+ CRC32 crc = new CRC32();
+ crc.reset();
+ crc.update(test1);
+
+ if (crc.getValue() == Long.parseLong(tests2, 2)) {
+ System.out.print("正解が出ました。\n");
+ System.out.print("begin : " + Integer.toString(begin_n) + " end : " + Integer.toString(end_n));
+
+ return true;
+ }
+ if (Long.parseLong(getCRC32(test1,1), 2) == Long.parseLong(tests2, 2)) {
+ System.out.print("正解が出ました。(getCRC)\n");
+ System.out.print("begin : " + Integer.toString(begin_n) + " end : " + Integer.toString(end_n));
+ return true;
+ }
+ if (Long.parseLong(getCRC32(test1,1), 2) == Long.parseLong(tests2, 2)) {
+ System.out.print("正解が出ました。(getCRC_2)\n");
+ System.out.println("begin : " + Integer.toString(begin_n) + " end : " + Integer.toString(end_n));
+ showPAT(base);
+ System.out.println("begin : " + base.substring(begin_n,begin_n+32));
+ System.out.println("near : " + base.substring(end_n-32, end_n));
+ System.out.println("near2: " + base.substring(end_n, end_n+32));
+ System.out.println("near3: " + base.substring(end_n+32, end_n+64));
+ return true;
+ }
+ return false;
+ }
+
+ private String Int2String(int num, int length) {
+ String ret = Integer.toBinaryString(num);
+ if (ret.length() < length) {
+ int it = length - ret.length();
+ for (int i = 0; i < it; i++) {
+ ret = "0" + ret;
}
}
return ret;
}
- private String Long2String(long num,int length){
- String ret=Long.toBinaryString(num);
- if (ret.length()<length){
- for (int i=0;i<length-ret.length();i++){
- ret="0"+ret;
+
+ private String Long2String(long num, int length) {
+ String ret = Long.toBinaryString(num);
+ if (ret.length() < length) {
+ int it = length - ret.length();
+ for (int i = 0; i < it; i++) {
+ ret = "0" + ret;
}
}
return ret;
}
- private byte[] Stream2Byte(String ts){
- int len=ts.length()-ts.length()%8;
- len=len/8;
- byte[] ret=new byte[len];
- for (int i=0;i<len;i++){
- String tet=ts.substring(i*8,i*8+8);
- int itt=TSString2Int(tet,0,8);
- ret[i]=(byte)itt;
+
+ private byte[] Stream2Byte(String ts) {
+ int len = ts.length() - ts.length() % 8;
+ len = len / 8;
+ byte[] ret = new byte[len];
+ for (int i = 0; i < len; i++) {
+ String tet = ts.substring(i * 8, i * 8 + 8);
+ int itt = TSString2Int(tet, 0, 8);
+ ret[i] = (byte) itt;
}
return ret;
}
- public ArrayList getPAT(){
+
+ public ArrayList getPAT() {
return pat_list_all;
}
- public void setPAT(ArrayList pat){
- pat_list_now=pat;
- pat_list_all=pat;
+
+ public void setPAT(ArrayList pat) {
+ pat_list_now = pat;
+ pat_list_all = pat;
}
- public ArrayList getPMT(){
+
+ public ArrayList getPMT() {
return pmt_list;
}
- public void setPMT(ArrayList pmt){
- pmt_list=pmt;
+
+ public void setPMT(ArrayList pmt) {
+ pmt_list = pmt;
}
- public int getPID(){
+
+ public int getPID() {
return PID;
}
-}
\ No newline at end of file
+
+ public void showPAT(String ts) {
+ System.out.println("先頭:" + ts.substring(0, 8));
+ System.out.println("" + ts.substring(8, 11));
+ System.out.println("PID:" + ts.substring(11, 24));
+ System.out.println("" + ts.substring(24, 32));
+ System.out.println("Adap_Len:" + ts.substring(32, 40));
+ System.out.println("TableID:" + ts.substring(40, 48));
+ System.out.println("" + ts.substring(48, 52));
+ System.out.println("len : " + ts.substring(52, 64) + "//" + Integer.toString(Integer.parseInt(ts.substring(52, 64), 2)));
+ System.out.println("TS ID:" + ts.substring(64, 80));
+ System.out.println("11:" + ts.substring(80, 82));
+ System.out.println("" + ts.substring(82, 104));
+ for (int i = 0; i < 10; i++) {
+ System.out.println(Integer.toString(i) + " : " + ts.substring(104 + 32 * i, 136 + 32 * i));
+ }
+ System.out.println("Length:" + Integer.toString(ts.length()));
+
+
+
+ }
+}