/**
*
- * @author Administrator
+ * @author gn64_jp
*/
public class Mpeg2TSPacket {
public String header;
public String payload;
public String adaptation;
+ public byte[] bPAT_payload=null;
+ private String bPAT_payload_made="";
//private ArrayList<TsDate> date=new ArrayList<TsDate>();
//date.add(new TsDate("Starter"))
public int type;//
*
* p_tableで指定された番組テーブルのみを取り出すPATを作る。
*/
+ int matchnum=0;
+ byte[] tbb=new byte[ts.length-4];
+ for (int i=0;i<ts.length-4;i++){
+ tbb[i]=ts[4+i];
+ if (bPAT_payload!=null){
+ if (ts[4+i]==bPAT_payload[i]){
+ matchnum++;
+ }
+ }
+ }
+ if (matchnum==ts.length-4){
+ byte[] retb=new byte[188];
+ System.arraycopy(ts,0,retb,0,4);
+ System.arraycopy(bPAT_payload,0,retb,4,184);
+ return retb;
+ }else{
+ bPAT_payload=tbb;
+ }
String tsbyte = byte2String(ts);
String tsheader = "";
header = tsbyte.substring(0, 31);
}
private String makePAT(String tsheader,String payload_temp, int Table) {
- int tableid;
int sectionlength;
- ArrayList program_number = new ArrayList();
+ StringBuffer sb=new StringBuffer();
+ //ArrayList program_number = new ArrayList();
//System.out.println("Pay:"+payload_temp);
- tableid = TSString2Int(payload_temp, 0, 8);
+ //int 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);//セクション長の前まで
+ //String rets = "";//="00000000";//pointer field
+ //rets = rets + payload_temp.substring(0, 12);//セクション長の前まで
+ sb.append(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);//ループ前まで
+ sb.append(Int2String(new_section_length, 12));
+ sb.append(payload_temp.substring(24, 64));
+ //rets = rets + Int2String(new_section_length, 12);
+ //rets = rets + payload_temp.substring(24, 64);//ループ前まで
String loop = "";
patnum = patnum / 32;
- String crcnow = payload_temp.substring(64 + 32 * patnum, 64 + 32 * patnum + 32);
+ //String crcnow = payload_temp.substring(64 + 32 * patnum, 64 + 32 * patnum + 32);
for (int i = 0; i < patnum; i++) {
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);
+ sb.append(payload_temp.substring(64 + 32 * i, 95 + 32 * i + 1));
+ //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);
+ sb.append(payload_temp.substring(64 + 32 * i, 95 + 32 * i + 1));
+ //loop = loop + payload_temp.substring(64 + 32 * i, 95 + 32 * i + 1);
i = patnum;
}
}
- rets = rets + loop;
String s2=tsheader.substring(tsheader.length()-8);
- s2=s2+rets;
+ s2=s2+sb.toString();
String s = getCRC32(s2);
- rets = rets + s;
- int ill3 = payload_temp.length() - rets.length();
+ sb.append(s);
+ //rets = rets + s;
+ int ill3 = payload_temp.length() - sb.length();
for (int ir = 0; ir < ill3; ir++) {
- rets = rets + "1";
+ sb.append("1");
+ //rets = rets + "1";
}
- return rets;
+ return sb.toString();
}
private String getCRC32(String s){
return getCRC32(String2Byte(s),1);
}
private String addzero(int num){
- StringBuffer s2=new StringBuffer();
- for (int i2 = 0; i2 < num; i2++) {
- s2.append("0");// = "0" + s2;
+ switch (num){
+ case 0:
+ return "";
+ case 1:
+ return "0";
+ case 2:
+ return "00";
+ case 3:
+ return "000";
+ case 4:
+ return "0000";
+ case 5:
+ return "00000";
+ case 6:
+ return "000000";
+ case 7:
+ return "0000000";
+ case 8:
+ return "00000000";
+ default:
+ StringBuffer sb=new StringBuffer();
+ for (int i=0;i<num;i++){
+ sb.append("0");
+ }
+ return sb.toString();
}
- return s2.toString();
}
private String byte2String(byte[] b) {
StringBuffer sb=new StringBuffer(8*b.length);