MAG-CAS-plugin.h - заголовочный файл с описанием интерфейса CAS плагина.
test-cas.c - пример реализации интерфейса CAS плагина.
mk.sh - скрипт для сборки примера.
Для использования необходимо собрать плагин и положить его в каталог /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
В динамической библиотеке необходимо реализовать функции 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 определяет функции, которые необходимо вызывать для установки алгоритма и ключей шифрования. |