import jtssplitter.data.PATData;
import jtssplitter.data.PMTData;
import jtssplitter.data.Descriptor;
+import jtssplitter.data.EITData;
import jtssplitter.data.Video_stream_descriptor;
/*
* To change this template, choose Tools | Templates
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){
+ /*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();
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) {
+ //System.out.println(Integer.toString(cur_point)+" : "+Integer.toString(section_length*8));
+ if ((cur_point > section_length * 8 - 1)|| (cur_point>payload_temp.length()-11)) {
end = true;
}
}else{
}
return pmt_t;
}
-
+ public ArrayList<EITData> readEIT(byte[] ts) {
+ String payload_temp=getPayload(ts);
+ int tableid = TSString2Int(payload_temp, 0, 8);
+ int section_length = TSString2Int(payload_temp, 12, 12);
+ int program_number = TSString2Int(payload_temp, 24, 16);
+ boolean current_next_indicator= (TSString2Int(payload_temp, 47, 1)==1);
+ int section_number = TSString2Int(payload_temp, 48, 8);
+ int curpoint=112;
+ ArrayList<EITData> ret=new ArrayList<EITData>();
+ while (curpoint<24+section_length*8-32){
+ EITData eitd=new EITData();
+ eitd.current_newt_indicator=current_next_indicator;
+ eitd.event_id = TSString2Int(payload_temp, curpoint, 16);
+ eitd.program_number=program_number;
+ eitd.section_number = section_number;
+ int des_len=TSString2Int(payload_temp, curpoint+84, 12);
+ Descriptor des=new Descriptor();
+ eitd.descriptors=des.getDescriptors(payload_temp.substring(curpoint+96,curpoint+84+des_len*8));
+ ret.add(eitd);
+ curpoint=curpoint+84+des_len*8;
+ }
+ return ret;
+ }
private int TSString2Int(String s, int begin, int length) {
String st = s.substring(begin, begin + length);
int i = Integer.parseInt(st, 2);
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.Arrays;
+import jtssplitter.data.EITData;
import jtssplitter.data.PATData;
import jtssplitter.data.PIDs;
import jtssplitter.data.PMTData;
}else if ((ii==pmt_pid)&&(readti>187)){
wbyte=tb;
ArrayList<PMTData> pmtss=m2tpp.readPMT(tb, pmt_pid);
- int[] new_pids=new int[pmtss.size()+3];
- new_pids[pmtss.size()]=0;
- new_pids[pmtss.size()+1]=pmt_pid;
- new_pids[pmtss.size()+2]=pmtss.get(0).PCR_PID;
- for (int i=0;i<pmtss.size();i++){
- new_pids[i]=pmtss.get(i).Elementary_PID;
- }
- if (!Arrays.equals(pids, new_pids)){
- pids=new_pids;
+ if (pmtss.size()>0){
+ int[] new_pids=new int[pmtss.size()+3];
+ new_pids[pmtss.size()]=0;
+ new_pids[pmtss.size()+1]=pmt_pid;
+ new_pids[pmtss.size()+2]=pmtss.get(0).PCR_PID;
+ for (int i=0;i<pmtss.size();i++){
+ new_pids[i]=pmtss.get(i).Elementary_PID;
+ }
+ if (!Arrays.equals(pids, new_pids)){
+ pids=new_pids;
+ }
}
+ /*}else if ((ii==0x0012)&&(readti>187)){
+ ArrayList<EITData> eitss=m2tpp.readEIT(tb);
+ */
}else if (readti>187){
wbyte=tb;
int i = Integer.parseInt(st, 2);
return i;
}
+ public byte[] byte2subbyte(byte[] b,int start,int length){
+ byte[] ret=new byte[length];
+ System.arraycopy(b,start,ret,0, length);
+ return ret;
+ }
+ public int byte2int(byte[] b,int startbit,int length){
+ int a=startbit-startbit%8;
+ a=a/8;
+ int bb=startbit+length-(startbit+length)%8;
+ bb=bb/8;
+ int ret=0;
+ for (int i=0;i<bb-a+1;i++){
+ if (i==0){
+ int tt=1;
+ for (int j=0;j<(8-(startbit%8));j++){
+ tt=tt*2;
+ }
+ tt=tt-1;
+ int lent=length-8+(startbit%8);
+ if (lent<0){
+ lent=0;
+ }
+ ret=ret+(((b[a]&0xFF)&tt)<<lent);
+ if (i==bb-a){
+ int k=0;
+ if ((startbit+length)%8==0){
+ k=0;
+ }else{
+ k=8-(startbit+length)%8;
+ }
+ ret=ret>>k;
+ }
+ }else if (i==bb-a){
+ int k=0;
+ if ((startbit+length)%8==0){
+ k=8;
+ }else{
+ k=8-(startbit+length)%8;
+ }
+ ret=ret+((b[a+i]&0xFF)>>k);
+ }else{
+ ret=ret+((b[a+i]&0xFF)<<((bb-a-i-1)*8+((startbit+length)%8)));
+ }
+ }
+ return ret;
+ }
+ public long byte2long(byte[] b,int startbit,int length){
+ int a=startbit-startbit%8;
+ a=a/8;
+ int bb=startbit+length-(startbit+length)%8;
+ bb=bb/8;
+ long ret=0;
+ for (int i=0;i<bb-a+1;i++){
+ if (i==0){
+ int tt=1;
+ for (int j=0;j<(8-(startbit%8));j++){
+ tt=tt*2;
+ }
+ tt=tt-1;
+ int lent=length-8+(startbit%8);
+ if (lent<0){
+ lent=0;
+ }
+ ret=ret+(((b[a]&0xFF)&tt)<<lent);
+ if (i==bb-a){
+ int k=0;
+ if ((startbit+length)%8==0){
+ k=0;
+ }else{
+ k=8-(startbit+length)%8;
+ }
+ ret=ret>>k;
+ }
+ }else if (i==bb-a){
+ int k=0;
+ if ((startbit+length)%8==0){
+ k=8;
+ }else{
+ k=8-(startbit+length)%8;
+ }
+ ret=ret+((b[a+i]&0xFF)>>k);
+ }else{
+ ret=ret+((b[a+i]&0xFF)<<((bb-a-i-1)*8+((startbit+length)%8)));
+ }
+ }
+ return ret;
+ }
}
--- /dev/null
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package jtssplitter.data;
+import java.util.ArrayList;
+/**
+ *
+ * @author yukikaze
+ */
+public class EITData {
+ public int program_number;
+ public boolean current_newt_indicator;
+ public int section_number;
+ public int event_id;
+ public ArrayList<jtssplitter.data.descriptor.abstract_Descriptor> descriptors;
+}