ariblib 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,303 +1,303 @@
1
- #! ruby
2
- # -*- encoding: utf-8 -*-
3
-
4
- module Ariblib
5
- #記述子
6
- class Descriptor
7
- def initialize(h,bs,tag,length)
8
- parse(h,bs,tag,length)
9
- end
10
- def parse(h,bs,tag,descriptor_length)
11
- h[:tag] << tag
12
- end
13
- end
14
-
15
- class ShortEventDescriptor < Descriptor
16
- def parse(h,bs,tag,descriptor_length)
17
-
18
- iso_639_language_code =bs.get3 #24 bslbf
19
- event_name_length =bs.getc #8 uimsbf
20
- event_name_char =Ariblib::String.new(bs,event_name_length).to_utf8
21
- text_length =bs.getc #8 uimsbf
22
- text_char =Ariblib::String.new(bs,text_length).to_utf8
23
- h[:title]=event_name_char
24
- h[:desc ]=text_char
25
- end
26
- end
27
- class ExtendedEventDescriptor < Descriptor
28
- def parse(h,bs,tag,descriptor_length)
29
- descriptor_number =bs.read 4 #uimsbf
30
- last_descriptor_number =bs.read 4 #uimsbf
31
- iso_639_language_code =bs.get3 #24 bslbf
32
- length_of_items =bs.getc #8 uimsbf
33
- len=bs.pos+length_of_items*8
34
- while bs.pos < len
35
- item_description_length =bs.getc #8 uimsbf
36
- item_description_char =Ariblib::String.new(bs,item_description_length).to_utf8
37
- item_length =bs.getc #8 uimsbf
38
- item_char =bs.str(item_length)
39
- if item_description_length==0
40
- (h[:verbose_pair].last)[1] += item_char
41
- else
42
- h[:verbose_pair] << [item_description_char,item_char]
43
- end
44
- #item_char =Ariblib::String.new(bs,item_length).to_utf8
45
- #h[item_description_char]||=[]
46
- #h[item_description_char] << item_char
47
- #verbose << [item_description_char,item_char]
48
- end
49
- text_length =bs.getc #8 uimsbf
50
- text_char =bs.str(text_length)
51
- h[:verbose] += text_char
52
- end
53
- end
54
- class ContentDescriptor < Descriptor
55
- def parse(h,bs,tag,descriptor_length)
56
- content_nibble_level_1=bs.read 4
57
- content_nibble_level_2=bs.read 4
58
- bs.pos+=descriptor_length-1
59
- h[:content]=[content_nibble_level_1,content_nibble_level_2]
60
- end
61
- end
62
- class ServiceDescriptor < Descriptor
63
- def parse(h,bs,tag,descriptor_length)
64
- service_type =bs.read 8 #uimsbf
65
- service_provider_name_length =bs.read 8 #uimsbf
66
- service_provider_name =Ariblib::String.new(bs,service_provider_name_length).to_utf8#bs.str(service_provider_name_length)
67
- service_name_length =bs.read 8 #uimsbf
68
- service_name =Ariblib::String.new(bs,service_name_length).to_utf8#bs.str(service_name_length)
69
- h[:service_type]=service_type
70
- h[:service_provider_name]=service_provider_name
71
- h[:service_name]=service_name
72
- end
73
- end
74
- class DataContentDescriptor < Descriptor
75
- def parse(h,bs,tag,descriptor_length)
76
- data_component_id = bs.read 16 #uimsbf
77
- entry_component = bs.getc #8 uimsbf
78
- selector_length = bs.getc #8 uimsbf
79
- selector_byte = bs.str(selector_length)
80
- num_of_component_ref = bs.getc #8 uimsbf
81
- component_ref = bs.str(num_of_component_ref)
82
-
83
- iso_639_language_code = bs.read 24 #bslbf
84
- text_length = bs.getc #8 uimsbf
85
- text_char = Ariblib::String.new(bs,text_length).to_utf8
86
- h[:data_component]=text_char
87
- end
88
- end
89
- class AudioComponentDescriptor < Descriptor
90
- def parse(h,bs,tag,descriptor_length)
91
- text_length = descriptor_length - 9#8 uimsbf
92
- reserved_future_use = bs.read 4 #bslbf
93
- stream_content = bs.read 4 #uimsbf
94
- component_type = bs.getc #8 uimsbf
95
- component_tag = bs.getc #8 uimsbf
96
- stream_type = bs.getc #8 uimsbf
97
- simulcast_group_tag = bs.getc #8 bslbf
98
- es_multi_lingual_flag = bs.read 1 #bslbf
99
- main_component_flag = bs.read 1 #bslbf
100
- quality_indicator = bs.read 2 #bslbf
101
- sampling_rate = bs.read 3 #uimsbf
102
- reserved_future_use = bs.read 1 #bslbf
103
- iso_639_language_code = bs.read 24 #bslbf
104
- if (es_multi_lingual_flag == 1)
105
- iso_639_language_code_2 = bs.read 24 #bslbf
106
- text_length-= 3
107
- end
108
- text_char = Ariblib::String.new(bs,text_length).to_utf8
109
- h[:audio_component]=text_char
110
- end
111
- end
112
- class ComponentDescriptor < Descriptor
113
- def parse(h,bs,tag,descriptor_length)
114
- text_length = descriptor_length - 6#8 uimsbf
115
- reserved_future_use = bs.read 4 #bslbf
116
- stream_content = bs.read 4 #uimsbf
117
- component_type = bs.getc #8 uimsbf
118
- component_tag = bs.getc #8 uimsbf
119
- iso_639_language_code = bs.read 24 #bslbf
120
- text_char = Ariblib::String.new(bs,text_length).to_utf8
121
- h[:component]=text_char
122
- end
123
- end
124
- class EventGroupDescriptor < Descriptor
125
- def parse(h,bs,tag,descriptor_length)
126
- list=[]
127
- #event_group_descriptor (){
128
- group_type = bs.read 4 #uimsbf
129
- event_count = bs.read 4 #uimsbf
130
- event_count.times do
131
- service_id = bs.read 16 #uimsbf
132
- event_id = bs.read 16 #uimsbf
133
- list <<[service_id,event_id]
134
- end
135
- if(group_type == 4 || group_type ==5)
136
- len=(descriptor_length-1-event_count*4)/8
137
- len.times do
138
- original_network_id = bs.read 16 #uimsbf
139
- transport_stream_id = bs.read 16 #uimsbf
140
- service_id = bs.read 16 #uimsbf
141
- event_id = bs.read 16 #uimsbf
142
- end
143
- else
144
- len=(descriptor_length-1-event_count*4)
145
- private_data_byte = bs.str len #uimsbf
146
- end
147
- h[:event_group]=[group_type,list]
148
- end
149
- end
150
- class LogoTransmissionDescriptor < Descriptor
151
- def parse(h,bs,tag,descriptor_length)
152
- #h[:tag] << :digital_copy_control
153
- logo_transmission_type = bs.read 8 #uimsbf
154
- if(logo_transmission_type == 0x01)
155
- reserved_future_use = bs.read 7 #bslbf
156
- logo_id = bs.read 9 #uimsbf
157
- reserved_future_use = bs.read 4 #bslbf
158
- logo_version = bs.read 12 #uimsbf
159
- download_data_id = bs.read 16 #uimsbf
160
- h[:logo]=[logo_id,logo_version,download_data_id]
161
- elsif(logo_transmission_type == 0x02)
162
- reserved_future_use = bs.read 7 #bslbf
163
- logo_id = bs.read 9 #uimsbf
164
- h[:logo]=[logo_id]
165
- elsif(logo_transmission_type == 0x03)
166
- len=(descriptor_length-1)
167
- logo_char = Ariblib::String.new(bs,len).to_utf8 #uimsbf
168
- h[:logo_char]=logo_char
169
- else
170
- len=(descriptor_length-1)
171
- reserved_future_use = bs.str len #bslbf
172
- end
173
- end
174
- end
175
- class ServiceGroupDescriptor < Descriptor
176
- def parse(h,bs,tag,descriptor_length)
177
- h[:tag] << :service_groupe
178
- end
179
- end
180
- class DigitalCopyControlDescriptor < Descriptor
181
- def parse(h,bs,tag,descriptor_length)
182
- h[:tag] << :digital_copy_control
183
- end
184
- end
185
- class NetworkNameDescriptor < Descriptor
186
- def parse(h,bs,tag,descriptor_length)
187
- network_name = Ariblib::String.new(bs,descriptor_length).to_utf8 #uimsbf
188
- h[:network_name] = network_name
189
- end
190
- end
191
- class TSInformationDescriptor < Descriptor
192
- def parse(h,bs,tag,descriptor_length)
193
- ret=[]
194
- start_pos=bs.pos
195
- remote_control_key_id = bs.read 8 #uimsbf
196
- length_of_ts_name = bs.read 6 #uimsbf
197
- transmission_type_count = bs.read 2 #uimsbf
198
- ts_name_char = Ariblib::String.new(bs,length_of_ts_name).to_utf8 #uimsbf
199
- transmission_type_count.times do
200
- transmission_type_info = bs.read 8 #bslbf
201
- num_of_service = bs.read 8 #uimsbf
202
- num_of_service.times do
203
- service_id = bs.read 16 #uimsbf
204
- ret << service_id
205
- end
206
- end
207
- len=descriptor_length-(bs.pos-start_pos)/8
208
- #for (l = 0;l< N;l++) {
209
- #reserved_future_use 8 bslbf
210
- #}
211
- h[:TS_remote_key]=remote_control_key_id
212
- h[:TS_name]=ts_name_char
213
- h[:TS_service]=ret
214
- end
215
- end
216
- class TerrestrialDeliverySystemDescriptor < Descriptor
217
- def parse(h,bs,tag,descriptor_length)
218
- ret=[]
219
- area_code = bs.read 12 #bslbf
220
- guard_interval = bs.read 2 #bslbf
221
- transmission_mode = bs.read 2 #bslbf
222
- len=descriptor_length-2
223
- (len/2).times do
224
- frequency = bs.read 16 #uimsbf
225
- ret << frequency
226
- end
227
- h[:TDS]=[area_code,transmission_mode,ret]
228
- end
229
- end
230
- class PartialReceptionDescriptor < Descriptor
231
- def parse(h,bs,tag,descriptor_length)
232
- ret=[]
233
- (descriptor_length/2).times do
234
- service_id = bs.read 16 #uimsbf
235
- ret << service_id
236
- end
237
- h[:PartialReception]=ret
238
- end
239
- end
240
- class SystemManagementDescriptor < Descriptor
241
- def parse(h,bs,tag,descriptor_length)
242
- h[:tag] << :system_management
243
- #system_management_id 16 uimsbf
244
- #for (i=0;i <N;i++){
245
- # additional_identification_info 8 uimsbf 不要
246
- #}
247
- end
248
- end
249
- class ServiceListDescriptor < Descriptor
250
- def parse(h,bs,tag,descriptor_length)
251
- ret=[]
252
- (descriptor_length/3).times do
253
- service_id = bs.read 16 #uimsbf
254
- service_type = bs.read 8 #uimsbf
255
- ret << [service_id,service_type]
256
- end
257
- h[:service_list]=ret
258
- end
259
- end
260
- DescriptorTag={
261
- 0x4D => ShortEventDescriptor, #-----o---o n 0x4D 短形式イベント記述子*2
262
- 0x4E => ExtendedEventDescriptor, #-----o---o r 0x4E 拡張形式イベント記述子
263
- 0x54 => ContentDescriptor, #-----o---- r 0x54 コンテント記述子
264
- 80 => ComponentDescriptor, #-o---o---- r 0x50 コンポーネント記述子
265
- 196 => AudioComponentDescriptor, #-----o---- r 0xC4 音声コンポーネント記述子
266
- 0xC7 => DataContentDescriptor, #-----o---- r 0xC7 データコンテンツ記述子
267
- 214 => EventGroupDescriptor, #-----o---- r 0xD6 イベントグループ記述子
268
- #for SDT(地上波)
269
- 0x48 => ServiceDescriptor, #----o----- n 0x48 サービス記述子*2
270
- 207 => LogoTransmissionDescriptor,#----o----- r 0xCF ロゴ伝送記述子
271
- #for NIT(地上波)
272
- 0x40 => NetworkNameDescriptor, #--o------- n 0x40* ネットワーク名記述子*2
273
- 0x41 => ServiceListDescriptor, #--oo---o-- n 0x41* サービスリスト記述子*1
274
- 0xFA => TerrestrialDeliverySystemDescriptor,#--o------- n 0xFA* 地上分配システム記述子*1
275
- 0xFE => SystemManagementDescriptor, #-oo------- n 0xFE* システム管理記述子*1
276
- 224 => ServiceGroupDescriptor, #--o------- r 0xE0 サービスグループ記述子
277
- 0xCD => TSInformationDescriptor, #--o------- r 0xCD* TS 情報記述子
278
- 0xFB => PartialReceptionDescriptor, #--o------- j 0xFB* 部分受信記述子*1(ワンセグ)
279
- }
280
- DescriptorTag.default=Descriptor
281
- DescriptorTag.freeze
282
- end
283
-
284
- __END__
285
- SDT ->
286
- ->CommonDataTable ->
287
- ->EIT ->
288
-
289
- NIT -> tpid,onid,*:service_list :TS_name || *:network_name
290
-
291
-
292
- NIT(事業者情報)
293
- id,(tpid,onid),ts_name,remote_key
294
-
295
- SDT(サービス情報)
296
- id,(tpid,onid,sid),service_type,service_name,logo_id,logo_name
297
-
298
- EIT(番組情報)
299
- id,(tpid,onid,sid,eid),start,fin,title,desc,colspan
300
-
301
- CDT(ロゴ情報)
302
- id (logo_id),logo0,1,2,3,4,5
303
-
1
+ #! ruby
2
+ # -*- encoding: utf-8 -*-
3
+
4
+ module Ariblib
5
+ #記述子
6
+ class Descriptor
7
+ def initialize(h,bs,tag,length)
8
+ parse(h,bs,tag,length)
9
+ end
10
+ def parse(h,bs,tag,descriptor_length)
11
+ h[:tag] << tag
12
+ end
13
+ end
14
+
15
+ class ShortEventDescriptor < Descriptor
16
+ def parse(h,bs,tag,descriptor_length)
17
+
18
+ iso_639_language_code =bs.get3 #24 bslbf
19
+ event_name_length =bs.getc #8 uimsbf
20
+ event_name_char =Ariblib::String.new(bs,event_name_length).to_utf8
21
+ text_length =bs.getc #8 uimsbf
22
+ text_char =Ariblib::String.new(bs,text_length).to_utf8
23
+ h[:title]=event_name_char
24
+ h[:desc ]=text_char
25
+ end
26
+ end
27
+ class ExtendedEventDescriptor < Descriptor
28
+ def parse(h,bs,tag,descriptor_length)
29
+ descriptor_number =bs.read 4 #uimsbf
30
+ last_descriptor_number =bs.read 4 #uimsbf
31
+ iso_639_language_code =bs.get3 #24 bslbf
32
+ length_of_items =bs.getc #8 uimsbf
33
+ len=bs.pos+length_of_items*8
34
+ while bs.pos < len
35
+ item_description_length =bs.getc #8 uimsbf
36
+ item_description_char =Ariblib::String.new(bs,item_description_length).to_utf8
37
+ item_length =bs.getc #8 uimsbf
38
+ item_char =bs.str(item_length)
39
+ if item_description_length==0
40
+ (h[:verbose_pair].last)[1] += item_char
41
+ else
42
+ h[:verbose_pair] << [item_description_char,item_char]
43
+ end
44
+ #item_char =Ariblib::String.new(bs,item_length).to_utf8
45
+ #h[item_description_char]||=[]
46
+ #h[item_description_char] << item_char
47
+ #verbose << [item_description_char,item_char]
48
+ end
49
+ text_length =bs.getc #8 uimsbf
50
+ text_char =bs.str(text_length)
51
+ h[:verbose] += text_char
52
+ end
53
+ end
54
+ class ContentDescriptor < Descriptor
55
+ def parse(h,bs,tag,descriptor_length)
56
+ content_nibble_level_1=bs.read 4
57
+ content_nibble_level_2=bs.read 4
58
+ bs.pos+=descriptor_length-1
59
+ h[:content]=[content_nibble_level_1,content_nibble_level_2]
60
+ end
61
+ end
62
+ class ServiceDescriptor < Descriptor
63
+ def parse(h,bs,tag,descriptor_length)
64
+ service_type =bs.read 8 #uimsbf
65
+ service_provider_name_length =bs.read 8 #uimsbf
66
+ service_provider_name =Ariblib::String.new(bs,service_provider_name_length).to_utf8#bs.str(service_provider_name_length)
67
+ service_name_length =bs.read 8 #uimsbf
68
+ service_name =Ariblib::String.new(bs,service_name_length).to_utf8#bs.str(service_name_length)
69
+ h[:service_type]=service_type
70
+ h[:service_provider_name]=service_provider_name
71
+ h[:service_name]=service_name
72
+ end
73
+ end
74
+ class DataContentDescriptor < Descriptor
75
+ def parse(h,bs,tag,descriptor_length)
76
+ data_component_id = bs.read 16 #uimsbf
77
+ entry_component = bs.getc #8 uimsbf
78
+ selector_length = bs.getc #8 uimsbf
79
+ selector_byte = bs.str(selector_length)
80
+ num_of_component_ref = bs.getc #8 uimsbf
81
+ component_ref = bs.str(num_of_component_ref)
82
+
83
+ iso_639_language_code = bs.read 24 #bslbf
84
+ text_length = bs.getc #8 uimsbf
85
+ text_char = Ariblib::String.new(bs,text_length).to_utf8
86
+ h[:data_component]=text_char
87
+ end
88
+ end
89
+ class AudioComponentDescriptor < Descriptor
90
+ def parse(h,bs,tag,descriptor_length)
91
+ text_length = descriptor_length - 9#8 uimsbf
92
+ reserved_future_use = bs.read 4 #bslbf
93
+ stream_content = bs.read 4 #uimsbf
94
+ component_type = bs.getc #8 uimsbf
95
+ component_tag = bs.getc #8 uimsbf
96
+ stream_type = bs.getc #8 uimsbf
97
+ simulcast_group_tag = bs.getc #8 bslbf
98
+ es_multi_lingual_flag = bs.read 1 #bslbf
99
+ main_component_flag = bs.read 1 #bslbf
100
+ quality_indicator = bs.read 2 #bslbf
101
+ sampling_rate = bs.read 3 #uimsbf
102
+ reserved_future_use = bs.read 1 #bslbf
103
+ iso_639_language_code = bs.read 24 #bslbf
104
+ if (es_multi_lingual_flag == 1)
105
+ iso_639_language_code_2 = bs.read 24 #bslbf
106
+ text_length-= 3
107
+ end
108
+ text_char = Ariblib::String.new(bs,text_length).to_utf8
109
+ h[:audio_component]=text_char
110
+ end
111
+ end
112
+ class ComponentDescriptor < Descriptor
113
+ def parse(h,bs,tag,descriptor_length)
114
+ text_length = descriptor_length - 6#8 uimsbf
115
+ reserved_future_use = bs.read 4 #bslbf
116
+ stream_content = bs.read 4 #uimsbf
117
+ component_type = bs.getc #8 uimsbf
118
+ component_tag = bs.getc #8 uimsbf
119
+ iso_639_language_code = bs.read 24 #bslbf
120
+ text_char = Ariblib::String.new(bs,text_length).to_utf8
121
+ h[:component]=text_char
122
+ end
123
+ end
124
+ class EventGroupDescriptor < Descriptor
125
+ def parse(h,bs,tag,descriptor_length)
126
+ list=[]
127
+ #event_group_descriptor (){
128
+ group_type = bs.read 4 #uimsbf
129
+ event_count = bs.read 4 #uimsbf
130
+ event_count.times do
131
+ service_id = bs.read 16 #uimsbf
132
+ event_id = bs.read 16 #uimsbf
133
+ list <<[service_id,event_id]
134
+ end
135
+ if(group_type == 4 || group_type ==5)
136
+ len=(descriptor_length-1-event_count*4)/8
137
+ len.times do
138
+ original_network_id = bs.read 16 #uimsbf
139
+ transport_stream_id = bs.read 16 #uimsbf
140
+ service_id = bs.read 16 #uimsbf
141
+ event_id = bs.read 16 #uimsbf
142
+ end
143
+ else
144
+ len=(descriptor_length-1-event_count*4)
145
+ private_data_byte = bs.str len #uimsbf
146
+ end
147
+ h[:event_group]=[group_type,list]
148
+ end
149
+ end
150
+ class LogoTransmissionDescriptor < Descriptor
151
+ def parse(h,bs,tag,descriptor_length)
152
+ #h[:tag] << :digital_copy_control
153
+ logo_transmission_type = bs.read 8 #uimsbf
154
+ if(logo_transmission_type == 0x01)
155
+ reserved_future_use = bs.read 7 #bslbf
156
+ logo_id = bs.read 9 #uimsbf
157
+ reserved_future_use = bs.read 4 #bslbf
158
+ logo_version = bs.read 12 #uimsbf
159
+ download_data_id = bs.read 16 #uimsbf
160
+ h[:logo]=[logo_id,logo_version,download_data_id]
161
+ elsif(logo_transmission_type == 0x02)
162
+ reserved_future_use = bs.read 7 #bslbf
163
+ logo_id = bs.read 9 #uimsbf
164
+ h[:logo]=[logo_id]
165
+ elsif(logo_transmission_type == 0x03)
166
+ len=(descriptor_length-1)
167
+ logo_char = Ariblib::String.new(bs,len).to_utf8 #uimsbf
168
+ h[:logo_char]=logo_char
169
+ else
170
+ len=(descriptor_length-1)
171
+ reserved_future_use = bs.str len #bslbf
172
+ end
173
+ end
174
+ end
175
+ class ServiceGroupDescriptor < Descriptor
176
+ def parse(h,bs,tag,descriptor_length)
177
+ h[:tag] << :service_groupe
178
+ end
179
+ end
180
+ class DigitalCopyControlDescriptor < Descriptor
181
+ def parse(h,bs,tag,descriptor_length)
182
+ h[:tag] << :digital_copy_control
183
+ end
184
+ end
185
+ class NetworkNameDescriptor < Descriptor
186
+ def parse(h,bs,tag,descriptor_length)
187
+ network_name = Ariblib::String.new(bs,descriptor_length).to_utf8 #uimsbf
188
+ h[:network_name] = network_name
189
+ end
190
+ end
191
+ class TSInformationDescriptor < Descriptor
192
+ def parse(h,bs,tag,descriptor_length)
193
+ ret=[]
194
+ start_pos=bs.pos
195
+ remote_control_key_id = bs.read 8 #uimsbf
196
+ length_of_ts_name = bs.read 6 #uimsbf
197
+ transmission_type_count = bs.read 2 #uimsbf
198
+ ts_name_char = Ariblib::String.new(bs,length_of_ts_name).to_utf8 #uimsbf
199
+ transmission_type_count.times do
200
+ transmission_type_info = bs.read 8 #bslbf
201
+ num_of_service = bs.read 8 #uimsbf
202
+ num_of_service.times do
203
+ service_id = bs.read 16 #uimsbf
204
+ ret << service_id
205
+ end
206
+ end
207
+ len=descriptor_length-(bs.pos-start_pos)/8
208
+ #for (l = 0;l< N;l++) {
209
+ #reserved_future_use 8 bslbf
210
+ #}
211
+ h[:TS_remote_key]=remote_control_key_id
212
+ h[:TS_name]=ts_name_char
213
+ h[:TS_service]=ret
214
+ end
215
+ end
216
+ class TerrestrialDeliverySystemDescriptor < Descriptor
217
+ def parse(h,bs,tag,descriptor_length)
218
+ ret=[]
219
+ area_code = bs.read 12 #bslbf
220
+ guard_interval = bs.read 2 #bslbf
221
+ transmission_mode = bs.read 2 #bslbf
222
+ len=descriptor_length-2
223
+ (len/2).times do
224
+ frequency = bs.read 16 #uimsbf
225
+ ret << frequency
226
+ end
227
+ h[:TDS]=[area_code,transmission_mode,ret]
228
+ end
229
+ end
230
+ class PartialReceptionDescriptor < Descriptor
231
+ def parse(h,bs,tag,descriptor_length)
232
+ ret=[]
233
+ (descriptor_length/2).times do
234
+ service_id = bs.read 16 #uimsbf
235
+ ret << service_id
236
+ end
237
+ h[:PartialReception]=ret
238
+ end
239
+ end
240
+ class SystemManagementDescriptor < Descriptor
241
+ def parse(h,bs,tag,descriptor_length)
242
+ h[:tag] << :system_management
243
+ #system_management_id 16 uimsbf
244
+ #for (i=0;i <N;i++){
245
+ # additional_identification_info 8 uimsbf 不要
246
+ #}
247
+ end
248
+ end
249
+ class ServiceListDescriptor < Descriptor
250
+ def parse(h,bs,tag,descriptor_length)
251
+ ret=[]
252
+ (descriptor_length/3).times do
253
+ service_id = bs.read 16 #uimsbf
254
+ service_type = bs.read 8 #uimsbf
255
+ ret << [service_id,service_type]
256
+ end
257
+ h[:service_list]=ret
258
+ end
259
+ end
260
+ DescriptorTag={
261
+ 0x4D => ShortEventDescriptor, #-----o---o n 0x4D 短形式イベント記述子*2
262
+ 0x4E => ExtendedEventDescriptor, #-----o---o r 0x4E 拡張形式イベント記述子
263
+ 0x54 => ContentDescriptor, #-----o---- r 0x54 コンテント記述子
264
+ 80 => ComponentDescriptor, #-o---o---- r 0x50 コンポーネント記述子
265
+ 196 => AudioComponentDescriptor, #-----o---- r 0xC4 音声コンポーネント記述子
266
+ 0xC7 => DataContentDescriptor, #-----o---- r 0xC7 データコンテンツ記述子
267
+ 214 => EventGroupDescriptor, #-----o---- r 0xD6 イベントグループ記述子
268
+ #for SDT(地上波)
269
+ 0x48 => ServiceDescriptor, #----o----- n 0x48 サービス記述子*2
270
+ 207 => LogoTransmissionDescriptor,#----o----- r 0xCF ロゴ伝送記述子
271
+ #for NIT(地上波)
272
+ 0x40 => NetworkNameDescriptor, #--o------- n 0x40* ネットワーク名記述子*2
273
+ 0x41 => ServiceListDescriptor, #--oo---o-- n 0x41* サービスリスト記述子*1
274
+ 0xFA => TerrestrialDeliverySystemDescriptor,#--o------- n 0xFA* 地上分配システム記述子*1
275
+ 0xFE => SystemManagementDescriptor, #-oo------- n 0xFE* システム管理記述子*1
276
+ 224 => ServiceGroupDescriptor, #--o------- r 0xE0 サービスグループ記述子
277
+ 0xCD => TSInformationDescriptor, #--o------- r 0xCD* TS 情報記述子
278
+ 0xFB => PartialReceptionDescriptor, #--o------- j 0xFB* 部分受信記述子*1(ワンセグ)
279
+ }
280
+ DescriptorTag.default=Descriptor
281
+ DescriptorTag.freeze
282
+ end
283
+
284
+ __END__
285
+ SDT ->
286
+ ->CommonDataTable ->
287
+ ->EIT ->
288
+
289
+ NIT -> tpid,onid,*:service_list :TS_name || *:network_name
290
+
291
+
292
+ NIT(事業者情報)
293
+ id,(tpid,onid),ts_name,remote_key
294
+
295
+ SDT(サービス情報)
296
+ id,(tpid,onid,sid),service_type,service_name,logo_id,logo_name
297
+
298
+ EIT(番組情報)
299
+ id,(tpid,onid,sid,eid),start,fin,title,desc,colspan
300
+
301
+ CDT(ロゴ情報)
302
+ id (logo_id),logo0,1,2,3,4,5
303
+