ariblib 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6149d706fd012cbcce5bd14c61c8ba5fc39e6579
4
+ data.tar.gz: 657e53e9de56faff299e4285a58050eae90b0665
5
+ SHA512:
6
+ metadata.gz: 91518877edfa842d77bb631907299221b905121be88c8506e7aac7692885253573f0cdcda2922811d83ac33eb8015263f0999ebf7e37f6509eae8710df924726
7
+ data.tar.gz: 207f9a07dd5eae181e52316c62ecf70cf62618ee211052823b0a74c53e1d8217ac0d8b3b1e183cc8f4711973aecc28be79a79c1c4a16c9211959d41bfe144738
data/.gitignore ADDED
@@ -0,0 +1,13 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /vendor/
11
+
12
+ *.txt
13
+ debug_*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.7
4
+ before_install: gem install bundler -v 1.11.2
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ariblib.gemspec
4
+ gemspec
5
+ gem 'rspec'
6
+ gem 'rake'
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 nak
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # Ariblib
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/ariblib`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ ## Usage
6
+
7
+ TODO: Write usage instructions here
8
+
9
+ <!---
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ ```ruby
15
+ gem 'ariblib'
16
+ ```
17
+
18
+ And then execute:
19
+
20
+ $ bundle
21
+
22
+ Or install it yourself as:
23
+
24
+ $ gem install ariblib
25
+
26
+ ## Usage
27
+
28
+ TODO: Write usage instructions here
29
+
30
+ ## Development
31
+
32
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
33
+
34
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
35
+
36
+ ## Contributing
37
+
38
+ Bug reports and pull requests are welcome on GitHub at https://github.com/nak1114/ariblib. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
39
+ -->
40
+
41
+
42
+ ## License
43
+
44
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
45
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/ariblib.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'ariblib/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "ariblib"
8
+ spec.version = Ariblib::VERSION
9
+ spec.authors = ["nak1114"]
10
+ spec.email = ["naktak1114@gmail.com"]
11
+
12
+ spec.summary = %q{Implementation of ARIB STD B10}
13
+ spec.description = %q{It reads the TS format file , and outputs such as a program information .}
14
+ spec.homepage = "https://github.com/nak1114/ariblib"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
18
+ # delete this section to allow pushing this gem to any host.
19
+ #if spec.respond_to?(:metadata)
20
+ # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
21
+ #else
22
+ # raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
23
+ #end
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
+ spec.bindir = "exe"
27
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ["lib"]
29
+
30
+ spec.add_development_dependency "bundler", "~> 1.11"
31
+ spec.add_development_dependency "rake", "~> 10.0"
32
+ spec.add_development_dependency "rspec", "~> 3.0"
33
+ end
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "ariblib"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/lib/ariblib.rb ADDED
@@ -0,0 +1,14 @@
1
+ #! ruby
2
+ # -*- encoding: utf-8 -*-
3
+
4
+ require "ariblib/version"
5
+ require "ariblib/BitStream"
6
+ require "ariblib/String"
7
+ require "ariblib/Descriptor"
8
+ require "ariblib/ProgramSpecificInformation"
9
+ require "ariblib/EventInformationTable"
10
+ require "ariblib/TransportStreamFile"
11
+
12
+ module Ariblib
13
+ # Your code goes here...
14
+ end
@@ -0,0 +1,68 @@
1
+ #! ruby
2
+ # -*- encoding: utf-8 -*-
3
+
4
+ module Ariblib
5
+
6
+ #ビットストリーム
7
+ class BitStream
8
+ def initialize(buf)
9
+ @bitstream_buffer=buf
10
+ @bitstream_postion=0
11
+ end
12
+ def str(byte)
13
+ ret=@bitstream_buffer.byteslice(@bitstream_postion/8,byte)
14
+ @bitstream_postion+=byte*8
15
+ ret
16
+ end
17
+ def getc
18
+ len=@bitstream_postion/8
19
+ @bitstream_postion+=8
20
+ ret =@bitstream_buffer.getbyte(len )
21
+ ret
22
+ end
23
+ def gets
24
+ len=@bitstream_postion/8
25
+ @bitstream_postion+=8*2
26
+ ret =@bitstream_buffer.getbyte(len ) << 8
27
+ ret|=@bitstream_buffer.getbyte(len+1)
28
+ ret
29
+ end
30
+ def get3
31
+ len=@bitstream_postion/8
32
+ @bitstream_postion+=8*3
33
+ ret =@bitstream_buffer.getbyte(len ) << 16
34
+ ret|=@bitstream_buffer.getbyte(len+1) << 8
35
+ ret|=@bitstream_buffer.getbyte(len+2)
36
+ ret
37
+ end
38
+ def read(size)
39
+ pos =@bitstream_postion>>3
40
+ modd=@bitstream_postion&0x07
41
+ @bitstream_postion+=size
42
+ mod =((~(@bitstream_postion)).succ)&0x07
43
+ poss=((size+modd+7)>>3)
44
+ tmp=0
45
+ poss.times do |i|
46
+ tmp<<=8
47
+ tmp|=@bitstream_buffer.getbyte(pos+i)
48
+ end
49
+ tmpd = (tmp>>mod) & ((1<<size)-1)
50
+ return tmpd
51
+ end
52
+ def lest
53
+ @bitstream_buffer.size*8-@bitstream_postion
54
+ end
55
+ def buf
56
+ @bitstream_buffer
57
+ end
58
+ def buf=(a)
59
+ @bitstream_buffer=a
60
+ end
61
+ def pos
62
+ @bitstream_postion
63
+ end
64
+ def pos=(a)
65
+ @bitstream_postion=a
66
+ end
67
+ end
68
+ end
@@ -0,0 +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
+