ariblib 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +6 -0
- data/LICENSE +21 -0
- data/README.md +45 -0
- data/Rakefile +6 -0
- data/ariblib.gemspec +33 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/ariblib.rb +14 -0
- data/lib/ariblib/BitStream.rb +68 -0
- data/lib/ariblib/Descriptor.rb +303 -0
- data/lib/ariblib/EventInformationTable.rb +184 -0
- data/lib/ariblib/ProgramSpecificInformation.rb +318 -0
- data/lib/ariblib/String.rb +325 -0
- data/lib/ariblib/TransportStreamFile.rb +283 -0
- data/lib/ariblib/version.rb +3 -0
- metadata +105 -0
@@ -0,0 +1,325 @@
|
|
1
|
+
#! ruby
|
2
|
+
# -*- encoding: utf-8 -*-
|
3
|
+
|
4
|
+
module Ariblib
|
5
|
+
class String
|
6
|
+
DesignationGSET={
|
7
|
+
0x42 => [:set_code_group, [:put_kanji ,true ].freeze].freeze,#:CODE_KANJI
|
8
|
+
0x4A => [:set_code_group, [:put_alphanumeric ,false].freeze].freeze,#:CODE_ALPHANUMERIC
|
9
|
+
0x30 => [:set_code_group, [:put_hiragana ,false].freeze].freeze,#:CODE_HIRAGANA
|
10
|
+
0x31 => [:set_code_group, [:put_katakana ,false].freeze].freeze,#:CODE_KATAKANA
|
11
|
+
0x32 => [:set_code_group, [:put_ignore ,false].freeze].freeze,#:CODE_MOSAIC_A
|
12
|
+
0x33 => [:set_code_group, [:put_ignore ,false].freeze].freeze,#:CODE_MOSAIC_B
|
13
|
+
0x34 => [:set_code_group, [:put_ignore ,false].freeze].freeze,#:CODE_MOSAIC_C
|
14
|
+
0x35 => [:set_code_group, [:put_ignore ,false].freeze].freeze,#:CODE_MOSAIC_D
|
15
|
+
0x36 => [:set_code_group, [:put_alphanumeric ,false].freeze].freeze,#:CODE_PROP_ALPHANUMERIC
|
16
|
+
0x37 => [:set_code_group, [:put_hiragana ,false].freeze].freeze,#:CODE_PROP_HIRAGANA
|
17
|
+
0x38 => [:set_code_group, [:put_katakana ,false].freeze].freeze,#:CODE_PROP_KATAKANA
|
18
|
+
0x49 => [:set_code_group, [:put_jis_katakana ,false].freeze].freeze,#:CODE_JIS_X0201_KATAKANA
|
19
|
+
0x39 => [:set_code_group, [:put_kanji ,true ].freeze].freeze,#:CODE_JIS_KANJI_PLANE_1
|
20
|
+
0x3A => [:set_code_group, [:put_kanji ,true ].freeze].freeze,#:CODE_JIS_KANJI_PLANE_2
|
21
|
+
0x3B => [:set_code_group, [:put_symbols ,true ].freeze].freeze,#:CODE_ADDITIONAL_SYMBOLS
|
22
|
+
}.freeze
|
23
|
+
DesignationDRCS={
|
24
|
+
0x40 => [:set_code_group, [:put_ignore,true ].freeze].freeze,# DRCS-0
|
25
|
+
0x41 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-1
|
26
|
+
0x42 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-2
|
27
|
+
0x43 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-3
|
28
|
+
0x44 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-4
|
29
|
+
0x45 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-5
|
30
|
+
0x46 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-6
|
31
|
+
0x47 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-7
|
32
|
+
0x48 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-8
|
33
|
+
0x49 => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-9
|
34
|
+
0x4A => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-10
|
35
|
+
0x4B => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-11
|
36
|
+
0x4C => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-12
|
37
|
+
0x4D => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-13
|
38
|
+
0x4E => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-14
|
39
|
+
0x4F => [:set_code_group, [:put_ignore,false].freeze].freeze,# DRCS-15
|
40
|
+
0x70 => [:set_code_group, [:put_ignore,false].freeze].freeze,# Macro
|
41
|
+
}.freeze
|
42
|
+
|
43
|
+
Esc_4th=DesignationDRCS.freeze
|
44
|
+
Esc_3rd_drcs=DesignationDRCS.merge({0x20 => [:esc_seq,Esc_4th,nil].freeze}).freeze
|
45
|
+
Esc_3rd_gset=DesignationGSET.merge({0x20 => [:esc_seq,Esc_4th,nil].freeze}).freeze
|
46
|
+
Esc_2nd={
|
47
|
+
0x20 => [:esc_seq,Esc_3rd_drcs ,nil].freeze,
|
48
|
+
0x28 => [:esc_seq,Esc_3rd_drcs , 0].freeze,
|
49
|
+
0x29 => [:esc_seq,Esc_3rd_gset , 1].freeze,
|
50
|
+
0x2A => [:esc_seq,Esc_3rd_gset , 2].freeze,
|
51
|
+
0x2B => [:esc_seq,Esc_3rd_gset , 3].freeze,
|
52
|
+
}.merge(DesignationGSET).freeze
|
53
|
+
Esc_1st={
|
54
|
+
# Invocation of code elements
|
55
|
+
0x6E => [:set_locking_gl,2].freeze,# LS2
|
56
|
+
0x6F => [:set_locking_gl,3].freeze,# LS3
|
57
|
+
0x7E => [:set_locking_gr,1].freeze,# LS1R
|
58
|
+
0x7D => [:set_locking_gr,2].freeze,# LS2R
|
59
|
+
0x7C => [:set_locking_gr,3].freeze,# LS3R
|
60
|
+
# Designation of graphic sets
|
61
|
+
0x24 => [:esc_seq,Esc_2nd,0].freeze,
|
62
|
+
0x28 => [:esc_seq,Esc_2nd,0].freeze,
|
63
|
+
0x29 => [:esc_seq,Esc_2nd,1].freeze,
|
64
|
+
0x2A => [:esc_seq,Esc_2nd,2].freeze,
|
65
|
+
0x2B => [:esc_seq,Esc_2nd,3].freeze,
|
66
|
+
}.freeze
|
67
|
+
Esc_Error=[:escape_error].freeze
|
68
|
+
|
69
|
+
Ctrl_code={
|
70
|
+
0x0F => [:set_locking_gl , 0 ].freeze,# LS0
|
71
|
+
0x0E => [:set_locking_gl , 1 ].freeze,# LS1
|
72
|
+
0x19 => [:set_single_gl , 2 ].freeze,# SS2
|
73
|
+
0x1D => [:set_single_gl , 3 ].freeze,# SS3
|
74
|
+
0x1B => [:esc_seq ,Esc_1st,nil].freeze, # ESC
|
75
|
+
#0x89 => [:set_em_str_size , :STR_MEDIUM ].freeze,# MSZ
|
76
|
+
#0x8A => [:set_em_str_size , :STR_NORMAL ].freeze,# NSZ
|
77
|
+
0x20 => [:put_alphanumeric_narrow, 0x20 ].freeze,# space
|
78
|
+
0xA0 => [:put_alphanumeric_narrow, 0x20 ].freeze,# space(ARIB)
|
79
|
+
0x09 => [:put_alphanumeric_narrow, 0x20 ].freeze,# HT
|
80
|
+
0x0D => [:put_alphanumeric_narrow, 0x0d ].freeze,
|
81
|
+
0x0A => [:put_alphanumeric_narrow, 0x0d ].freeze,
|
82
|
+
}.freeze
|
83
|
+
|
84
|
+
def set_em_str_size(val)
|
85
|
+
@m_emStrSize = val
|
86
|
+
end
|
87
|
+
def set_single_gl(val)
|
88
|
+
@m_pSingleGL = val
|
89
|
+
end
|
90
|
+
def set_locking_gl(val)
|
91
|
+
@m_pLockingGL = val
|
92
|
+
end
|
93
|
+
def set_locking_gr(val)
|
94
|
+
@m_pLockingGR = val
|
95
|
+
end
|
96
|
+
def set_code_group(val)
|
97
|
+
@m_CodeG[@byIndexG]=val
|
98
|
+
end
|
99
|
+
def escape_error
|
100
|
+
end
|
101
|
+
def esc_seq(hash , byIndexG)
|
102
|
+
@byIndexG=byIndexG if byIndexG
|
103
|
+
args=hash.fetch(@bs.getc,Esc_Error)
|
104
|
+
send *args if @bs.pos <= @len
|
105
|
+
end
|
106
|
+
|
107
|
+
Code_kanji = [0x1B, 0x24, 0x40,nil,nil,0x1B,0x28,0x4a]
|
108
|
+
Code_alphanumeric = (
|
109
|
+
" "+
|
110
|
+
" "+
|
111
|
+
" !”#$%&’()*+,-./"+
|
112
|
+
"0123456789:;<=>?"+
|
113
|
+
"@ABCDEFGHIJKLMNO"+
|
114
|
+
"PQRSTUVWXYZ[¥]^_"+
|
115
|
+
" abcdefghijklmno"+
|
116
|
+
"pqrstuvwxyz{|} ̄ ").freeze
|
117
|
+
Code_hiragana = (
|
118
|
+
" "+
|
119
|
+
" "+
|
120
|
+
" ぁあぃいぅうぇえぉおかがきぎく"+
|
121
|
+
"ぐけげこごさざしじすずせぜそぞた"+
|
122
|
+
"だちぢっつづてでとどなにぬねのは"+
|
123
|
+
"ばぱひびぴふぶぷへべぺほぼぽまみ"+
|
124
|
+
"むめもゃやゅゆょよらりるれろゎわ"+
|
125
|
+
"ゐゑをん ゝゞー。「」、・ ").freeze
|
126
|
+
Code_katakana = (
|
127
|
+
" "+
|
128
|
+
" "+
|
129
|
+
" ァアィイゥウェエォオカガキギク"+
|
130
|
+
"グケゲコゴサザシジスズセゼソゾタ"+
|
131
|
+
"ダチヂッツヅテデトドナニヌネノハ"+
|
132
|
+
"バパヒビピフブプヘベペホボポマミ"+
|
133
|
+
"ムメモャヤュユョヨラリルレロヮワ"+
|
134
|
+
"ヰヱヲンヴヵヶヽヾー。「」、・ ").freeze
|
135
|
+
Code_jis_katakana = (
|
136
|
+
" "+
|
137
|
+
" "+
|
138
|
+
" 。「」、・ヲァィゥェォャュョッ"+
|
139
|
+
"ーアイウエオカキクケコサシスセソ"+
|
140
|
+
"タチツテトナニヌネノハヒフヘホマ"+
|
141
|
+
"ミムメモヤユヨラリルレロワン゛゜"+
|
142
|
+
" "+
|
143
|
+
" ").freeze
|
144
|
+
Code_gaiji = {
|
145
|
+
0x7A => [ nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,#0x21-0x2f
|
146
|
+
nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,#0x30-0x3f
|
147
|
+
nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,#0x40-0x4f
|
148
|
+
"【HV】","【SD】","【P】","【W】","【MV】","【手】","【字】","【双】",
|
149
|
+
"【デ】","【S】","【二】","【多】","【解】","【SS】","【B】","【N】",
|
150
|
+
"■" ,"●" ,"【天】","【交】","【映】","【無】","【料】","【年齢制限】",
|
151
|
+
"【前】","【後】","【再】","【新】","【初】","【終】","【生】","【販】",
|
152
|
+
"【声】","【吹】","【PPV】","(秘)","ほか",],
|
153
|
+
0x7C=>[ "→" ,"←" ,"↑" ,"↓" ,"●" ,"○" ,"年" ,
|
154
|
+
"月" ,"日" ,"円" ,"㎡" ,"㎥" ,"㎝" ,"㎠" ,"㎤" ,
|
155
|
+
"0." ,"1." ,"2." ,"3." ,"4." ,"5." ,"6." ,"7." ,
|
156
|
+
"8." ,"9." ,"氏" ,"副" ,"元" ,"故" ,"前" ,"[新]",
|
157
|
+
"0," ,"1," ,"2," ,"3," ,"4," ,"5," ,"6," ,"7," ,
|
158
|
+
"8," ,"9," ,"(社)","(財)","(有)","(株)","(代)","(問)",
|
159
|
+
"▶" ,"◀" ,"〖" ,"〗" ,"⟐" ,"^2" ,"^3" ,"(CD)",
|
160
|
+
"(vn)","(ob)","(cb)","(ce" ,"mb)" ,"(hp)","(br)","(p)" ,
|
161
|
+
"(s)" ,"(ms)","(t)" ,"(bs)","(b)" ,"(tb)","(tp)","(ds)",
|
162
|
+
"(ag)","(eg)","(vo)","(fl)","(ke" ,"y)" ,"(sa" ,"x)" ,
|
163
|
+
"(sy" ,"n)" ,"(or" ,"g)" ,"(pe" ,"r)" ,"(R)" ,"(C)" ,
|
164
|
+
"(箏)","DJ" ,"[演]","Fax",],
|
165
|
+
0x7D=>[ "㈪" ,"㈫" ,"㈬" ,
|
166
|
+
"㈭" ,"㈮" ,"㈯" ,"㈰" ,
|
167
|
+
"㈷" ,"㍾" ,"㍽" ,"㍼" ,
|
168
|
+
"㍻" ,"№" ,"℡" ,"〶" ,
|
169
|
+
"○" ,"〔本〕" ,"〔三〕" ,"〔二〕" ,
|
170
|
+
"〔安〕" ,"〔点〕" ,"〔打〕" ,"〔盗〕" ,
|
171
|
+
"〔勝〕" ,"〔敗〕" ,"〔S〕" ,"[投]" ,
|
172
|
+
"[捕]" ,"[一]" ,"[二]" ,"[三]" ,
|
173
|
+
"[遊]" ,"[左]" ,"[中]" ,"[右]" ,
|
174
|
+
"[指]" ,"[走]" ,"[打]" ,"㍑" ,
|
175
|
+
"㎏" ,"㎐" ,"ha" ,"㎞" ,
|
176
|
+
"㎢" ,"㍱" ,"・" ,"・" ,
|
177
|
+
"1/2" ,"0/3" ,"1/3" ,"2/3" ,
|
178
|
+
"1/4" ,"3/4" ,"1/5" ,"2/5" ,
|
179
|
+
"3/5" ,"4/5" ,"1/6" ,"5/6" ,
|
180
|
+
"1/7" ,"1/8" ,"1/9" ,"1/10" ,
|
181
|
+
"☀" ,"☁" ,"☂" ,"☃" ,
|
182
|
+
"☖" ,"☗" ,"▽" ,"▼" ,
|
183
|
+
"♦" ,"♥" ,"♣" ,"♠" ,
|
184
|
+
"⌺" ,"⦿" ,"‼" ,"⁉" ,
|
185
|
+
"(曇/晴)","☔" ,"(雨)" ,"(雪)" ,
|
186
|
+
"(大雪)" ,"⚡" ,"(雷雨)" ," " ,
|
187
|
+
"・" ,"・" ,"♬" "☎" ,],
|
188
|
+
0x7E=>[ "Ⅰ" ,"Ⅱ" ,"Ⅲ" ,"Ⅳ" ,"Ⅴ" ,"Ⅵ" ,"Ⅶ" ,
|
189
|
+
"Ⅷ" ,"Ⅸ" ,"Ⅹ" ,"Ⅺ" ,"Ⅻ" ,"⑰" ,"⑱" ,"⑲" ,
|
190
|
+
"⑳" ,"⑴" ,"⑵" ,"⑶" ,"⑷" ,"⑸" ,"⑹" ,"⑺" ,
|
191
|
+
"⑻" ,"⑼" ,"⑽" ,"⑾" ,"⑿" ,"㉑" ,"㉒" ,"㉓" ,
|
192
|
+
"㉔" ,"(A)","(B)","(C)","(D)","(E)","(F)","(G)",
|
193
|
+
"(H)","(I)","(J)","(K)","(L)","(M)","(N)","(O)",
|
194
|
+
"(P)","(Q)","(R)","(S)","(T)","(U)","(V)","(W)",
|
195
|
+
"(X)","(Y)","(Z)","㉕" ,"㉖" ,"㉗" ,"㉘" ,"㉙" ,
|
196
|
+
"㉚" ,"①" ,"②" ,"③" ,"④" ,"⑤" ,"⑥" ,"⑦" ,
|
197
|
+
"⑧" ,"⑨" ,"⑩" ,"⑪" ,"⑫" ,"⑬" ,"⑭" ,"⑮" ,
|
198
|
+
"⑯" ,"❶" ,"❷" ,"❸" ,"❹" ,"❺" ,"❻" ,"❼" ,
|
199
|
+
"❽" ,"❾" ,"❿" ,"⓫" ,"⓬" ,"㉛" ,],
|
200
|
+
0x75=>[ "㐂","亭","份","仿","侚","俉","傜",
|
201
|
+
"儞","冼","㔟","匇","卡","卬","詹","吉",
|
202
|
+
"呍","咖","咜","咩","唎","啊","噲","囤",
|
203
|
+
"圳","圴","塚","墀","姤","娣","婕","寬",
|
204
|
+
"﨑","㟢","庬","弴","彅","德","怗","恵",
|
205
|
+
"愰","昤","曈","曙","曺","曻","桒","・",
|
206
|
+
"椑","椻","橅","檑","櫛","・","・","・",
|
207
|
+
"毱","泠","洮","海","涿","淊","淸","渚",
|
208
|
+
"潞","濹","灤","・","・","煇","燁","爀",
|
209
|
+
"玟","・","珉","珖","琛","琡","琢","琦",
|
210
|
+
"琪","琬","琹","瑋","㻚","畵","疁","睲",
|
211
|
+
"䂓","磈","磠","祇","禮","・","・",],
|
212
|
+
0x76=>[ "・","秚","稞","筿","簱","䉤","綋",
|
213
|
+
"羡","脘","脺","・","芮","葛","蓜","蓬",
|
214
|
+
"蕙","藎","蝕","蟬","蠋","裵","角","諶",
|
215
|
+
"跎","辻","迶","郝","鄧","鄭","醲","鈳",
|
216
|
+
"銈","錡","鍈","閒","雞","餃","饀","髙",
|
217
|
+
"鯖","鷗","麴","麵",],
|
218
|
+
}
|
219
|
+
Code_gaiji.default=[]
|
220
|
+
Code_gaiji.freeze
|
221
|
+
|
222
|
+
def put_kanji(char1,char2)
|
223
|
+
Code_kanji[3]=char1
|
224
|
+
Code_kanji[4]=char2
|
225
|
+
@dst+=Code_kanji.pack('C*').force_encoding('ISO-2022-JP').encode('utf-8')
|
226
|
+
#rescue => e
|
227
|
+
# puts e.message
|
228
|
+
# p (@bs.pos-@debug_pos)/8
|
229
|
+
# @bs.pos=@debug_pos
|
230
|
+
# p @bs.str(@debug_len).unpack('C*')
|
231
|
+
# puts @dst
|
232
|
+
# exit
|
233
|
+
end
|
234
|
+
def put_alphanumeric(char1,char2)
|
235
|
+
@dst+=char1.chr
|
236
|
+
end
|
237
|
+
def put_alphanumeric_narrow(char1,char2)
|
238
|
+
@dst+=char1.chr
|
239
|
+
end
|
240
|
+
def put_alphanumeric_wide(char1,char2)
|
241
|
+
@dst+=Code_alphanumeric[char1]
|
242
|
+
end
|
243
|
+
def put_hiragana(char1,char2)
|
244
|
+
@dst+=Code_hiragana[char1]
|
245
|
+
end
|
246
|
+
def put_katakana(char1,char2)
|
247
|
+
@dst+=Code_katakana[char1]
|
248
|
+
end
|
249
|
+
def put_jis_katakana(char1,char2)
|
250
|
+
@dst+=Code_jis_katakana[char1]
|
251
|
+
end
|
252
|
+
def put_symbols(char1,char2)
|
253
|
+
return if char2 < 0x21
|
254
|
+
@dst+=Code_gaiji[char1][char2-0x21]||''
|
255
|
+
end
|
256
|
+
def put_ignore(char1,char2)
|
257
|
+
end
|
258
|
+
|
259
|
+
def initialize(bs,len)
|
260
|
+
@len=bs.pos+len*8
|
261
|
+
@bs=bs
|
262
|
+
@dst=''.force_encoding('utf-8')
|
263
|
+
|
264
|
+
# 状態初期設定
|
265
|
+
@m_CodeG =[ DesignationGSET[0x42][1],
|
266
|
+
DesignationGSET[0x4a][1],
|
267
|
+
DesignationGSET[0x30][1],
|
268
|
+
DesignationGSET[0x31][1]]
|
269
|
+
@m_pLockingGL = 0
|
270
|
+
@m_pLockingGR = 2
|
271
|
+
@m_pSingleGL = nil
|
272
|
+
|
273
|
+
#@str=bs.str(len).unpack('C*')
|
274
|
+
#bs.pos-=len*8
|
275
|
+
#@debug_pos=bs.pos
|
276
|
+
#@debug_len=len
|
277
|
+
|
278
|
+
conv
|
279
|
+
end
|
280
|
+
|
281
|
+
def to_utf8
|
282
|
+
@dst
|
283
|
+
end
|
284
|
+
|
285
|
+
def conv
|
286
|
+
#@m_emStrSize = :STR_NORMAL
|
287
|
+
while(@bs.pos < @len)
|
288
|
+
dwSrcData = @bs.getc
|
289
|
+
|
290
|
+
if((dwSrcData >= 0x21) && (dwSrcData <= 0x7E)) #GL領域
|
291
|
+
curCodeSet = @m_CodeG[@m_pSingleGL || @m_pLockingGL];
|
292
|
+
@m_pSingleGL=nil
|
293
|
+
char2 = (curCodeSet[1])? @bs.getc : nil #// 2バイトコード
|
294
|
+
send( curCodeSet[0],dwSrcData,char2) if @bs.pos <= @len
|
295
|
+
|
296
|
+
elsif((dwSrcData >= 0xA1) && (dwSrcData <= 0xFE)) #// GR領域
|
297
|
+
curCodeSet = @m_CodeG[@m_pLockingGR];
|
298
|
+
char2 = (curCodeSet[1])? @bs.getc : nil #// 2バイトコード
|
299
|
+
send( curCodeSet[0],dwSrcData & 0x7f,char2 & 0x7f) if @bs.pos <= @len
|
300
|
+
|
301
|
+
else
|
302
|
+
#// 制御コード
|
303
|
+
case(dwSrcData)
|
304
|
+
when 0x0F then @m_pLockingGL = 0 # LS0
|
305
|
+
when 0x0E then @m_pLockingGL = 1 # LS1
|
306
|
+
when 0x19 then @m_pSingleGL = 2 # SS2
|
307
|
+
when 0x1D then @m_pSingleGL = 3 # SS3
|
308
|
+
when 0x1B then esc_seq(Esc_1st,nil) # ESC
|
309
|
+
#when 0x89 then @m_emStrSize = :STR_MEDIUM # MSZ
|
310
|
+
#when 0x8A then @m_emStrSize = :STR_NORMAL # NSZ
|
311
|
+
when 0x20 then @dst+=' ' # space
|
312
|
+
when 0xA0 then @dst+=' ' # space(ARIB)
|
313
|
+
when 0x09 then @dst+=' ' # HT
|
314
|
+
when 0x0D then @dst+="\r"
|
315
|
+
when 0x0A then @dst+="\r"
|
316
|
+
else
|
317
|
+
end
|
318
|
+
end
|
319
|
+
end
|
320
|
+
@dst
|
321
|
+
end
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
__END__
|
@@ -0,0 +1,283 @@
|
|
1
|
+
#! ruby
|
2
|
+
# -*- encoding: utf-8 -*-
|
3
|
+
|
4
|
+
module Ariblib
|
5
|
+
class FIFO
|
6
|
+
attr_accessor :buf
|
7
|
+
def initialize(buf)
|
8
|
+
@buf=buf
|
9
|
+
end
|
10
|
+
def getbyte
|
11
|
+
@buf.shift
|
12
|
+
end
|
13
|
+
def add(buf)
|
14
|
+
@buf += buf
|
15
|
+
end
|
16
|
+
def << (buf)
|
17
|
+
@buf << buf
|
18
|
+
end
|
19
|
+
def clear
|
20
|
+
@buf.clear
|
21
|
+
end
|
22
|
+
def size
|
23
|
+
@buf.size * 8
|
24
|
+
end
|
25
|
+
def eof?
|
26
|
+
@buf.size == 0
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
#TSパケット
|
31
|
+
class TransportStreamPacket
|
32
|
+
def initialize
|
33
|
+
end
|
34
|
+
def set(ts)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
#TSファイル
|
39
|
+
class TransportStreamFile
|
40
|
+
attr_reader :payload_ap
|
41
|
+
attr_reader :pid
|
42
|
+
attr_reader :adaptation_field_control
|
43
|
+
attr_reader :packet_start_pos
|
44
|
+
|
45
|
+
|
46
|
+
attr_reader :payload
|
47
|
+
attr_reader :bs
|
48
|
+
attr_reader :continuity_counter
|
49
|
+
attr_reader :payload_unit_start_indicator
|
50
|
+
attr_reader :payload_length
|
51
|
+
|
52
|
+
Default_payload={
|
53
|
+
#0x0000 => ProgramAssociationTable.new,
|
54
|
+
#0x0001 => ConditionalAccessTable.new,
|
55
|
+
0x0012 => EventInformationTable.new,
|
56
|
+
0x0011 => ServiceDescriptionTable.new,
|
57
|
+
0x0010 => NetworkInformationTable.new,
|
58
|
+
0x0014 => TimeOffsetTable.new,
|
59
|
+
0x0029 => CommonDataTable.new,
|
60
|
+
}
|
61
|
+
ReadSize=188*20
|
62
|
+
def initialize(filename,payload_list=Default_payload)
|
63
|
+
@file=open(filename,'rb')
|
64
|
+
@bs=BitStream.new(@file.read(ReadSize))
|
65
|
+
@payload=payload_list
|
66
|
+
@payload.default=TransportStreamPacket.new
|
67
|
+
@payload.merge!(payload_list)
|
68
|
+
@payload_ap=Hash.new(0)
|
69
|
+
@packet_count=0
|
70
|
+
end
|
71
|
+
|
72
|
+
def eof?
|
73
|
+
@file.eof? && (@bs.lest <= 0)
|
74
|
+
end
|
75
|
+
|
76
|
+
def close
|
77
|
+
@file.close
|
78
|
+
end
|
79
|
+
|
80
|
+
def sync
|
81
|
+
while(@bs.lest>0 and (c=@bs.read(8))!=0x47) do
|
82
|
+
end
|
83
|
+
return false if @bs.lest<=0
|
84
|
+
@bs.pos-=8
|
85
|
+
true
|
86
|
+
end
|
87
|
+
|
88
|
+
def transport_packet
|
89
|
+
if @bs.lest <= 0
|
90
|
+
tmp=@file.read(ReadSize)
|
91
|
+
return nil unless tmp
|
92
|
+
@bs=BitStream.new(tmp)
|
93
|
+
end
|
94
|
+
packet_start_pos = @bs.pos
|
95
|
+
sync_byte = @bs.getc
|
96
|
+
return :async unless sync_byte==0x47
|
97
|
+
tmp = @bs.getc
|
98
|
+
tmp=(tmp<<8)| @bs.getc
|
99
|
+
#transport_error_indicator = @bs.read 1 #bslbf
|
100
|
+
#@payload_unit_start_indicator = @bs.read 1 #bslbf
|
101
|
+
#transport_priority = @bs.read 1 #bslbf
|
102
|
+
#@pid = @bs.read 13 #uimsbf
|
103
|
+
transport_error_indicator = tmp & 0x8000 #1 bslbf
|
104
|
+
@payload_unit_start_indicator = tmp & 0x4000 #1 bslbf
|
105
|
+
transport_priority = tmp & 0x2000 #1 bslbf
|
106
|
+
@pid = tmp & 0x1fff #13 uimsbf
|
107
|
+
tmp = @bs.getc
|
108
|
+
#transport_scrambling_control = @bs.read 2 #bslbf
|
109
|
+
#@adaptation_field_control = @bs.read 2 #bslbf
|
110
|
+
#@continuity_counter = @bs.read 4 #uimsbf
|
111
|
+
transport_scrambling_control = tmp & 0xc0 #2 bslbf
|
112
|
+
adaptation_field_control1 = tmp & 0x20 #2 bslbf
|
113
|
+
adaptation_field_control2 = tmp & 0x10 #2 bslbf
|
114
|
+
@continuity_counter = tmp & 0x0f #4 uimsbf
|
115
|
+
if(adaptation_field_control1 !=0 )
|
116
|
+
#adaptation_field()
|
117
|
+
@adaptation_field_length = @bs.getc
|
118
|
+
@adaptation_field_length += 1 #uimsbf
|
119
|
+
@adaptation_pos=@bs.pos
|
120
|
+
@bs.pos+=@adaptation_field_length
|
121
|
+
end
|
122
|
+
count = packet_start_pos+188*8
|
123
|
+
@payload_length=((count)-@bs.pos)/8
|
124
|
+
if(adaptation_field_control2 !=0 )
|
125
|
+
@payload[@pid].set(self)
|
126
|
+
@payload_ap[@pid]+=1
|
127
|
+
end
|
128
|
+
@bs.pos=count
|
129
|
+
true
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
__END__
|
136
|
+
#Default_payload 一覧
|
137
|
+
# PID table_id
|
138
|
+
#PMT*1 PATによる間接指定 0x02 +必須 1@100ms
|
139
|
+
#INT*1 PMTによる間接指定 0x4c 任意 1@30s
|
140
|
+
|
141
|
+
#PID table_id
|
142
|
+
#0x0000 0x00 PAT +必須 1@100ms
|
143
|
+
#0x0001 0x01 CAT +必須 1@1s
|
144
|
+
#0x0010 0x40 NIT *必須 1@10s(自ストリーム)
|
145
|
+
#0x0010 0x41 NIT *任意 1@10s(他ストリーム)
|
146
|
+
#0x0011 0x42 SDT *必須 1@10s(自ストリーム)
|
147
|
+
#0x0011 0x46 SDT *任意 1@10s(他ストリーム)
|
148
|
+
#0x0011 0x4a BAT 任意 1@10s(他ストリーム)
|
149
|
+
#0x0012 0x4e EIT *必須 1@2s(EITpf自ストリーム)
|
150
|
+
#0x0012 0x4f EIT 任意 1@10s(EITpf自ストリーム)
|
151
|
+
#0x0012 0x5? EIT 任意 1@10s(自ストリーム8日以内)
|
152
|
+
#0x0012 0x5? EIT 任意 1@30s(自ストリーム8日以降)
|
153
|
+
#0x0012 0x6? EIT 任意 1@10s(他ストリーム8日以内)
|
154
|
+
#0x0012 0x6? EIT 任意 1@30s(他ストリーム8日以降)
|
155
|
+
#0x0012,0x0026,0x0027 EIT
|
156
|
+
#0x0013 0x71 RST 任意 任意
|
157
|
+
#0x0014 0x70 TDT *必須 1@30s
|
158
|
+
#0x0014 0x73 TOT *必須 1@30s
|
159
|
+
#0x0022 0xc2 PCAT 任意 任意
|
160
|
+
#0x0024 0xc4 BIT 任意 1@20s
|
161
|
+
#0x0025 0xc5 NBIT 任意 1@20s
|
162
|
+
#0x0025 0xc6 NBIT 任意 1@10s
|
163
|
+
#0x002E 0xfe AMT 任意 1@10s
|
164
|
+
#?????? 0x72 ST 任意 任意 (0x0000, 0x0001, 0x0014を除く)
|
165
|
+
|
166
|
+
#ECM*1 PMTによる間接指定
|
167
|
+
#EMM*1 CATによる間接指定
|
168
|
+
#DLT*3 DCTによる間接指定
|
169
|
+
#LIT*5 PMTによる間接指定*6(Default:0x20)
|
170
|
+
#ERT*5 PMTによる間接指定*6(Default:0x21)
|
171
|
+
#ITT PMTによる間接指定
|
172
|
+
#AIT*9 PMTによる間接指定
|
173
|
+
#DCM*10 PMTによる間接指定
|
174
|
+
#DSM-CCセクション*4 PMTによる間接指定
|
175
|
+
#DMM*10 SDTTによる間接指定
|
176
|
+
|
177
|
+
#0x0017 DCT*3
|
178
|
+
#0x001E DIT*2
|
179
|
+
#0x001F SIT*2
|
180
|
+
#0x0020 LIT*5
|
181
|
+
#0x0021 ERT*5
|
182
|
+
#0x0023、0x0028 SDTT
|
183
|
+
#0x0025 0xc7 LDT
|
184
|
+
#0x0029 CDT
|
185
|
+
#0x002D 分割TLVパケット*11
|
186
|
+
#0x002F 多重フレームヘッダ情報*7
|
187
|
+
#0x1FFF ???? ヌルパケット*1
|
188
|
+
|
189
|
+
#記述子タグ()
|
190
|
+
#CAT SDT NBIT
|
191
|
+
# PMT EIT LDT
|
192
|
+
# NIT TOT
|
193
|
+
# BAT BIT
|
194
|
+
#-o-------- j 0x04 階層符号化記述子*1, 8
|
195
|
+
#-o-------- j 0x05 登録記述子*8
|
196
|
+
#oo-------- * 0x09 限定受信方式記述子*1
|
197
|
+
#-o-------- * 0x0D 著作権記述子*1
|
198
|
+
# 0x13 カルーセル識別記述子*7
|
199
|
+
# 0x14 アソシエーションタグ記述子*7
|
200
|
+
# 0x15 拡張アソシエーションタグ記述子*7
|
201
|
+
#-o-------- j 0x1C MPEG-4 オーディオ記述子*8
|
202
|
+
#-o-------- r 0x28 AVC ビデオ記述子*8
|
203
|
+
#-o-------- r 0x2A AVC タイミングHRD 記述子*8
|
204
|
+
#-o-------- j 0x2E MPEG-4 オーディオ拡張記述子*8
|
205
|
+
#-o-------- j 0x38 HEVC ビデオ記述子*8
|
206
|
+
#--o------- n 0x40* ネットワーク名記述子*2
|
207
|
+
#--oo---o-- n 0x41* サービスリスト記述子*1
|
208
|
+
#--oooo--oo r 0x42 スタッフ記述子
|
209
|
+
#--o------- n 0x43 衛星分配システム記述子*1
|
210
|
+
# 0x44 有線分配システム記述子*4
|
211
|
+
#---oo----- n 0x47 ブーケ名記述子
|
212
|
+
#----o----- n 0x48 サービス記述子*2
|
213
|
+
#-o-oo----- r 0x49 国別受信可否記述子
|
214
|
+
#-ooooo---- r 0x4A リンク記述子
|
215
|
+
#----o----- j 0x4B NVOD 基準サービス記述子
|
216
|
+
#----o----- j 0x4C タイムシフトサービス記述子*2
|
217
|
+
#-----o---o n 0x4D 短形式イベント記述子*2
|
218
|
+
#-----o---o r 0x4E 拡張形式イベント記述子
|
219
|
+
#-----o---- j 0x4F タイムシフトイベント記述子*2
|
220
|
+
#-o---o---- r 0x50 コンポーネント記述子
|
221
|
+
#-o--o----- r 0x51 モザイク記述子
|
222
|
+
#-o-------- r 0x52 ストリーム識別記述子
|
223
|
+
#---ooo---- r 0x53 CA 識別記述子
|
224
|
+
#-----o---- r 0x54 コンテント記述子
|
225
|
+
#-o---o---- r 0x55 パレンタルレート記述子
|
226
|
+
#------o--- j 0x58 ローカル時間オフセット記述子
|
227
|
+
# 0x63 パーシャルトランスポートストリーム記述子*3
|
228
|
+
#-o-------- r 0x66 データブロードキャスト識別記述子
|
229
|
+
# 0x67 素材情報記述子
|
230
|
+
#-o-------- r 0x68 通信連携情報記述子
|
231
|
+
# 0x80-
|
232
|
+
# 0xBF 事業者定義記述子のタグ値として選択可能な範囲
|
233
|
+
#-o-------- j 0xC0 階層伝送記述子
|
234
|
+
#-o--oo---- r 0xC1 デジタルコピー制御記述子
|
235
|
+
# 0xC2 ネットワーク識別記述子*3
|
236
|
+
# 0xC3 パーシャルトランスポートストリームタイム記述子*3
|
237
|
+
#-----o---- r 0xC4 音声コンポーネント記述子
|
238
|
+
#-----o-o-- r 0xC5 ハイパーリンク記述子
|
239
|
+
#-o-------- r 0xC6 対象地域記述子
|
240
|
+
#-----o---- r 0xC7 データコンテンツ記述子
|
241
|
+
#-o-------- r 0xC8 ビデオデコードコントロール記述子
|
242
|
+
# 0xC9 ダウンロードコンテンツ記述子*3
|
243
|
+
# 0xCA CA_EMM_TS 記述子*5
|
244
|
+
# 0xCB CA 契約情報記述子*5
|
245
|
+
# 0xCC CA サービス記述子*5
|
246
|
+
#--o------- r 0xCD* TS 情報記述子
|
247
|
+
#-------o-- r 0xCE 拡張ブロードキャスタ記述子
|
248
|
+
#----o----- r 0xCF ロゴ伝送記述子
|
249
|
+
# 0xD0 基本ローカルイベント記述子
|
250
|
+
# 0xD1 リファレンス記述子
|
251
|
+
# 0xD2 ノード関係記述子
|
252
|
+
# 0xD3 短形式ノード情報記述子
|
253
|
+
# 0xD4 STC 参照記述子
|
254
|
+
#-----o---- r 0xD5 シリーズ記述子
|
255
|
+
#-----o---- r 0xD6 イベントグループ記述子
|
256
|
+
#-------o-- r 0xD7 SI 伝送パラメータ記述子
|
257
|
+
#-------o-- r 0xD8 ブロードキャスタ名記述子
|
258
|
+
#-----o---- r 0xD9 コンポーネントグループ記述子
|
259
|
+
#-------o-- r 0xDA SI プライムTS 記述子
|
260
|
+
#--------o- r 0xDB 掲示板情報記述子
|
261
|
+
#-----o---- r 0xDC LDT リンク記述子
|
262
|
+
#--o------- j 0xDD 連結送信記述子
|
263
|
+
#-o--oo---- r 0xDE コンテント利用記述子
|
264
|
+
# 0xDF タグ値拡張用(未規定)
|
265
|
+
#--o------- r 0xE0 サービスグループ記述子
|
266
|
+
#--o------- j 0xE1 エリア放送情報記述子
|
267
|
+
# 0xE2 ネットワークダウンロードコンテンツ記述子*3
|
268
|
+
# 0xE3 ダウンロード保護記述子*9
|
269
|
+
# 0xE4 CA 起動記述子*9
|
270
|
+
# 0xE5-
|
271
|
+
# 0xF2 未規定
|
272
|
+
# 0xF3 有線複数搬送波伝送分配システム記述子*10
|
273
|
+
# 0xF4 高度有線分配システム記述子*10
|
274
|
+
#oo-------- j 0xF5 スクランブル方式記述子*1
|
275
|
+
#oo-------- j 0xF6 アクセス制御記述子*1
|
276
|
+
#-o---o---- r 0xF7 カルーセル互換複合記述子*1
|
277
|
+
#oo-------- j 0xF8 限定再生方式記述子*1, *5
|
278
|
+
# 0xF9 有線TS 分割システム記述子*6
|
279
|
+
#--o------- n 0xFA* 地上分配システム記述子*1
|
280
|
+
#--o------- j 0xFB* 部分受信記述子*1
|
281
|
+
#-oo------- j 0xFC 緊急情報記述子*1
|
282
|
+
#-o-------- j 0xFD データ符号化方式記述子*1
|
283
|
+
#-oo------- n 0xFE* システム管理記述子*1
|