1. Список файлов: MAG-CAS-plugin.h - заголовочный файл с описанием интерфейса CAS плагина. test-cas.c - пример реализации интерфейса CAS плагина. mk.sh - скрипт для сборки примера. 2. Использование. Для использования необходимо собрать плагин и положить его в папку /home/default Максимальное количество одновременных плагинов - 7, с типами CAS от 4 до 10 включительно. При установке такого типа плеер будет искать библиотеку с именем /home/default/libCasCustom_x.so, где _x соответствует типу CAS. Например при вызове: STB_SetCASType(hPlayer,STB_CAS_TYPE_CUSTOM4) или в JavaScript stb.SetCASType(4); будет искаться библиотека /home/default/libCasCustom4.so 3. Описание интерфейса В динамической библиотеке необходимо реализовать функции CreateCasPlugin, GetCasApiVersion, GetCasPluginDescription, а также содержимое структуры STB_MAG_Cas_t: STB_MAG_Cas_t* CreateCasPlugin(STB_MAG_Cad_t* mag_interface, const char* ini_filename); инициализация системы условного доступа. int GetCasApiVersion(void); Версия CAS API, реализованная плагином. const char* GetCasPluginDescription(void); Описание CAS плагина. void (*OnPmtChange)(byte* buffer, int length); Вызывается при смене таблицы PMT в потоке, необязателен для реализации. void (*OnEcm)(byte* ecm, int length); Вызывается при получении ECM пакета соответствующего заданной CAS. Реализация обязательна только для CAS модулей работающих в режиме CAS_Flags_PMT_ECM. int (*Decrypt)(byte* in_buffer, int length); Вызывается для того, чтобы CAS модуль декриптовал блок данных из криптованного транспортного потока. Данные в in_buffer всегда выровнены на начало транспрортного пакета. Результат декриптования сохраняется в in_buffer. Возвращает количество декриптованых байт. Плагин обязан очистить биты Transport Scrambling Control в случае успешного декриптования транспортного пакета. void (*Deinit)(void); Вызывается при окончании работы с CAS для того, чтобы освободить ресурсы библиотеки. void (*ResetStream)(void); Вызывается при смене криптованного канала. int (*GetSysID)(void); Получить SysID соответствующий вендору CAS. Реализация обязательна только для CAS модулей работающих в режиме CAS_Flags_PMT_ECM. int (*GetSoID)(void); Получить SoID соответствующий вендору CAS. Реализация обязательна только для CAS модулей работающих в режиме CAS_Flags_PMT_ECM. CAS_Flags_e (*GetCasFlags)(void); Получить флаги, указывающие в каком режиме должен работать CAS модуль (см. описание CAS_Flags_e). ECM_Format_e (*GetEcmFormat)(void); Получить формат, в котором CAS плагин будет получать ECM пакеты: ECM_FORMAT_SECTION - только секцию ECM ECM_FORMAT_TS - полный транспортный пакет, содержащий ECM. void (*SetAdditionalParam)(const char* name, const char* value); Установить дополнительные параметры CAS. CAS_Flags_e - определяет режим работы CAS модуля: CAS_Flags_PMT_ECM плагину не посылается весь транспортный поток, а только вызываются функции OnPmtChange и OnEcm по соответствующим событиям. Модуль должен по результатам обработки ECM устанавливать ключи и тип криптования с помощью функций SetScramblingType и SetScramblingKey из STB_MAG_Cad_t. CAS_Flags_DecodeAll плагину передается весь поток для декриптования через функцию Decrypt. CAS_Flags_DecodeAll_PMT плагину передается весь поток для декриптования через функцию Decrypt. Но при этом PMT также закриптован. Если в STB_MAG_Cas_t некоторые функции не реализованы, то соответствующие поля должны быть NULL. Структура STB_MAG_Cad_t определяет функции, которые необходимо вызывать для установки алгоритма и ключей шифрования.