Перейти к содержимому


- - - - -

mgcamd - настройка


  • Please log in to reply
6 ответов в этой теме

#1 CineallianceHD

CineallianceHD
  • saт az


  • 268 Сообщений:
  • {lang:macro__reply}

Размещено 01 Октябрь 2010 - 22:33

Файлы конфигурации MGCAMD


Все файлы которые нужны для правильной работы mgcamd должны быть в папке /var/keys и ни в какой другой. Также обратите внимание, что заглавные/прописные буквы в именах файлов должны быть как указано ниже, поскольку для Linux это имеет значение. Все файлы - это обычные текстовые файлы, которые можно редактировать любым редактором, который сохраняет файлы как обычный текст (plain text).

Перво-наперво обратим внимание на следующие файлы настроек:

    * /var/keys/AutoRoll.Key
    * /var/keys/SoftCam.Key


В них хранятся ключи для чисто эмуляционной части mgcamd. Для работы с сервером шары эти файлы НЕ НУЖНЫ. Если поместить в них правильные ключи, то можно открыть некоторые каналы со "взломанными" кодировками вообще без шары. Подробнее об этих файлах ниже, в отдельном разделе по эмуляции.

Супер ценный совет:
Если вы собрались использовать файл SoftCam.Key для одних каналов и шару для других, убедитесь, что в SoftCam.Key НЕТ ключей на те каналы, которые вы собираетесь шарить. mgcamd всегда смотрит сначала в SoftCam.Key и если находит там ключ (хоть и устаревший) он будет использовать его, и только его. Естественно, что если ключ устаревший, то ничего работать не будет, даже если у вас есть коннект на сервер, где все работает. Поэтому очень рекомендую сначала временно убрать SoftCam.Key из /var/keys (или переименовать его в файл с другим расширением), настроить все остальное, убедиться, что всё работает как нужно, а потом уже смотреть, что можно дополнительно открыть, используя SoftCam.



Для собственно шары по сети понадобятся файлы:

    * /var/keys/mg_cfg
    * /var/keys/newcamd.list
    * /var/keys/ignore.list
    * /var/keys/priority.list
    * /var/keys/replace.list


Если у вас остались ещё какие-то файлы в папке /var/keys и вы больше не пользуетесь никаким другим софтом, кроме mgcamd - можете все остальное переместить в другое место, чтобы не мозолило глаза. Итак, в файле mg_cfg содержится основная системная конфигурация mcgamd, типа настроек таймаутов при работе с сетью, опции отладки и лог-файлов. В файле newcamd.list прописываются параметры для коннекта на сервер(ы), то есть сюда заносятся все параметры, полученные вами от конкретного провайдера. Файлы ignore.list, priority.list и replace.list позволяют произвести "тонкую настройку", параметров, чтобы каналы которые идут в нескольких кодировках открывались быстрее. Без этих трёх последних файлов можно обойтись если вас устраивает скорость открывания кодированных каналов. Этих трех файлов часто вообще не существует после установки новой прошивки (или они пустые), и их при желании нужно создавать с нуля самому (см. ниже).

Ценный совет:
Если содержимое файла mg_cfg, можно сказать, стандартно с очень малыми изменениями, то содержимое остальных файлов целиком зависит от принимаемых пакетов и настроек на отдельно взятом сервере. Поэтому, если у кого-то есть "100% рабочие" файлы конфигурации, то это не значит, что они подойдут лично вам на 100%. Лучше всего понимать самому, что именно в этих файлах написано и какой смысл это имеет.



Разберём теперь главный конфигурационный файл mg_cfg. Каждая строка, начинающаяся с символа # в э том файле - это комментарий, который только для вас. Программа эти строки игнорирует. Параметры, считываемые программой при запуске имеют следующий вид:

буква: { цифра } дополнительные параметры


Буква означает тот или иной параметр, как описано ниже. Цифра означает одно из возможных значений параметра. Дополнительные параметры должны присутствовать только там, где это необходимо.

Вот пример этого файла (без комментариев, которые обычно занимают в 10 раз больше места чем сами параметры). Реально, вам (возможно) понадобится подкрутить параметры B, L, К и N. Всё остальное можно смело ставить как здесь. Подробное описание всех параметров смотрите сразу ниже, а отдельную информацию по настройке параметров К и N - немного дальше, в разделе о логах и оптимизации mgcamd.

mg_cfg:
Spoiler

Если интересно, что означает каждый параметр, вот переведенный на русский язык файл-шаблон (плюс мои комментарии):
Spoiler


Второй файл, который совершенно необходим для шаринга: newcamd.list. Он достаточно прост в своем синтаксисе - в нем указывается на какой сервер нужно коннектиться, с каки именем, паролем и по какому порту. Естественно, исходя из имени файла, всё это для коннекта на сервер(ы) по протоколу newcamd. Не пытайтесь вписать сюда серверы, которые не принимают клиентов по протоколу newcamd! Комментарии в файле newcamd.list, так же как и ранее, начинаются со знака #.

ВНИМАНИЕ:
Строки с конфигурацией серверов в этом файле должны начинаться с CWS=.... То есть, не должно быть никаких других символов перед CWS, даже пробелов! Иначе mgcamd просто проигнорирует такие строки.



Вот пример:
# как часто (в секундах) проверять сервер шары на признаки жизни. Полезно, если долго сидите на некодированном канале.
CWS_KEEPALIVE = 300

# никаких других параметров в этом файле больше не нужно, кроме указания серверов шары ниже!

# каждая последущая строка описывает ваш коннект на тот или иной пакет шаринга.
# если у вас несколько разных пакетов, на каждый пакет идет своя строчка конфигурации.
# даже если сервер один и тот же, на каждый пакет может быть свой отдельный порт, поэтому
# нужно прописать всё отдельно. Вся информация от провайдера. Формат строки следующий:
# CWS = адрес-сервера порт-сервера логин-биллинга пароль-биллинга 14-цифр-ключа-шифрования
# для примера, у вас имеется доступ к двум пакетам по разным портам, значит у вас будет 2 строки
# (вcе параметры ниже ненастоящие, вам нужно подставить вашу личную инфу:

CWS = ip сервера порт логин пароль 0102030405060708091011121314 # пакет нтв+
CWS = ip сервера порт логин пароль 0102030405060708091011121314 # пакет триколор

Spoiler


В принципе, по-минимуму - это всё. Перегружайте ресивер и если у вас правильно настроена домашняя сеть, выход в Интернет и настройки файлов приведенных выше совпадают с настройками на сервере, то всё должно заработать.

Можно пойти дальше и настроить mgcamd самым оптимальным образом. Особенно, если вы заметите, что некоторые каналы открываются гораздо дольше других. Для этого нам понадобятся файлы ignore.list, [b]priority.list
и [b]replace.list
. Но для того, чтобы понять что туда писать, лучше сначала понять что именно происходит при работе mgcamd. Поэтому сначала запустим всё как есть без этих файлов, и посмотрим в лог, где мы найдем информацию, которая поможет нам создать эти три файла. Как читать лог описано ниже. После этого описано как настроить файлы ignore.list, priority.list и replace.list.

#2 CineallianceHD

CineallianceHD
      Автор темы
  • saт az


  • 268 Сообщений:
  • {lang:macro__reply}

Размещено 01 Октябрь 2010 - 22:43

Настройка эмуляции с использованием SoftCam.Key



Как уже упоминалось выше, эмулятор mgcamd может брать ключи из файлов /var/keys/AutoRoll.Key и /var/keys/SoftCam.Key

