ariblib 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|