2 * jTsSplitter - java based mpeg2ts splitter.
3 * Copyright (C) 2009-2012 Yukikaze
13 public String Int2String(int num, int length) {
14 String ret = Integer.toBinaryString(num);
15 if (ret.length() < length) {
16 int it = length - ret.length();
17 for (int i = 0; i < it; i++) {
23 public String Long2String(long num, int length) {
24 String ret = Long.toBinaryString(num);
25 if (ret.length() < length) {
26 int it = length - ret.length();
27 for (int i = 0; i < it; i++) {
33 public byte[] String2Byte(String ts) {
34 //StringBuffer sb=new StringBuffer(ts);
35 int len = ts.length() - ts.length() % 8;
37 byte[] ret = new byte[len];
38 for (int i = 0; i < len; i++) {
39 String tet = ts.substring(i * 8, i * 8 + 8);
40 int itt = TSString2Int(tet, 0, 8);
45 public byte joinByte(byte b1,byte b2,int b2length){
46 byte ret=(byte)(b1<<(b2length)&0xFF+b2&0xFF);
49 public byte joinByte(byte b1,byte b2,int b2len,byte b3,int b3len){
50 byte ret=joinByte(b1,b2,b2len);
51 ret=joinByte(ret, b3, b3len);
54 public String byte2String(byte[] b) {
55 StringBuffer sb=new StringBuffer(8*b.length);
56 for (int i = 0; i < b.length; i++) {
57 StringBuffer sb2=new StringBuffer(8);
58 sb2.append(Integer.toBinaryString(b[i] & 0xFF));
59 if ((sb2.length() < 8) & (sb2.length() > 0)) {
60 sb2.insert(0,addzero(8-sb2.length()));
66 public String byte2String2(byte[] b){
70 StringBuffer sb=new StringBuffer();
71 for (int i=0;i<bl;i++){
73 for (int j=0;j<8;j++){
78 sb.append(Long2String(retl,64));
82 for (int i=0;i<bl2;i++){
84 for (int j=0;j<4;j++){
86 reti=reti+(b[bl*8+4*i+j]&0xFF);
88 sb.append(Int2String(reti,32));
90 for (int i=0;i<(b.length%8)%4;i++){
91 sb.append(Int2String(b[bl*8+bl2*4+i]&0xFF,8));
96 public String byte2HexString(byte[] b) {
98 for (int i = 0; i < b.length; i++) {
99 ret = ret + Integer.toHexString(b[i] & 0xFF);
103 public String addzero(int num){
124 StringBuffer sb=new StringBuffer();
125 for (int i=0;i<num;i++){
128 return sb.toString();
131 public int TSString2Int(String s, int begin, int length) {
132 String st = s.substring(begin, begin + length);
133 int i = Integer.parseInt(st, 2);
136 public byte[] byte2subbyte(byte[] b,int start,int length){
137 byte[] ret=new byte[length];
138 System.arraycopy(b,start,ret,0, length);
141 public int byte2int(byte[] b,int startbit,int length){
142 int a=startbit-startbit%8;
144 int bb=startbit+length-(startbit+length)%8;
147 for (int i=0;i<bb-a+1;i++){
150 for (int j=0;j<(8-(startbit%8));j++){
154 int lent=length-8+(startbit%8);
158 ret=ret+(((b[a]&0xFF)&tt)<<lent);
161 if ((startbit+length)%8==0){
164 k=8-(startbit+length)%8;
170 if ((startbit+length)%8==0){
173 k=8-(startbit+length)%8;
175 ret=ret+((b[a+i]&0xFF)>>k);
177 ret=ret+((b[a+i]&0xFF)<<((bb-a-i-1)*8+((startbit+length)%8)));
179 if (b.length-1-a==i){
185 public long byte2long(byte[] b,int startbit,int length){
186 int a=startbit-startbit%8;
188 int bb=startbit+length-(startbit+length)%8;
191 for (int i=0;i<bb-a+1;i++){
194 for (int j=0;j<(8-(startbit%8));j++){
198 int lent=length-8+(startbit%8);
202 ret=ret+(((b[a]&0xFF)&tt)<<lent);
205 if ((startbit+length)%8==0){
208 k=8-(startbit+length)%8;
214 if ((startbit+length)%8==0){
217 k=8-(startbit+length)%8;
219 ret=ret+((b[a+i]&0xFF)>>k);
221 ret=ret+((b[a+i]&0xFF)<<((bb-a-i-1)*8+((startbit+length)%8)));
226 public void showPAT(String ts) {
227 System.out.println("先頭:" + ts.substring(0, 8));
228 System.out.println("" + ts.substring(8, 11));
229 System.out.println("PID:" + ts.substring(11, 24));
230 System.out.println("" + ts.substring(24, 32));
231 System.out.println("Adap_Len:" + ts.substring(32, 40));
232 System.out.println("TableID:" + ts.substring(40, 48));
233 System.out.println("" + ts.substring(48, 52));
234 System.out.println("len : " + ts.substring(52, 64) + "//" + Integer.toString(Integer.parseInt(ts.substring(52, 64), 2)));
235 System.out.println("TS ID:" + ts.substring(64, 80));
236 System.out.println("11:" + ts.substring(80, 82));
237 System.out.println("" + ts.substring(82, 104));
238 for (int i = 0; i < 10; i++) {
239 System.out.println(Integer.toString(i) + " : " + ts.substring(104 + 32 * i, 136 + 32 * i));
241 System.out.println("Length:" + Integer.toString(ts.length()));
243 public byte[] getCRC32_byte(byte[] data, int offset) {
244 // x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1
245 int[] g = {1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1};
246 int[] shift_reg = new int[32];
248 byte crc32[] = new byte[4];
250 // Initialize shift register's to '1'
251 java.util.Arrays.fill(shift_reg, 1);
253 // Calculate nr of data bits, summa of bits
254 int nr_bits = (data.length - offset) * 8;
256 for (int bit_count = 0, bit_in_byte = 0, data_bit; bit_count < nr_bits; bit_count++) {
257 // Fetch bit from bitstream
258 data_bit = (data[offset] & 0x80 >>> (bit_in_byte++)) != 0 ? 1 : 0;
260 if ((bit_in_byte &= 7) == 0) {
264 // Perform the shift and modula 2 addition
265 data_bit ^= shift_reg[31];
267 for (int i = 31; i > 0; i--) {
268 shift_reg[i] = g[i] == 1 ? (shift_reg[i - 1] ^ data_bit) : shift_reg[i - 1];
271 shift_reg[0] = data_bit;
274 for (int i = 0; i < 32; i++) {
275 crc = ((crc << 1) | (shift_reg[31 - i]));
278 for (int i = 0; i < 4; i++) {
279 crc32[i] = (byte) (0xFF & (crc >>> ((3 - i) * 8)));