Для шары и работы по сети эти файлы не нужны, но если поместить в них правильные ключи, то можно открыть некоторые каналы со "взломанными" кодировками. Правда таких каналов становится всё меньше и меньше, потому как все провайдеры постепенно уходят со сломанных систем кодирования. Некоторые провайдеры иногда перестают менять ключи каждые несколько секунд и используют один и тот же неменяющийся ключ (именуемый "статика"). Обычно статика не живет долго - считанные часы, в лучшем случае - дни.

Где брать свежие файлы? Мест полно. Только сразу учтите, не надо качать всю ерунду подряд. Нужны только эти два файла и никакие больше! Не замусоривайте свою директорию конфигурации неизвестно чем.

Кроме того, даже в этих файлах, которые вы стянете из Интернета вам не понадобится 99.9% строк. Лучше всего будет найти ключи именно для тех каналов, которые вам нужны, а всё остальное выкинуть. Ключи меняются нечасто: на некоторые каналы около раза в месяц, на некоторые, вообще годами не меняются.

Что открывается? Открывается статика (в основном Виаксесс), а также кодировки БИСС, Виаксесс 2.3, Награвижн 2 и Криптоворкс (последние два только на паре пакетов со статическим мастер-ключом). Такие каналы есть, на момент написания, на спутниках 75E, 42E, 23.5E, 13E, 5Е, 1W, 4W, 5W. Легче всего найти каналы по кодировкам на сайте kingofsat.net. Выбираете интересуемый спутник и систему кодирования и получаете список каналов. Правда, там нет информации по спутникам восточнее, чем 75E, 80Е и 90Е - их нужно смотреть на lyngsat.com и ему подобных.

В основном, все ключи прописываются в файле SoftCam.Key. Файл AutoRoll.Key нужен только для кодировки Nagra2 - в нем хранятся не основные ключи, а дополнительные, неменяющиеся хэши ключей RSA. Впрочем, если вы только не поклонник немецких и английских каналов на спутнике 23.5E или румынского пакета DigiTV на 1W, то можете про этот файл вообще забыть.

Все строки в SoftCam.Key имеют одинаковый формат:
буква код номер ключ


буква обозначает кодировку (N=Nagra, V=Viaccsess, W=Cryptoworks, S=Seca/Mediaguard, F=BISS)
код - идентификатор провайдера и (иногда) карты
номер - порядковый номер ключа для данного канала
ключ - собственно, сам ключ.

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

Ключи могут идти парами или по одиночке, например пара ключей Награ2:

Код
N 1101 00 12345678901234567890123456789012 # первый Награ2 ключ
N 1101 01 98765432109876543210987654321098 # второй Награ2 ключ



Самая большая ошибка при использовании файла SoftCam.Key - это то, когда люди бездумно загружают с Интернета всякий хлам в этот файл, а потом удивляются, почему не работает шара. Повторю ещё раз совет из раздела выше:

Цитата
Если вы собрались использовать файл SoftCam.Key для одних каналов и шару для других, убедитесь, что в SoftCam.Key НЕТ ключей на те каналы, которые вы собираетесь шарить. mgcamd всегда смотрит сначала в SoftCam.Key и если находит там ключ (хоть и устаревший) он будет использовать его, и только его. Естественно, что если ключ устаревший, то ничего работать не будет, даже если у вас есть коннект на сервер, где все работает. Поэтому очень рекомендую сначала временно убрать SoftCam.Key из /var/keys (или переименовать его в файл с другим расширением), настроить все остальное, убедиться, что всё работает как нужно, а потом уже смотреть, что можно дополнительно открыть, используя SoftCam.



Особая заметка по ключам BISS. Бывает, что некоторые каналы в кодировке BISS не открываются хоть и прописан правильный ключ и другие BISS каналы работают нормально. Проблема заключается в следующем. Обычно ключи в софткаме должны быть привязаны к конкретному провайдеру. Для привязки используется второе число в строке с ключом, обозначающее Provider ID для таких кодировок как Viaccess или Nagra или CardID+ProviderID для Cryptoworks. Для BISS каналов такая последовательность неприменима, так как нет ни конкретной "карты", ни ID провайдера (все Биссы одинаковые, хоть в Африке, хоть в Европе). Поэтому, для привязки конкретного ключа к конкретному каналу обычно используют "порядковый номер" канала на транспондере (этот номер известен как SID) . Всё бы ничего, если речь идет об одном и том же транспондере, где не может быть двух разных каналов с одним и тем же SID. А как быть если каналы вещают с разных транспондеров или даже с разных спутников, и у них по несчастному совпадению один и тот же SID? Если прописать два разных ключа с одинаковым SID, то mgcamd возьмет только первый попавшийся и проигнорирует второй ключ. В результате, из двух BISS каналов будет работать только какой-то один.

Что же делать? Привязываться к каналу по другим параметрам!

Для правильной привязки определенного ключа BISS к определённому каналу нужно знать не только SID, но и также VideoPID (идентификатор видео-дорожки для этого канала). Шансы того, что у двух отдельно взятых каналов совпадут оба параметра ничтожно малы. Проще всего показать процесс на наглядном примере. Для примера возьмем спутник 42E и канал Rustavi2, который иногда закрывают во время футбола кодировкой BISS.

1) Находим на сайте Lyngsat нужный спутник и канал (http://www.lyngsat.com/turk42.html)
2) Видим, что у канала Rustavi2 на сайте Lyngsat прописаны следующие параметры SR-FEC-SID-VPID: 2500 - 5/6 - 103 - 308. Нам как раз понадобятся два последних числа, так как это и есть нужные SID и VideoPID (или VPID).
3) Нужные нам числа 103 и 308 даны на сайте в десятиричной системе исчисления, а софткам понимает только шестнадцатиричную. Поэтому открываем обыкновенный калькулятор в Windows, выбираем режим "Scientific/Научный" и переводим оба числа в шестнадцатиричную систему. Получаем 103(dec) = 67(hex) и 308(dec) = 134(hex).
4) "Добиваем" каждое из полученных двух чисел нулями до 4 разрядов: 0067 и 0134. Получаем наш код привязки, который всегда должен быть восьмизначным: 00670134.
5) Для каждого из каналов BISS в SoftCam.Key должно быть две строки (с одинаковым ключом, но с разными ID: 00 и 01), поэтому финальный вариант для этого канала будет выглядеть в софткаме так:


F 00670134 00 XXXXXXXXXXXXXXXX Rustavi2 (42E)
F 00670134 01 XXXXXXXXXXXXXXXX Rustavi2 (42E)



Естественно, что XXXXXX нужно заменить на реальный ключ. Ключи всегда следует писать без пробелов между цифрами и в шестнадцатиричной системе (на некоторых сайтах публикуют ключи в десятиричной системе)

#3 CineallianceHD

CineallianceHD
      Автор темы
  • saт az


  • 268 Сообщений:
  • {lang:macro__reply}

Размещено 01 Октябрь 2010 - 22:50

Как снять лог от mgcamd?


Лог - это первое, что нужно исследовать, если что-то не работает. Лог - это первое, что от вас попросят на форуме, если вы захотите помощи. Поэтому, крайне важно знать как правильно и эффективно снять лог с ресивера.

Как уже было написано в примере конфига mg_cfg выше - есть 2 способа увидеть лог. Либо заставить mgcamd писать в файл прямо на самом ресивере, либо заставить mgcamd слать тот же лог по сети, скажем на ваш обычный компьютер.

В первом случае не понадобится никакого дополнительного софта, и для просмотра лога можно просто зайти на ресивер через Telnet и наблюдать за работой mgcamd в реальном времени, выводя содержимое файла на экран Linux командой tail -f имя-лога. Хотя это кажется самым log-ичным способом, это не совсем так. Это неудобно, потому как во-первых, нужно коннектиться к ресиверу и работать с командной строкой Linux, а во-вторых, лог будет все время расти (хотя и медленно). Если его своевременно не стирать, то в один день просто забъёт всю флеш-память, а это, мягко говоря, лишние хлопоты.

