Saturday, January 28, 2012

Как убрать дубли каналов НТВ+ в MythTV

Думаю многие сталкивались с большим количеством дублей каналов НТВ+. Часть дублей - это каналы пакета НТВ+ Лайт, которые идут с транспондера с частотой 12418. Поэтому либо удалите этот транспондер, либо сделайте каналы с этого транспондера невидимыми. Остальные дубли убрать немного сложнее, так как они находятся на одном трансподере. Внешне каналы вроде ничем не отличаются, поэтому пришлось воспользоваться dvbsnoop, чтобы найти разницу. Вот пример двух каналов с транспондера с частотой 12476. Как видите, название каналов одинаковые, а вот отличаются они Service Type. У канала с SID 20614 это 1, что значит обычный SD канал в MPEG2. Канал с SID 20653 имеет Service Type 0x16, что по попросту значит, что это MPEG4 (h264) в SD-качестве.
Service_id: 20614 (0x5086) [= --> refers to PMT program_number]
reserved_1: 63 (0x3f)
EIT_schedule_flag: 1 (0x01)
EIT_present_following_flag: 1 (0x01)
Running_status: 4 (0x04) [= running]
Free_CA_mode: 1 (0x01) [= streams [partially] CA controlled]
Descriptors_loop_length: 30 (0x001e)

DVB-DescriptorTag: 83 (0x53) [= CA_identifier_descriptor]
descriptor_length: 2 (0x02)
CA_system_ID: 1280 (0x0500) [= France Telecom (Viaccess)]

DVB-DescriptorTag: 72 (0x48) [= service_descriptor]
descriptor_length: 24 (0x18)
service_type: 1 (0x01) [= digital television service]
service_provider_name_length: 5 (0x05)
service_provider_name: "HTB+" -- Charset: Latin/Cyrilic alphabet
service_name_length: 16 (0x10)
Service_name: "Cartoon Network" -- Charset: Latin/Cyrilic alphabet


Service_id: 20653 (0x50ad) [= --> refers to PMT program_number]
reserved_1: 63 (0x3f)
EIT_schedule_flag: 1 (0x01)
EIT_present_following_flag: 1 (0x01)
Running_status: 4 (0x04) [= running]
Free_CA_mode: 1 (0x01) [= streams [partially] CA controlled]
Descriptors_loop_length: 30 (0x001e)

DVB-DescriptorTag: 83 (0x53) [= CA_identifier_descriptor]
descriptor_length: 2 (0x02)
CA_system_ID: 1280 (0x0500) [= France Telecom (Viaccess)]

DVB-DescriptorTag: 72 (0x48) [= service_descriptor]
descriptor_length: 24 (0x18)
service_type: 22 (0x16) [= advanced codec SD digital television service]
service_provider_name_length: 5 (0x05)
service_provider_name: "HTB+" -- Charset: Latin/Cyrilic alphabet
service_name_length: 16 (0x10)
Service_name: "Cartoon Network" -- Charset: Latin/Cyrilic alphabet

Я попробовал пару каналов с Service Type 0x16, но они все равно вещаются в MPEG2. По-видимому НТВ хочет постепенно перевести все вещание в MPEG4 и проводит тестирование. Это вполне логично, так как позволит вещать большее количество каналов при тех же затратах на аренду транспондеров.
Но MythTV не хранит Service Type в базе данных, поэтому убрать дубли по этому критерию простым способом не удастся. Единственное, что я заметил, что дубли обычно располагаются в конце SDT и можно скрывать каналы с максимальным SID. Для этого достаточно выполнить следующий SQL-update для БД MythTV:

update channel set visible=false
where chanid in (select t.id from(select max(chanid) as id from channel group by name,mplexid having count(*)=2) as t);

Думаю, что для тех, кто смог установить и настроить MythTV моего описания будет достаточно, а если нет - задавайте вопросы.