OSDN Git Service

fix housou daigaku splitting error.
authorgn64_jp <gn64_jp@4e526526-5e11-4fc0-8910-f8fd03428081>
Wed, 13 Jan 2010 22:59:56 +0000 (22:59 +0000)
committergn64_jp <gn64_jp@4e526526-5e11-4fc0-8910-f8fd03428081>
Wed, 13 Jan 2010 22:59:56 +0000 (22:59 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/rec10@399 4e526526-5e11-4fc0-8910-f8fd03428081

jTsSplitter/trunk/src/jtssplitter/Mpeg2TSPacket.java

index 2f006e0..abd8fcf 100644 (file)
@@ -118,8 +118,10 @@ public class Mpeg2TSPacket {
         if (payload_byte != null) {
             if ((PID == 0) && (begin_payload_unit)) {
                 //cal.showPAT(tsbyte);
-                pat_list_now = readPAT_byte(payload_byte);
-                pat_list_all.addAll(pat_list_now);
+                if (isPAT(payload_byte)){
+                    pat_list_now = readPAT_byte(payload_byte);
+                    pat_list_all.addAll(pat_list_now);
+                }
             }
             for (int i = 0; i < pat_list_now.size(); i++) {
                 if ((PID == pat_list_now.get(i).PID) && (PID != 0)) {
@@ -291,9 +293,12 @@ public class Mpeg2TSPacket {
         if ((PID == 0) && (begin_payload_unit) && (payload_byte != null)) {
             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 (isPAT(payload_byte)){
+                payload_byte = makePAT_byte(new_pointer, payload_byte, p_table);
+                if (payload_byte.length>0){
+                    bPAT_payload = payload_byte;
+                }
+            }
         }
         if ((payload_byte != null)&& (begin_payload_unit)) {
             ByteArrayOutputStream baos = new ByteArrayOutputStream(ts.length);
@@ -346,7 +351,22 @@ public class Mpeg2TSPacket {
         }
         return baos.toByteArray();
     }
-
+    public boolean isPAT(byte[] byte_tmp){
+        calc cal=new calc();
+        if ((cal.byte2int(byte_tmp,0,8)==0)&&(cal.byte2int(byte_tmp,9,3)==3)&&(cal.byte2int(byte_tmp, 40, 2)==3)){
+            return true;
+        }else{
+            return false;
+        }
+    }
+    public boolean isPMT(byte[] byte_tmp){
+        calc cal=new calc();
+        if ((cal.byte2int(byte_tmp,9,3)==3)&&(cal.byte2int(byte_tmp, 40, 2)==3)&&(cal.byte2int(byte_tmp,64,3)==3)&&(cal.byte2int(byte_tmp,80,4)==15)){
+            return true;
+        }else{
+            return false;
+        }
+    }
     private String getCRC32(String s) {
         return getCRC32(String2Byte(s), 1);
     }