Гораздо более удобней просто напросто наблюдать за логом с компьютера, который находится в локальной сети с ресивером, без каких либо логинов в сам ресивер.
Для этого нужно просто установить параметр L: { 01 } как показано выше в примере mg_cfg и запустить на вашем компьютере бесплатную программку (просмотрщик сообщений в формате syslog), которая будет принимать сообщения от mgcamd и выводить их в виде лога на экране компьютера.

Бесплатных программ для этой цели есть несколько.
На большинстве сайтов рекомендуют древнюю программу 3CSyslog, которую можно взять здесь --->>>Прикрепленный файл 3CSyslog.zip (834,18 Кб, Количество загрузок 8) Прикрепленный файл 3CSyslog_Portable.zip (274,58 Кб, Количество загрузок 3) .
Архив весит чуть меньше мегабайта и всё работает, в принципе ок.
Хотя слишком уж эта программа древняя, без минимальных дополнительных функций. А самый главный её минус в том, что она показывает все сообщения "задом наперед", то есть самые новые сообщения всегда в самой верхней строке.
Обычно это удобно, но вот в случае с mgcamd это как раз совсем неудобно (по крайней мере для тех, кто привык смотреть в обычный лог mgcamd). mgcamd выплёвывает в лог по нескольку сообщений на каждую смену ECM/CW и этот "блок" сообщений отображается "задом наперед", что может затруднить понимание происходящего.

Рекомендую попробовать другую софтину, написанную нашим человеком, chewbacca c форума sat-expert.com. Для работы, правда, требуется очень немаленькая (232 МБ) библиотека .Net 3.5 SP1, но работает программа ГОРАЗДО лучше и совершенно бесплатно. Можно взять софт здесь: http://traysyslog.blogspot.com/.

Принцип действия этого типа логирования очень простой. mgcamd посылает текстовые сообщения (используя протокол UDP) на IP адрес и порт, который вы установили в параметре L: { 01 } в файле /var/keys/mg_cfg (к слову, стандартный порт для протокола Syslog - 514). Программка на вашем компьютере принимает сообщения с этого порта и выводит на экран. Если программка на компьютере не запущена, сообщения просто будут "растворяться" вникуда без побочных эффектов для ресивера или вашего компьютера (это свойство протокола UDP). Так что такую настройку можно сделать постоянной и просто включать на компьютере Tray Syslog, если понадобится посмотреть отчего там вдруг не работает (или насколько правильно работает) mgcamd.

Если вы только поменяли свой mg_cfg и прописали туда IP своего компьютера для отсылки лога, нужно перезапустить mgcamd (если не знаете как это сделать, просто перезагрузите ресивер).

материал gomel-sat Автор "дядя Фёдор"

Сообщение изменено: CineallianceHD (09 Ноябрь 2010 - 21:12)
добавил : 3CSyslog_Portable


#4 CineallianceHD

CineallianceHD
      Автор темы
  • saт az


  • 268 Сообщений:
  • {lang:macro__reply}

Размещено 02 Октябрь 2010 - 09:47

Что можно увидеть из лога?



Увидеть можно очень много! Практически всё!

Для начала, собственно, старт mgcamd. В этом примере мы сделаем вид, что у нас прописано два разных сервера в newcamd.list. Первый сервер называется server1.com и у него порт 1234, второй - server2.com с портом 5678. Для логина на оба сервера используется имя username (пароль в логе не отображается).


Итак, пример лога:

Spoiler



Отсюда уже сразу видно много интересного. Во-первых, видны типы карт, которые шарятся (число сразу за "caid"). CAID - это идентификатор карты, а точнее идентификатор системы защиты, которую использует карта. Вот список наиболее часто используемых идентификаторов:

Код
01xx = Mediaguard/Seca
05xx = Viaccess
06xx = Irdeto
09xx = NDS Videoguard
0Bxx = Conax
0Dxx = CryptoWorks
17xx = BetaCrypt
18xx = NagraVision
2600 = BISS
4Axx = DreCrypt  (который mgcamd обзывает как @Sky в своих логах)



Там где стоит xx может быть любое число, которое может обозначать версию системы защиты или, скажем так, разновидность этой системы защиты, иногда заточенную под определенную вещательную компанию.

Из примера выше видно, что мы подключились к двум серверам. Первый шарит несколько карточек с кодировкой Viaccess (потому что CaID 0500 начинается с 05xx). Также видно какие именно провайдеры карт шарятся - их 4 штуки. Это становится ясно из поля Idents, которое перечисляет все идентификаторы провайдеров Viaccess.

В чем смысл понятия "провайдер" и "Provider ID" (Ident) в этом контексте? Систем кодирования не так уж много (см. список выше для примера), но у каждой системы защиты есть разновидности (различные версии одной и той же системы защиты, различные виды карт определенных пакетов каналов и т.д.) Чтобы различать между такими картами, помимо основного CAID вводится еще один идентификатор, который обозначает уже вполне конкретную карту с конкретным пакетом каналов. Скажем так, "карта плюсовиков последнего выпуска", а не просто "карта Виаксесс". Впрочем, для некоторых кодировок провайдер (Ident) всегда равен 00000, и там обходятся только CAID (таким образом работают Видеогард и Конакс, например).

Для Ирдето вместо провайдеров или идентов показывают так называемые ChID (чиды). Видно, что второй сервер шарит карту в кодировке Ирдето (CaID 0654 начинается с 06xx). Выглядит так, что как будто бы тоже несколько провайдеров с идентами 0, 1, 2 и 3, но это только одна карта. Это особенность кодировки Irdeto (и Betacrypt, которая основана на Irdeto). Эти иденты называются чидами (ChID) и действуют также как и ProvID у других кодировок. Разница лишь только в том, что одна и та же Irdeto карта может иметь несколько ChID, а другие кодировки обычно имеют только один ProvID.

Говоря проще, отдельная карта всегда идентифицируется двумя числами: CaID и ProvID. И бывает нередко такое, что у одной и той же компании есть несколько разных карт на одни и те же каналы (например, выпущенные в разное время карты или карты на новые пакеты каналов).

Нужные комбинации CaID:ProvID для интересующих вас каналов всегда можно взять на сервере.

Итак, чтобы подвести предварительный итог, получается, что при включении кодированного канала, у него должен совпасть CaID:ProvID (или CaID:ChID для Irdeto) с теми, что прислал сервер при подключении к нему. Только в этом случае на сервер пойдет запрос "ключа". В такой ситуации mgcamd отошлёт на сервер так называемую последовательность Entitlement Control Message или ECM. Если на сервере всё впорядке, то он должен ответить на такой запрос последовательностью, которая называется Control Word или CW. Если вы получаете правильный код CW, то канал открывается. В зависимости от системы кодирования интервал смены ECM (живучесть ключа) может быть от 2-3 секунд до целой минуты. После чего повторяется ECM запрос и ответ CW и так далее.

Посмотрим как это выглядит в логе (важные цифры выделены):


