From e76f53ddb53b3b95bcb9d16c8bbe447a6d18c454 Mon Sep 17 00:00:00 2001 From: gn64_jp Date: Wed, 13 Jan 2010 22:59:56 +0000 Subject: [PATCH] fix housou daigaku splitting error. git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/rec10@399 4e526526-5e11-4fc0-8910-f8fd03428081 --- .../trunk/src/jtssplitter/Mpeg2TSPacket.java | 32 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/jTsSplitter/trunk/src/jtssplitter/Mpeg2TSPacket.java b/jTsSplitter/trunk/src/jtssplitter/Mpeg2TSPacket.java index 2f006e0..abd8fcf 100644 --- a/jTsSplitter/trunk/src/jtssplitter/Mpeg2TSPacket.java +++ b/jTsSplitter/trunk/src/jtssplitter/Mpeg2TSPacket.java @@ -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); } -- 2.11.0