2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
7 import java.util.ArrayList;
9 import java.util.logging.Level;
10 import java.util.logging.Logger;
13 * @author Administrator
16 private ArrayList tsstream=new ArrayList();
17 public void readTs(String fpath){
18 byte[] tb=new byte[188];
19 int[] ib=new int[188];
20 ArrayList pat=new ArrayList();
21 ArrayList pmt=new ArrayList();
22 String[] sb=new String[188];
24 FileInputStream in = new FileInputStream(fpath);
25 int[] PIDCount=new int[8200];
26 for (int i=0;i<3000;i++){
30 m2tp=new Mpeg2TSPacket();
36 PIDCount[m2tp.getPID()]++;
38 for (int i=0;i<8200;i++){
40 //System.out.print(Integer.toString(i)+" : "+Integer.toString(PIDCount[i])+"\n");
42 //System.out.print(PIDCount[i]);
44 for (int i=0;i<188;i++){
47 String s=Integer.toBinaryString(it);
49 for (int i2=s.length();i2<8;i2++){
53 //System.out.print(s+"\n");
56 //s=s+"0"*(8-s.length());
58 //System.out.print(Integer.toHexString(ib[0])+"\n");
59 //System.out.print(s+"\n");
60 } catch (IOException ex) {
61 Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex);
65 public void splitTS(String origpath,String destpath,int csch){
71 p_table=getFirstP_Table(origpath);
73 int[] pidst=getTablePID(origpath,p_table);
75 pids=new int[pidst.length-1];
76 for (int i=0;i<pidst.length-1;i++){
79 byte[] tb=new byte[188];
80 int[] ib=new int[188];
81 ArrayList pat=new ArrayList();
82 ArrayList pmt=new ArrayList();
83 String[] sb=new String[188];
85 FileInputStream in = new FileInputStream(origpath);
86 FileOutputStream fos=new FileOutputStream(destpath,true);
87 //int[] PIDCount=new int[8200];
89 for (int i=0;in.read(tb)!=-1;i++){
92 m2tp=new Mpeg2TSPacket();
94 for (int j=0;j<pids.length;j++){
95 if (m2tp.getPID()==pids[j]){
96 if (m2tp.getPID()==0){
97 Mpeg2TSPacket m2tp2=new Mpeg2TSPacket();
99 wbyte=m2tp2.splitPAT(tb,p_table);
112 } catch (IOException ex) {
113 Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex);
116 private void writeTS(byte[] tspacket,String path){
117 FileOutputStream fos = null;
119 fos = new FileOutputStream(path,true);
122 } catch (IOException ex) {
123 Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex);
127 } catch (IOException ex) {
128 Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex);
132 private int[] getTablePID(String fpath,int p_table){
134 * PIDを取得し、これと思われる必要なPIDを抜き出す。
135 * @return プログラム番号(return[0])とPIDのリスト(return[1-])
137 FileInputStream in = null;
140 ArrayList ret=new ArrayList();
141 byte[] tb = new byte[188];
142 int[] ib = new int[188];
143 ArrayList pat = new ArrayList();
144 ArrayList pmt = new ArrayList();
145 String[] sb = new String[188];
146 in = new FileInputStream(fpath);
147 //int[] PIDCount = new int[8200];
149 for (int i = 0; i < imax ; i++) {
153 m2tp = new Mpeg2TSPacket();
158 for (int i2=0;i2<pat.size();i2++){
159 int[] il2=(int [])pat.get(i2);
160 if (il2[0]==p_table){
166 ArrayList pmtt=m2tp.getPMT();
167 for (int i2=0;i2<pmtt.size();i2++){
168 if (!(pmt.contains(pmtt.get(i2)))){
169 pmt.add(pmtt.get(i2));
172 if ((i==imax-1)&&(pmt.size()==0)){
175 for (int i2=0;i2<pmt.size();i2++){
176 int[] il2=(int[])pmt.get(i2);
178 if (p_table==il2[2]){
179 if (!(ret.contains(il2[1]))){
184 if (ret.size()==itt){
189 int[] pat_det=new int[2];
190 for (int i=0;i<pat.size();i++){
191 int[] ii2=(int[])pat.get(i);
192 if (ii2[0]==p_table){
200 for (int i=0;i<pmt.size();i++){
201 int[] il2=(int[])pmt.get(i);
202 if (pat_det[0]==il2[2]){
203 if (!(ret.contains(il2[1]))){
208 reti=new int[ret.size()+1];
210 for (int i=0;i<ret.size();i++){
211 int retit=(Integer)ret.get(i);
215 } catch (IOException ex) {
216 Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex);
220 } catch (IOException ex) {
221 Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex);
226 private int getFirstP_Table(String fpath){
228 * PIDを取得し、これと思われる必要なPIDを抜き出す。
229 * @return プログラム番号(return[0])とPIDのリスト(return[1-])
231 FileInputStream in = null;
233 int[] pat_det=new int[2];
236 ArrayList ret=new ArrayList();
237 byte[] tb = new byte[188];
238 int[] ib = new int[188];
239 ArrayList pat = new ArrayList();
240 ArrayList pmt = new ArrayList();
241 String[] sb = new String[188];
242 in = new FileInputStream(fpath);
243 //int[] PIDCount = new int[8200];
245 for (int i = 0; i < imax ; i++) {
249 m2tp = new Mpeg2TSPacket();
255 //PIDCount[m2tp.getFirstP_Table()]++;
256 if ((i==imax-1)&&(pmt.size()==0)){
261 for (int i=0;i<pat.size();i++){
262 int[] ii2=(int[])pat.get(i);
272 for (int i=0;i<pmt.size();i++){
273 int[] il2=(int[])pmt.get(i);
274 if (pat_det[0]==il2[2]){
275 if (!(ret.contains(il2[1]))){
280 reti=new int[ret.size()+1];
282 for (int i=0;i<ret.size();i++){
283 int retit=(Integer)ret.get(i);
288 } catch (IOException ex) {
289 Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex);
293 } catch (IOException ex) {
294 Logger.getLogger(Tsfile.class.getName()).log(Level.SEVERE, null, ex);