[mg0] stoping camd..
[mg0] service 2EA index 0 pmt pid 0 (253)
ECM: CaID: 0x0500 -> CaPID: 0x040C ProvID: 022B00
ECM: CaID: 0x0654 -> CaPID: 0x07F4 ProvID: 000000
[mg1] service 2EA already started with index 0
[mg1] service 2EA index 1 pmt pid 0 (254)
[mg0] No viaccess key(s) found for id 22B00 keynr 08
[mg0] network can't decode
[mg0] pid 0x040C failed to decode.
[mg0] No irdeto key(s) found for id 0 keynr 00
[mg0] -> ECM to newcamd server2.com:5678
[mg0] <- CW from newcamd server2.com:5678 (481ms)
[mg0] 481 msec -- Wed Jun 10 01:32:49 2009
===== Irdeto ECM on CaID 0x0654, pid 0x07f4 ======
prov: 000000
cw0:0 A6 1E D2 96 57 62 A4 5D
cw1:0 32 2C 22 80 FA AB BA 5F
[mg0] irdeto using chid 0001 version C3



Пояснение к происходящему, где важна практически каждая строка.
Первые две строки - это стандартное сообщение при переключении канала. У каждого канала есть свой Service ID (SID), который уникален в пакете каналов. Из второй строки видно, что мы включили канал, у которого SID равен 2EA.
Дальше имеем две строки, начинающихся с ECM. В этих строках информация о кодировании канала (если канал открыт, то вы никаких ECM не увидите). В нашем примере мы включили кодированный канал, и открывается он либо картой Viaccess (CaID:500, ProvID:022B00) либо картой Irdeto (CaID:654, ProvID:000000). Каждой комбинации CaID и ProvID на каждом отдельно взятом канале присваевается свой уникальный идентификатор: PID. В нашем случае получается, что PID 040C "олицетворяет" SID=02EA, взятый вместе с CAID=0500, вместе с ProvID=022B00. Точно также, PID 07F4 обозначает SID=02EA вместе с CAID=0654 и ProvID=000000.

Посмотрим теперь в начало лога, где перечислены все CaID и ProvID, которые нам предлагают оба сервера. Есть ли там хотя бы одна из двух комбинаций CaID:ProvID, которая подходит ко включенному каналу? Есть одна, это - 654:000000, то есть то, что ответил нам server2.com при подключении к нему. К сожалению, у нас нет доступной карты Viaccess 0500:022B00, но mgcamd этого (ещё) не знает, поэтому он будет идти по списку кодировок, пока не наткнется на ту, которая подходит.

Из чего следует, что сначала мы смотрим, нет ли у нас уже ключа Viaccess (в кэше или в локальном файле SoftCam.Key): "No viaccess key(s) found for id 22B00 keynr 08". То есть, ключа нет. Дальше мы смотрим, не доступен ли ключ по сети. К сожалению, как мы уже установили, для Viaccess - у нас нет подходящего сервера. Поэтому мы получаем сообщение в логе "network can't decode". Теперь, когда все попытки исчерпаны mgcamd рапортует о том, что нам не удалось открыть канал, используя PID 040С (то есть комбинацию 0500:022B00). Это сообщение "pid 0x040C failed to decode", то есть канал не удалось открыть по кодировке Viaccess.

Переходим ко второму PID. Опять смотрим, нет ли у нас уже ключа Irdeto (в кэше или в локальном файле SoftCam.Key): "No irdeto key(s) found for id 0 keynr 00" - ключа нет. Теперь мы смотрим, доступен ли ключ по сети. У нас есть подходящая комбинация, объявленная сервером sever2.com при логине. Поэтому, следующая строка - это посылка ECM-запроса на сервер server2.com. Далее виден ответ от сервера с кодом CW. Ответ пришел за 481мс, на что стоит обратить внимание при проблемах (об этом ниже). Последние 5 строк - подтверждение проделанной работы по запросу на сервер. Показаны кодировка, которая окрылась (Ирдето), идентификатор карты (CaID), идентификатор кодировки (PID), идентификатор провайдера (ProvID), сама последовательность CW0 и CW1, то есть "ключик" к каналу, полученный от сервера и используемый этим каналом ChID (это дело присутствует только у Ирдето). Дальше всё повторяется снова и снова, каждый раз когда меняется ECM.

#5 CineallianceHD

CineallianceHD
      Автор темы
  • saт az


  • 268 Сообщений:
  • {lang:macro__reply}

Размещено 02 Октябрь 2010 - 10:46

Как увидеть и распознать проблему, используя лог


Рассмотрим теперь проблемные ситуации, когда все должно вроде бы работать, но не работает. Или работает, но не так как хотелось бы. Во первых, нужно убедиться, что mgcamd вообще для начала пытается подсоединиться к серверу при начальном запуске (обычно во время старта ресивера). Это должно выглядеть так:

Цитата
[config] newcamd route = login:server1.com:1234
[newcamd] Connecting to server1.com:1234...


Этих строк должно быть по две на каждую строку "CWS=" из newcamd.list. Если таких строк нет, то проверяйте ваш файл newcamd.list. Проверьте, чтобы файл находился там, где ему положено и имел правильный формат.

Во-вторых, по какой угодно причине может отсутствовать доступ к серверу. Либо из-за проблем с Интернетом (включая неверные настройки вашей домашней сети), либо из-за глобальных проблем на сервере, либо из-за проблем лично с вашим логином (не на тот сервер или порт коннектитесь, отключены за неуплату или по причине бана из-за нарушения правил пользования). Во всех этих случаях вы получите в логе нечто вроде такого:

Цитата
[config] newcamd route = login:server1.com:1234
[newcamd] Connecting to server1.com:1234...
[newcamd] Connection to server1.com:1234 failed (47ms)




Чтобы убедиться, что связь с сервером есть, нужно зайти на ресивер по Telnet и дать команду ping server1.com, где server1.com нужно поменять на имя или IP адрес вашего сервера. Остановить команду можно, нажав CTRL+C. Если ответа не придет, то нужно смотреть что у вас с Интернетом (в крайнем случае, если пингуются другие адреса, кроме вашего сервера, то скорее всего сервер мертв). Если ответ есть, то нужно выяснить почему вас сервер не пускает (не тот логин или пароль; не тот сервер, если их несколько у провайдера; повторный логин одновременно с уже активным логином, бан на сервере и т.д.)

В-третьих, допустим все заработало, вы смотрите канал, и вдруг, ни с того ни с сего картинка и звук останавливаются и продолжаются чере несколько секунд (или через несколько десятков секунд). Открываем лог, а там что-то вроде такого:

Цитата
===== @Sky ECM on CaID 0x4AE1, pid 0x0078 ======
prov: 000000
cw0:0 0F 8B 67 01 27 0D 9E D2
cw1:0 58 07 6F CE 63 E3 2F 75
[mg0] -> ECM to newcamd server1.com:1234
[mg0] -> ECM to newcamd server1.com:1234
[mg0] -> ECM to newcamd server1.com:1234
[mg0] -> ECM to newcamd server1.com:1234
[mg0] <- CW from newcamd server1.com:1234 (1116ms)
[mg0] WARNING, both cws changed !
[mg0] 1116 msec -- Thu Jun 11 13:30:00 2009
===== @Sky ECM on CaID 0x4AE1, pid 0x0078 ======
prov: 000000
cw0:0 D6 2E 1E 22 23 0D E5 15
cw1:0 D8 9C 5E D2 2F 21 FE 4E




