package jtssplitter;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.zip.CRC32;
import jtssplitter.data.PATData;
import jtssplitter.data.PMTData;
+import jtssplitter.data.Descriptor;
+import jtssplitter.data.Video_stream_descriptor;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
ArrayList<PMTData> pmt_t = new ArrayList<PMTData>();
int tableid = TSString2Int(payload_temp, 0, 8);
int section_length = TSString2Int(payload_temp, 12, 12);
+ int pcr_pid = TSString2Int(payload_temp, 67, 13);
int program_info_length = TSString2Int(payload_temp, 84, 12);
boolean end = false;
int cur_point = 96 + program_info_length * 8;
int elementary_PID = TSString2Int(payload_temp, cur_point + 11, 13);
//System.out.println(Integer.toString(cur_point)+" : "+Integer.toString(section_length*8));
int es_length = TSString2Int(payload_temp, cur_point + 28, 12);
+ if (pmt_stream_type==0x02){
+ Descriptor des=new Descriptor();
+ Object a=des.getDescriptors(payload_temp.substring(cur_point + 40,cur_point + 40+es_length*8));
+ }else if(pmt_stream_type==0x0f){
+ Descriptor des=new Descriptor();
+ Object a=des.getDescriptors(payload_temp.substring(cur_point + 40,cur_point + 40+es_length*8));
+ }
+
+
PMTData pmtd=new PMTData();
- pmtd.Stream_Type=pmt_stream_type;
- pmtd.Program_Table=PAT_TABLE;
- pmtd.Elementary_PID=elementary_PID;
- pmt_t.add(pmtd);
+ if ((pmt_stream_type==0x02)||(pmt_stream_type==0x0f)){
+ pmtd.Stream_Type=pmt_stream_type;
+ pmtd.Program_Table=PAT_TABLE;
+ pmtd.Elementary_PID=elementary_PID;
+ pmtd.PCR_PID=pcr_pid;
+ pmt_t.add(pmtd);
+ }
cur_point = cur_point + 40 + es_length * 8;
//System.out.println(Integer.toString(cur_point)+" : "+Integer.toString(section_length));
if (cur_point > section_length * 8 - 1) {
*/
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++;
- }
+ System.arraycopy(ts,4,tbb,0,tbb.length);
+ if (bPAT_payload!=null){
+ if (Arrays.equals(tbb, bPAT_payload)){
+ byte[] retb=new byte[188];
+ System.arraycopy(ts,0,retb,0,4);
+ System.arraycopy(bPAT_payload,0,retb,4,184);
+ return retb;
}
}
- 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 = byte2String2(ts);
String tsheader = "";
header = tsbyte.substring(0, 31);
if (PID == 0) {
//showPAT(tsbyte);
payload = makePAT(tsheader,payload, p_table);
+ byte[] retb=String2Byte(payload);
+ bPAT_payload=retb;
}
String rets = tsheader + payload;
return String2Byte(rets);
return ret;
}
- public ArrayList getPAT() {
+ public ArrayList<PATData> getPAT() {
return pat_list_all;
}
pat_list_all = pat;
}
- public ArrayList getPMT() {
+ public ArrayList<PMTData> getPMT() {
return pmt_list;
}
public int getPID() {
return PID;
}
-
+ public String getPayload(byte[] ts){
+ /**
+ * 188バイトのtsから読み出したbyteを与える
+ */
+ String tsbyte = byte2String2(ts);
+ //header = tsbyte.substring(0, 31);
+ String ret_payload="";
+ //starter = TSString2Int(tsbyte, 0, 8);
+ //transporterror = TSString2Int(tsbyte, 8, 1);
+ //payloadstart = TSString2Int(tsbyte, 9, 1);
+ //transport_priority = TSString2Int(tsbyte, 10, 1);
+ int pid = TSString2Int(tsbyte, 11, 13);
+ int af = TSString2Int(tsbyte, 26, 2);
+ //continuity_counter = TSString2Int(tsbyte, 28, 4);
+ if (pid != 8191) {
+ if (af == 1) {
+ ret_payload = tsbyte.substring(40);
+ } else if (af == 3) {
+ int al = TSString2Int(tsbyte, 32, 8);
+ if ((al < 184)&((tsbyte.length()-al*8)>48)) {
+ al = al * 8;
+ }
+ ret_payload = tsbyte.substring(48 + al);
+ }
+ }
+ return ret_payload;
+ }
+ public ArrayList<PMTData> readPMT(byte[] ts,int TABLE_NUM){
+ String payload=getPayload(ts);
+ return readPMT(payload, TABLE_NUM);
+ }
public void showPAT(String ts) {
System.out.println("先頭:" + ts.substring(0, 8));
System.out.println("" + ts.substring(8, 11));