OSDN Git Service

fix to read correct Pointer_Field used in PAT.
authorgn64_jp <gn64_jp@4e526526-5e11-4fc0-8910-f8fd03428081>
Mon, 7 Dec 2009 07:55:17 +0000 (07:55 +0000)
committergn64_jp <gn64_jp@4e526526-5e11-4fc0-8910-f8fd03428081>
Mon, 7 Dec 2009 07:55:17 +0000 (07:55 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/rec10@304 4e526526-5e11-4fc0-8910-f8fd03428081

jTsSplitter/trunk/src/jtssplitter/Mpeg2TSPacket.java
jTsSplitter/trunk/src/jtssplitter/Tsfile.java

index fabb24b..09ee221 100644 (file)
@@ -289,14 +289,20 @@ public class Mpeg2TSPacket {
             payload_byte = null;
         }
         if ((PID == 0) && (begin_payload_unit) && (payload_byte != null)) {
-            payload_byte = makePAT_byte(pointer_byte, payload_byte, p_table);
+            byte[] new_pointer=new byte[1];
+            new_pointer[0]=0;
+            payload_byte = makePAT_byte(new_pointer, payload_byte, p_table);
+            //payload_byte = makePAT_byte(pointer_byte, payload_byte, p_table);
             bPAT_payload = payload_byte;
         }
-        if (payload_byte != null) {
+        if ((payload_byte != null)&& (begin_payload_unit)) {
             ByteArrayOutputStream baos = new ByteArrayOutputStream(ts.length);
             baos.write(header_byte, 0, header_byte.length);
             baos.write(pointer_byte, 0, pointer_byte.length);
             baos.write(payload_byte, 0, payload_byte.length);
+            for (int ir = 0; ir < 188-baos.size(); ir++) {
+                baos.write(0xFF);
+            }
             return baos.toByteArray();
         } else {
             return null;
index 7bcc4cc..e70791c 100644 (file)
@@ -62,7 +62,32 @@ public class Tsfile {
                         alreadyreaded=true;
                         int readti=bis.read(tb);
                         if ((ii==0)&&(readti>187)){
-                            //Mpeg2TSPacket m2tp2=new Mpeg2TSPacket();
+                            Mpeg2TSPacket m2tp2=new Mpeg2TSPacket();
+                            m2tp2.readTS_byte(tb);
+                            ArrayList<PATData> pats=new ArrayList<PATData>();
+                            pats=m2tp2.getPAT();
+                            boolean containp_table=false;
+                            for (int iii=0;iii<pats.size();iii++){
+                                if (pats.get(iii).Program_TABLE==p_table){
+                                    containp_table=true;
+                                }
+                            }
+                            if (!containp_table){
+                                for (int iii=0;iii<pats.size();iii++){
+                                    if (pats.get(iii).Program_TABLE>0){
+                                        System.out.println("Program Tableの変更を検知"+Integer.toString(p_table)+" to "+Integer.toString(pats.get(iii).Program_TABLE));
+                                        p_table=pats.get(iii).Program_TABLE;
+                                        for (int it=0;it<pids.length;it++){
+                                            if (pids[it]==pmt_pid){
+                                                pmt_pid=pats.get(iii).PID;
+                                                pids[it]=pmt_pid;
+                                            }
+                                        }
+                                        iii=pats.size();
+                                    }
+                                }
+                            }
+
                             wbyte=m2tpp.splitPAT_byte(tb,p_table);
                             //wbyte=m2tpp.splitPAT(tb, p_table);
                             /*byte[] wbytet=m2tpp.splitPAT(tb, p_table);