Здесь приведено классическое определение "затыка". Это когда либо по причине плохого качества связи, либо по причине проблем на сервере вам не приходит во время или вообще не приходит ответ на ECM-запрос. В здешнем примере мы видим, что сервер ответил только с 4-го раза, при этом ключ поменялся уже два раза (или больше): "WARNING, both cws changed !". Бороться с затыками можно только двумя способами: улучшать качество Интернет коннекта или (если вы уверены, что с Интернетом у вас все в порядке) менять провайдера шары. Простейший тест на предмет "где затык: на сервере или в Интернете?" состоит в запуске команды (из ресивера) ping server1.com, или (из Windows) ping -t server1.com, где server1.com нужно поменять на имя или IP адрес вашего сервера (остановить команду можно, нажав CTRL+C). Нужно, следить за результатами ping во время просмотра канала и одновременно смотреть лог mgcamd. Как только вы увидите в логе mgcamd, что на запрос ECM нет ответа нужно сразу же смотреть на результаты ping, есть ли потери и там. При этом картинка на экране ТВ - это не показатель затыка, так как изображение продолжается еще некоторое время, даже без ответа от сервера. Если есть потери данных в ping (команда перестает выдавать информацию в этот момент в Linux или выдает "Request timed out" в Windows), и, особенно, если это происходит в момент затыка, то, скорее всего, сервер тут ни при чем - улучшайте свой Интернет коннект. Если же ping идеальный, без потерь и с более-менее одинаковым временем отклика при каждом запросе, то у вашего шаровика проблемы (перегруз карты, криво настроен софт, и т.д.).

Так выглядит идеальный ping c 0% потерь:


Цитата
# ping server.com
PING server.com (x.x.x.x): 56 data bytes
64 bytes from x.x.x.x: icmp_seq=0 ttl=56 time=8.7 ms
64 bytes from x.x.x.x: icmp_seq=1 ttl=56 time=8.8 ms
64 bytes from x.x.x.x: icmp_seq=2 ttl=56 time=7.7 ms
..... здесь пропущено 994 строки ....
64 bytes from x.x.x.x: icmp_seq=997 ttl=56 time=7.9 ms
64 bytes from x.x.x.x: icmp_seq=998 ttl=56 time=8.9 ms
64 bytes from x.x.x.x: icmp_seq=999 ttl=56 time=8.0 ms

--- server.com ping statistics ---

1000 packets transmitted, 1000 packets received, 0% packet loss
round-trip min/avg/max = 7.3/8.1/8.9 ms


Так выглядит плохой ping с потерями и плохим коннектом:

Цитата
# ping server.com
PING server.com (x.x.x.x): 56 data bytes
64 bytes from x.x.x.x: icmp_seq=0 ttl=56 time=7.5 ms
64 bytes from x.x.x.x: icmp_seq=1 ttl=56 time=7.9 ms
64 bytes from x.x.x.x: icmp_seq=2 ttl=56 time=8.0 ms
..... здесь НЕ пропущено ничего, просто не пришел ответ на ping ....
64 bytes from x.x.x.x: icmp_seq=20 ttl=56 time=7.2 ms
64 bytes from x.x.x.x: icmp_seq=21 ttl=56 time=8.0 ms
64 bytes from x.x.x.x: icmp_seq=22 ttl=56 time=9.0 ms

--- server.com ping statistics ---

23 packets transmitted, 17 packets received, 26% packet loss
round-trip min/avg/max = 6.9/8.6/30.1 ms



Когда возникает затык, подобный описанному выше, два параметра настройки mgcamd являются очень важными в плане того, как mgcamd будет реагировать на затыки (что по сути дела значит, как скоро можно ожидать возвращение картинки на экран). Это параметры K:{} и N:{} из файла mg_cfg.

Параметр K:{} описывает какое максимальное количество времени (в секундах) нужно ждать ответа от сервера на ECM запрос, по истечении которого mgcamd решает, что ответа нет. Чем больше это число, тем больше шансов получить ответ, если у вас плохой Интернет или глюкавый сервер шары. Кроме того, еще зависит от того, какие пакеты вы смотрите. Большинство карт обычно отвечают меньше, чем за 1 секунду. Но есть некоторые карты, где нормальное время отклика 1-2 секунды. В экстремальных случаях (известный пример - пакет Nova), ответ может приходить и за 3-5 секунд. Естественно, если вы установите K:{} равным 1 секунде, а сервер будет пытаться вам ответить через 2-3 секунды, то ничего хорошего из этого не выйдет. mgcamd все время будет думать, что сервер не ответил (по истечении секунды) и слать запросы повторно. От этого будет плохо всем, в основном, конечно, серверу, который будет завален запросами, ну и ресиверу тоже, который будет работать в таком случае неоптимально.

С другой стороны если взять и увеличить параметр K:{} на неразумно большую величину, типа 5 или больше секунд, то возникнет совершенно неблагоприятный эффект для вас. Представьте, что обычно вам ответы приходят за 0,5 секунды, и один раз ответ по какой-то причине не пришел. Теперь вы будете ждать целых 5 секунд, до тех пор, пока mgcamd не попытается снова послать запрос. За это время на некоторых каналах уже может случиться и затык, в то время, как если бы у вас повторный запрос пошел через, скажем, 2 секунды и пришел бы успешный ответ, никто бы ничего (на экране ТВ) не заметил!

Грубо говоря, когда есть проблемы с ответами от сервера, то чем меньше K:{}, тем хуже серверу шары из-за большего количества запросов, и чем больше K:{}, тем вероятнее вы получите затык. Хотя это все очень относительно и сильно зависит от конкретных пакетов. Есть пакеты (Премьера HD, Скай Италия и т.д.), где время ответа от карты критично. Для таких пакетов с кодировкой Videoguard, если вы не получите ключ за 0.6сек, то будет однозначный затык. Здесь можно спокойно ставить единицу в значение K:{}. С другой стороны, для таких пакетов, как Премьера SD или Nova и 2х секунд иногда недостаточно, и правильным значением должно быть 3.

Ценный совет:
Лучше всего пронаблюдать насколько быстро вам приходят ответы в целом на интересующие пакеты (выставив K:{} в большое значение, типа 5). После этого нужно брать для K:{} значение чуть больше того, где самые долгие ответы (в среднем).




Дальше, параметр N:{7} X Y влияет на то, как mgcamd ведет себя когда понимает, что ответ от сервера все же не пришел. Число X устанавливает количество неуспешных запросов на сервер (каждый из них длиной в K:{} секунд), после чего mgcamd отваливается от сервера и пытается к нему приконнектиться заново. Эта процедура нередко помогает, когда на сервере какие-то глюки, хотя конечно, постоянно это недолжно происходить. Параметр Y говорит mgcamd о том, что нужно отваливаться и реконнектиться заново, если не было никаких признаков жизни у сервера в течение Y секунд. Обычно до Y доходит дело крайне редко, потому как реконнект обычно происходит из за параметра X (в комбинации с K:{}).

Лучше всего смотреть в логи, анализировать происходящее и подбирать параметры под свою конкретную ситуацию.

#6 CineallianceHD

CineallianceHD
      Автор темы
  • saт az


  • 268 Сообщений:
  • {lang:macro__reply}

Размещено 02 Октябрь 2010 - 10:56

Как настроить priority.list / ignore.list / replace.list для mgcamd


Подразумевается, что вы полностью понимаете смысл происходящего при работе mgcamd и умеете читать и понимаете лог файл. Если это не так, читайте все, что находится выше.

Итак, вы обнаружили, что некоторые из ваших каналов открываются почти мгновенно, а некоторые через 5-10 секунд, а иногда и дольше. Одна из причин такого поведения заключается в том, что некоторые каналы кодируются не одной, а несколькими кодировками или провайдерами, поскольку одни и те же каналы на спутнике могут входить в разные пакеты или у некоторых провайдеров совпадают CAID:ProvID и запрос идет "не по адресу".

Получается, что один и тот же канал, в принципе, можно открыть совершенно разными картами, но на сервере обычно, доступна какая-то одна из них, а не все возможные карты. При включении канала mgcamd смотрит какими кодировками и провайдерами закодирован канал и начинает перебирать PIDы (комбинации карта+провайдер) по-порядку. Если получится так, что PID, который открывает канал, не первый в этом списке, то возникает задержка, пока mgcamd доберётся до нужной карты и откроет канал. Для избежания такой ситуации служит файл ignore.list, где можно указать какие CAID и/или ProvID нужно игнорировать, чтобы нужный вам PID (т.е. комбинация CAID+ProvID) оказался на первом месте в списке.

Ещё хуже, когда у вас коннект на несколько разных серверов (или портов) шары и из за того, что у некоторых провайдеров одинаковые ID для разных пакетов, запрос от вас может вообще пойти не на тот сервер, из-за того, что нужный именно для ЭТОГО канала PID стоит не на первом месте в списке PIDов. В таком случае каналы могут вообще открываться по 10 и 20 секунд и больше (смотря как настроены тайм-ауты mgcamd), пока от сервера куда пошёл запрос "не по теме" не придет отказ. Для избежания такой ситуации используется файл priority.list.

Для более сложных ситуаций, иногда приходится использовать оба файла в комбинации друг с другом, хотя это необязательно, вопреки тому, что иногда пишут на форумах. Оба файла не зависят друг от друга, но файл ignore.list берет верх над priority.list. Поэтому бессмысленно иметь в этих файлах одинаковые записи.

Файл replace.list используется для "супер-тонкой" настройки, когда вы хотите достигнуть идеальной ситуации с открытием каналов (для чего придется немного попотеть, зато результат будет стоить того).

Так какой же результат можно считать идеальным? Какова финальная цель всего этого мероприятия?

Ответ прост - для каналов, у которых в потоке кодирования больше, чем один PID (то есть, грубо говоря, для каналов, которые кодированы сразу несколькими кодировками) наша цель - это используя файлы ignore.list/priority.list/replace.list сделать так, чтобы в списке PIDов остался только один, который откроется картой, доступной нам именно для этого канала. В очень редких случаях, цели могут быть другими, но когда вы поймете систему, вы разберетесь сами по обстоятельствам.

Рассмотрим на конкретных примерах с нарастающей сложностью.

Ценный совет:
Во время настроек, описанных ниже вам придется очень часто перезапускать mgcamd. Быстрее всего это делать подключившись по Telnet к ресиверу (к сожалению на разных прошивках старт и стоп mgcamd осуществляется по-разному, поэтому изучите этот вопрос заранее).



1) Использование ignore.list для запрета карт

Допустим, мы смотрим исключительно один пакет каналов, переключаемся на кодированный канал этого пакета и видим в логе mgcamd такое:

Цитата
[mg0] stoping camd..
[mg0] service 2E8 index 0 pmt pid 0 (345)
ECM: CaID: 0x0500 -> CaPID: 0x040A ProvID: 022B00
ECM: CaID: 0x0654 -> CaPID: 0x07F2 ProvID: 000000
[mg1] service 2E8 already started with index 0
[mg1] service 2E8 index 1 pmt pid 0 (346)
[mg0] No viaccess key(s) found for id 22B00 keynr 08
[mg0] network can't decode
[mg0] pid 0x040A failed to decode.
[mg0] No irdeto key(s) found for id 0 keynr 00
[mg0] -> ECM to newcamd server2.com:5678
[mg0] <- CW from newcamd server2.com:5678 (515ms)
[mg0] 515 msec -- Wed Jun 10 11:38:16 2009
===== Irdeto ECM on CaID 0x0654, pid 0x07f2 ======
prov: 000000
cw0:0 7D 31 4A F8 8D DA DF 46
cw1:0 F1 DC BB 88 BB B0 8C F7
[mg0] irdeto using chid 0001 version C3



Из строк, начинающихся с ECM видно, что канал кодируется двумя кодировками: Viaccess (PID=040A) и Irdeto (PID=07F2), и первой в списке у нас идет кодировка Viaccess. К сожалению, у нас нет ни подходящего ключа в SoftCam.Key, ни доступной карты Viaccess, о чем свидетельствуют собщения "No viaccess key(s) found..." и "network can't decode". Дальше видно, что у нас есть доступная карта Irdeto c CaID=0654, мы обращаемся к ней и получаем ключ.

Что здесь можно улучшить? Можно сказать mgcamd, что поскольку у нас нет и не будет карты Viaccess (c CaID=500), нужно просто игнорировать все PIDы с такой картой, чтобы они "не мешались под ногами".

Создаем файл ignore.list и пишем в него следующее:
X: {0500}


Иногда 0500 разбивают на пары цифр через пробел. Для mgcamd это непринципиально:
Х: { 05 00 }



Перезапускаем наш mgcamd, снова включаем тот же канал и видим теперь следующее:

Цитата
[mg0] stoping camd..
[mg0] service 2E8 index 0 pmt pid 0 (345)
ECM: CaID: 0x0654 -> CaPID: 0x07F2 ProvID: 000000
[mg1] service 2E8 already started with index 0
[mg1] service 2E8 index 1 pmt pid 0 (346)
[mg0] No irdeto key(s) found for id 0 keynr 00
[mg0] -> ECM to newcamd server2.com:5678
[mg0] <- CW from newcamd server2.com:5678 (410ms)
[mg0] 410 msec -- Wed Jun 10 11:48:12 2009
===== Irdeto ECM on CaID 0x0654, pid 0x07f2 ======
prov: 000000
cw0:0 CD 5B 81 A9 E7 DA 76 37
cw1:0 7B 1B 19 AF 37 83 F7 B1
[mg0] irdeto using chid 0001 version C3



Больше нет никакого упоминания о карте Viaccess. Больше нет никаких побочных действий, и проб, и ошибок. Запрос ECM идет сразу, куда нужно, без задержек. Цель достигнута.



Что мы сделали? Cтроки, начинающиеся с X: в файле ignore.list (их может быть сколько угодно), означают что для всех каналов нужно игнорировать все PIDы, где CaID=0500. То есть, по сути дела, мы полностью запретили использование любых карт Viaccess: mgcamd теперь просто не будет видеть эту кодировку вообще. Осталось прощелкать по всем каналам нашего пакета и убедиться, что для всех каналов теперь находится только один PID с кодировкой Irdeto. Если возникают еще какие-то "левые" CaID, заносим их также в ignore.list по аналогии с Viaccess.


2) Использование ignore.list для запрета провайдеров

Польза от первого примера больше академическая. Понятно, что взять и запретить полностью все карты Viaccess - это мало кому пригодится. Шансы того, что вам понадобится карта Viaccess для того или иного пакета, в наши дни довольно велики, так как на оди и тот же CaID может быть куча разных провайдеров. В таких случаях мы можем использовать ignore.list для игнорирования только ненужных нам провайдеров той или иной кодировки, а не всю кодировку целиком. Для примера, откроем один из каналов, где есть больше чем один PID с кодировкой Viaccess, но нужный нам - только один:

Цитата
[mg0] stoping camd..
[mg0] service 3786 index 0 pmt pid 85C (35)
ECM: CaID: 0x0500 -> CaPID: 0x0B57 ProvID: 032920
ECM: CaID: 0x0500 -> CaPID: 0x0B59 ProvID: 020810
ECM: CaID: 0x0100 -> CaPID: 0x0B63 ProvID: 00003D
ECM: CaID: 0x0500 -> CaPID: 0x0887 ProvID: 025100
ECM: CaID: 0x0500 -> CaPID: 0x0B58 ProvID: 024400 <- нам нужен только этот PID
[mg0] No viaccess key(s) found for id 32920 keynr 08
[mg0] network can't decode
[mg0] pid 0x0B57 failed to decode.
[mg0] No viaccess key(s) found for id 20810 keynr 08
[mg0] network can't decode
[mg0] pid 0x0B59 failed to decode.
[mg0] No seca key(s) found for id 3D keynr 0c
[mg0] network can't decode
[mg0] pid 0x0B63 failed to decode.
[mg0] No viaccess key(s) found for id 25100 keynr 08
[mg0] network can't decode
[mg0] pid 0x0887 failed to decode.
[mg0] No viaccess key(s) found for id 24400 keynr 08
[mg0] -> ECM to newcamd server1.com:1234
[mg0] <- CW from newcamd server1.com:1234 (18ms)
[mg0] 18 msec -- Tue Jun 14 12:45:59 2009
===== Viaccess ECM on CaID 0x0500, pid 0x0b58 ======
prov: 024400
cw0:0 FC 6B AD 14 B1 68 5D 76
cw1:0 25 30 B3 08 E0 E2 2E F0




Из этого куска лога видно, что открывается канал только картой провайдера Viaccess, у которого ProvID=024400. Все остальные провайдеры нам не нужны и только замедляют открытие канала. Поэтому исключим их, используя такой файл ignore.list:

Код
V: {032920}
V: {020810}
S: {003D}
V: {025100}



Проверим теперь (после рестарта mgcamd) что имеется у нас в логе после переключения на этот же канал:

Цитата
[mg0] stoping camd..
[mg0] service 3786 index 0 pmt pid 85C (35)
ECM: CaID: 0x0500 -> CaPID: 0x0B58 ProvID: 024400
[mg0] No viaccess key(s) found for id 24400 keynr 08
[mg0] -> ECM to newcamd server1.com:1234
[mg0] <- CW from newcamd server1.com:1234 (437ms)
[mg0] 437 msec -- Tue Jun 14 12:54:39 2009
===== Viaccess ECM on CaID 0x0500, pid 0x0b58 ======
prov: 024400
cw0:0 EB 2F E6 00 50 4B 82 1D
cw1:0 06 BC A4 66 98 80 6C 84




Все ненужные провайдеры испарились, остался только один единственный, нужный, и канал открывается быстрее!

Вы заметили, что в этом примере мы использовали тот же файл ignore.list, но разные буквы в начале строк.
Все варианты строк для ignore.list приведены ниже:

Код
X: { XXXX }       # для глобального игнорирования карт с CaiD=XXXX
V: { VVVVVV }     # для глобального игнорирования провайдеров Viaccess (у которых CaiD=0500)
S: { SSSS }       # для глобального игнорирования провайдеров Seca/Mediaguard (у которых CaiD=0100)
I: { IIII }       # для глобального игнорирования чидов Irdeto (у которых CaiD=06xx)




Всё прекрасно, но бывают ситуации посложней.
Представим, что у нас есть 2 разных пакета каналов A и B. Пакет A открывается провайдером X, а пакет B открывается провайдером Y.
И при этом, пакет А также может открываться провайдером Y в принципе (то есть, присутствует ECM для провайдера Y), но не именно той картой, что доступна нам. Получается так, что если глобально запретить провайдера Y, чтобы он не мешался под ногами для пакета A, то пакет B вообще перестанет работать. Если не запрещать Y, то каналы будут открываться медленно в пакете A, потому что если не повезет, то при открытии канала A, сначала будет пробоваться провайдер Y и только потом уже провайдер X.

Для борьбы с подобной ситуацией есть два способа. Первый, с использованием файла priority.list, второй - с использованием файла replace.list. У обоих методов есть преимущества и недостатки. Рассмотрим их по-порядку.


3a) Использование priority.list для изменения порядка PIDов

Вот кусок лога, где мы включаем канал с несколькими провайдерами Viaccess:

Цитата
[mg0] stoping camd..
[mg0] service 4EF2 index 0 pmt pid 110F (46)
ECM: CaID: 0x0500 -> CaPID: 0x0112 ProvID: 024100
ECM: CaID: 0x0500 -> CaPID: 0x0124 ProvID: 020810
ECM: CaID: 0x0500 -> CaPID: 0x0510 ProvID: 023B00
[mg0] No viaccess key(s) found for id 024100 keynr 02
[mg0] -> ECM to newcamd server1.com:1234 <- здесь и происходит "затык" без ответа
[mg0] -> ECM to newcamd server1.com:1234 <- и в телевизоре темно
[mg0] -> ECM to newcamd server1.com:1234 <- потому что запрос идет не на ту карту
[mg0] -> ECM to newcamd server1.com:1234 <- но удалить провайдера 024100 нельзя
[mg0] network can't decode
[mg0] pid 0x0112 failed to decode.
[mg0] No viaccess key(s) found for id 020810 keynr 0с
[mg0] network can't decode
[mg0] pid 0x0124 failed to decode.
[mg0] No viaccess key(s) found for id 23B00 keynr 08
[mg0] -> ECM to newcamd server1.com:1234
[mg0] <- CW from newcamd server1.com:1234 (155ms)
[mg0] 155 msec -- Tue Jun 15 13:58:17 2009
===== Viaccess ECM on CaID 0x0500, pid 0x0110 ======
prov: 023B00
cw0:0 86 E7 92 FF ED CB B2 6A
cw1:0 4A 3E B2 3A 8F 99 37 5F



Из лога видно, что канал открывается провайдером Viaccess 023B00, и при этом очень долго. Получилось так, что первыми идут PIDы с другими провайдерами, один из которых (024100) нам тоже доступен, но для другого канала. Поэтому начинают идти запросы не на ту карту, которая, естественно, в ответ молчит. А на экране темно (иногда очень долго темно в зависимости от настроек в mg_cfg), пока mgcamd не перейдет к следующему, правильному PID. Все бы ничего, но взять и избавиться от "неправильного" провайдера 024100 мы не можем, потому что он нам нужен для другого канала, и если мы просто впишем его в ignore.list, то другой канал у нас работать не будет.

Исходя из этого, нам нужно решить проблему приоритета PIDов. Нужно сделать так, чтобы провайдер 023B00 шел первым в списке PIDов. Это позволит сразу пробовать правильный PID для открывания канала. Пусть даже останутся другие PIDы, до них очередь не дойдет, потому что сразу придет нужный ответ от сервера.

Для глобального изменения приоритета провайдеров используется файл priority.list. В нашем случае нужно занести в него всех провайдеров, которые у нас есть в списке ECM, в той последовательности, в которой мы хотим чтобы шел их перебор.

В нашем случае, нам нужно оставить 2 провайдера: 023B00 и 024100 (остальные можно в ignore.list, чтобы не путались под ногами). Нам также нужно, чтобы 023B00 имел приоритет над 024100. Поэтому создаем два файла:

ignore.list:
V: {020810}

priority.list:
V: {023B00}
V: {024100}



Перезагружаем эмулятор и снова включаем тот-же канал. Теперь видим такое:

Цитата
[mg0] stoping camd..
[mg0] service 4EF2 index 0 pmt pid 110F (46)
ECM: CaID: 0x0500 -> CaPID: 0x0510 ProvID: 023B00
ECM: CaID: 0x0500 -> CaPID: 0x0112 ProvID: 024100
[mg0] No viaccess key(s) found for id 023B00 keynr 08
[mg0] -> ECM to newcamd server1.com:1234
[mg0] <- CW from newcamd server1.com:1234 (245ms)
[mg0] 245 msec -- Tue Jun 15 14:04:12 2009
===== Viaccess ECM on CaID 0x0500, pid 0x0110 ======
prov: 023B00
cw0:0 CF A1 F8 68 FF 9F FF 9D
cw1:0 F3 BF C1 73 7C 03 C0 3F




У нас осталось 2 провайдера и первым идет тот, что нужен - запрос сразу идет на нужную карту без промедления.

Ценный совет:
Помните, что действие файлов ignore.list и priority.list распостраняется на АБСОЛЮТНО ВСЕ КАНАЛЫ ВСЕХ ПАКЕТОВ (естественно, если они применимы к картам и провайдерам отдельно взятого канала). То есть, эти файлы имеют глобальный эффект! Иногда можно увлечься удалением "ненужных" карт и провайдеров и не заметить, что у вас провайдер, которого вы запретили для одного пакета может потребоваться для другого. Если вы смотрите несколько пакетов со схожими кодировками, следите за тем, чтобы не внести в ignore.list карту или провайдера, которая нужна для другого пакета



Самая нехорошая ситуация возникает, когда у нескольких каналов есть два (или более) провайдера и оба эти провайдеры нужны (запретить их нельзя). Более того, для одной части каналов нужно чтобы в приоритете был один провайдер, а для другой части каналов - другой провайдер. Если мы будем пользоваться только файлом priority.list, то только одна часть каналов будет иметь правильный порядок провайдеров, а другая часть всегда будет натыкаться на ненужный PID. Это происходит потому что настройки из priority.list глобальны, и с помощью этого файла нельзя сказать: "вот этим каналам - такой нужен приоритет провайдеров, а вот этим каналам - другой". На помощь приходит файл replace.list

Что позволяет файл replace.list, в чем его суть? Он позволяет "волшебным образом" заменять CaID и/или ProvID и/или PID отдельно взятого канала на любые значения! Сперва можно подумать, мол, "зачем это вообще нужно?" Но на самом деле, это позволяет произвести тончайшую настройку PIDов для каждого канала персонально! При этом, по сути дела мы можем имитировать функциональность и ignore.list, и priority.list, используя только replace.list. Вы спросите, зачем же тогда вообще нужны ignore/priority, если можно гораздо точнее все настроить и без них? Недостаток replace.list в том, что если вы решите пойти таким путем, то вам придется прописать в этот файл по строчке для каждого кодированного канала. По одной строчке на каждый канал, это если в потоке канала только 2 PIDa, а если в потоке канала больше чем два PIDа, то на каждый канал нужно будет прописывать несколько строк (чтобы конфигурация PIDов была идеально "чистой"). Для ленивых - это точно неподходящее занятие. Те, кто готов потрудиться, будут вознаграждены самым быстрым возможным открыванием каналов, без задержек, железно, на 100%.


3b) Использование replace.list для упорядочивания PIDов (альтернатива priority.list + ignore.list)

Возьмем пакет каналов где используются три разных провайдера Viaccess: 023700, 020710 и 030600.
Для одной части каналов нужен один провайдер на первом месте, для другой части каналов - другой, а для HD - третий. Если просто вписать их в priority.list (как это часто советуют на форумах), то хорошо будет только одной из этих трех частей каналов. Две же других части будут напарываться каждый раз на ненужный PID, а одна из трех частей (самая невезучая) будет напарываться на целых 2 ненужных PIDa. Запретить провайдеров с помощью ignore.list тоже нельзя, тогда просто перестанет открываться часть каналов. Вот тут и приходит на помощь replace.list! Включим для примера HD канал (без ignore.list и без priority.list) и увидим в логе такое (все данные, которые нам потребуются для создания replace.list выделены):

Цитата
[mg0] stoping camd..
[mg0] service 2F47 index 0 pmt pid 0 (45)
ECM: CaID: 0x0500 -> CaPID: 0x0FA3 ProvID: 023700
ECM: CaID: 0x0500 -> CaPID: 0x0BBB ProvID: 030600
[mg1] service 2F47 already started with index 0
[mg1] service 2F47 index 1 pmt pid 0 (46)
[mg0] No viaccess key(s) found for id 23700 keynr 08
[mg0] -> ECM to newcamd server1.com:1234
[mg0] network can't decode
[mg0] pid 0x0FA3 failed to decode.
[mg0] -> ECM to newcamd server1.com:1234
[mg0] <- CW from newcamd server1.com:1234 (174ms)
[mg0] 174 msec -- Wed Jun 10 01:13:31 2009
===== Viaccess ECM on CaID 0x0500, pid 0x0bbb ====== <- смотрим здесь каким PIDом открывается канал
prov: 030600
cw0:0 00 00 7E 7E 0F 83 29 BB
cw1:0 C7 9C 0F 72 07 E0 00 E7




Видно, что первым попадается провайдер 023700, который не работает (идет запрос на сервер, но он нас посылает подальше).
Видно, что в конце концов канал открывается по PIDу 0BBB, у которого карта=0500 и провайдер=030600.

Создаем новый файл replace.list и пишем в него следующее:

Цитата
R:{{2F47}{0500}{023700}{0FA3}{0500}{030600}{0BBB}}




Что это значит? Это значит, что мы предписываем mgcamd следующее:

Для канала, у которого Service ID (или SID) = 2F47, поменяй PID с параметрами CaID=0500, ProvID=023700 и CaPID=0FA3 на PID, с параметрами CaID=0500, ProvID=030600 и CaPID=0BBB.

Что получается при перезапуске mgcamd? А вот что:

Код
[mg0] stoping camd..
[mg0] service 2F47 index 0 pmt pid 0 (45)
  ECM: CaID: 0x0500  -> CaPID: 0x0BBB ProvID: 030600
[mg1] service 2F47 already started with index 0
[mg1] service 2F47 index 1 pmt pid 0 (46)
[mg0] -> ECM to newcamd server1.com:1234
[mg0] <- CW from newcamd server1.com:1234 (174ms)
[mg0] 174 msec -- Wed Jun 10 01:15:31 2009
===== Viaccess ECM on CaID 0x0500, pid 0x0bbb ======
prov: 030600
cw0:0 78 03 FF 7A 67 98 00 FF
сw1:0 DF 33 18 2A 19 3E 1F 76



Одной строчкой в replace.list мы сделали сразу две вещи:
1) убили ненужный PID
2) превратили убитый PID в правильный, который работает

Только нужно помнить, что это мы сделали для одного единственного канала! У каждого канала на отдельно взятом транспондере всегда свой уникальный service ID (SID). Поэтому, для полного счастья поступаем таким же образом для остальных HD каналов, открывающихся по провайдеру 030600, и получаем вот что в replace.list для пяти каналов:

Код
R:{{2F45}{0500}{023700}{0FA1}{0500}{030600}{0BB9}}
R:{{2F46}{0500}{023700}{0FA2}{0500}{030600}{0BBA}}
R:{{2F47}{0500}{023700}{0FA3}{0500}{030600}{0BBB}}
R:{{2F48}{0500}{023700}{0FA4}{0500}{030600}{0BBC}}
R:{{2F49}{0500}{023700}{0FA5}{0500}{030600}{0BBD}}




Теперь для этих пяти каналов будет совершенно не важно, что вы напишете в priority.list, ведь мы практически создали "локальный" ignore и priority специально для этих каналов, в результате чего всегда будет оставаться только один нужный PID.


материал gomel-sat Автор "дядя Фёдор"

#7 CineallianceHD

CineallianceHD
      Автор темы
  • saт az


  • 268 Сообщений:
  • {lang:macro__reply}

Размещено 02 Октябрь 2010 - 11:18

Вариант настойки с использованием mgcamd для сервера RELSAT.ORG


Вариант работчей конфигурации mgcamd:
/var/keys/mg_cfg
Spoiler


/var/keys/newcamd.list
Spoiler


/var/keys/priority.list
Spoiler


/var/keys/ignore.list
Spoiler


/var/keys/replace.list

Spoiler





1 пользователей читают эту тему

0 зарегистрированных, 1 гостей, 0 скрытых

Добро пожаловать!
Для доступа ко всем функциям форума
Вход или Регистрация
Facebook
ЧаВо