Skip to end of metadata
Go to start of metadata

1.Интеграция с OmegaTv.

1.а. Требования к кабинетам.

Необходимы два типа личных кабинетов:

1.Manager Home Page

Manager home page отражает карточки клиента, которые состоят из:

  • Информации об абонента и тарифе.
  • Кнопки СМОТРЕТЬ ОНЛАЙН, которая перенаправляет в web player с каналами установленного клиенту тарифа.
  • Списка устройств абонента, в котором:
    • отражаются плейлисты и устройства абонента.
    • можно удалять плейлисты и устройства абонента.
    • Предупреждает о лимите 3х плейлистов и/или устройств.
    • Информирует о достижении лимита 3х плейлистов и/или устройств.
  • Кнопки ПОЛУЧИТЬ КОД АКТИВАЦИИ, которая генерирует код активации устройства для абонента. (Неактивна по достижению лимита устройств)
  • Кнопки СОЗДАТЬ ПЛЕЙЛИСТ, которая генерирует URL ссылку на плейлист для абонента.(Неактивна по достижению лимита устройств)

User-manager может выполнить следующие действия:

  • Создавать пользователя.
  • Создавать пользователя без тарифа.
  • Изменять тариф пользователя.
  • Дополнять тариф пользователя additional тарифом.
  • Смотреть каналы в тарифе пользователя.
  • Добавлять устройство пользователю по UNIQ.
  • Добавлять плейлист пользователю.
  • Получать код активации устройства.
  • Генерировать URL ссылку на плейлист для абонента
  • Удалять плейлисты и устройства абонента


UserStories
  • "Изменение тарифа".
    Как user-manager, я могу изменить тариф клиента.
  • "Добавление additional тарифа".
    Как user-manager, я могу зайти в тариф клиента и добавить additional тарифы клиенту.
  • "Просмотр он-лайн".
    Как user-manager, нажав кнопку СМОТРЕТЬ ОНЛАЙНв карточке клиента, я могу смотреть каналы установленного клиенту тарифа.
  • "Просмотр списка устройств клиента".
    Как user-manager, я могу зайти в список добавленных устройств пользователя и посмотреть сколько устройств добавлено.
  • "Добавление устройства".
    Как user-manager, я могу открыть список устройств пользователя и добавить устройство используя предоставленный клиентом UNIQ код устройства.
  • "Просмотр кода активации".
    Как user-manager, я могу открыть карточку клиента и нажав кнопку ПОЛУЧИТЬ КОД АКТИВАЦИИ, получить код активации.
  • "Удаление устройства".
    Как user-manager, я могу открыть список устройств пользователя и удалить добавленное устройство.
2.Customer Home Page

Customer Home Page состоят из:

  • Кнопки СМОТРЕТЬ ОНЛАЙН / ПРОМО, которая отображается как "Смотреть он-лайн" только когда тариф установлен и оплачен.
  • Кнопка АКТИВИРОВАТЬ / ПОМЕНЯТЬ ТАРИФ открывает (или перенаправляет к) список базовых и дополнительных (bundle) тарифов.
  • Кнопки ПОЛУЧИТЬ КОД АКТИВАЦИИ, которая генерирует код активации устройства для абонента.(Неактивна по достижению лимита устройств)
  • Кнопки СОЗДАТЬ ПЛЕЙЛИСТ, которая генерирует URL ссылку на плейлист для абонента.(Неактивна по достижению лимита устройств)
  • Списка устройств абонента, в котором:
    • Отражаются плейлисты и устройства абонента.
    • Можно удалять плейлисты и устройства абонента.
    • Предупреждает о лимите 3х плейлистов и/или устройств.
    • Информирует о достижении лимита 3х плейлистов и/или устройств.

User-customer может выполнить следующие действия:

  • Смотреть промо/онлайн.
  • Устанавливать тариф.
  • Менять тариф.
  • Добавлять устройства/плейлисты.
  • Удалять устройства/плейлисты.


User stories
  • "Просмотр промо"
    Как user-customer, не имеющий тарифа или имеющий неоплаченный тариф, я могу зайти на домашнюю страничку, нажать кнопку СМОТРЕТЬ ПРОМО, которая перенаправит меня в веб-плеер Omega TV, где я смогу смотреть каналы доступные мне в промо компании.
  • "Выбор тарифа"
    Как user-customer, не имеющий тарифа, я могу зайти на домашнюю страничку, нажать кнопку АКТИВИРОВАТЬ ТАРИФ, которая откроет список тарифов, где я смогу установить подходящий мне тариф кликнув на него.
  • "Изменение тарифа"
    Как user-customer, имеющий установленный тариф, я могу зайти на домашнюю страничку, нажать кнопку АКТИВИРОВАТЬ / ПОМЕНЯТЬ ТАРИФ, которая откроет список тарифов, где я смогу поменять тариф на более подходящий мне кликнув на него.
  • "Просмотр он-лайн"
    Как user-customer, имеющий установленный тариф, я могу зайти на домашнюю страничку, нажать кнопку СМОТРЕТЬ ОНЛАЙН / ПРОМО, которая перенаправит меня в веб-плеер Omega TV, где я смогу смотреть каналы доступные мне в активированном тарифе.
  • "Добавить устройство"
    Как user-customer, я могу зайти на домашнюю страничку, нажать кнопку ПОЛУЧИТЬ КОД АКТИВАЦИИ, которая выдаст мне код активации устройства.
  • "Добавить плейлист"
    Как user-customer, я могу зайти на домашнюю страничку, нажать кнопку СОЗДАТЬ ПЛЕЙЛИСТ, которая выдаст мне ссілку на плейлист.
  • "Просмотр списка добавленных устройств/плейлистов"
    Как user-customer, я могу зайти на домашнюю страничку и увидеть лимит устройств/плейлистов для просмотра и сколько плейлистов и/или устройств привязано.
  • "Удалить устройство/плейлист"
    Как user-customer с добавленными устройствами, я могу зайти в личный кабинет и удалить устройство и/или плейлист из списка добавленных устройств.
  • "Достижение лимита добавленных устройств/плейлистов"
    Как user-customer, с тремя привязанными устройствами и/или плейлистами, я могу зайти на домашнюю страничку и увидеть, что лимит привязанных устройств достигнут.

1.b. Интеграция API.

1.1. Основные понятия в работе с API:

Клиент- конечный пользователь сервиса, имеет уникальный идентификационный номер- customer_id, а также статус клиента, который отражается как <int> status (Принимает значение 0 - блокированный или 1 - активный).


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

Типы тарифов:

  • Базовый- тарифный пакет предоставляемый OmegaTV.
    Имеет уникальный номер, отражается в массиве tariff как "basic":[id]
  • Бандл- дополнительный пакет контента, который составляет компания-оператор. Имеет уникальный номер, отражается в массиве tariff как "bundle":[id].
  • Промо- бесплатный пакет каналов, который доступен клиенту по истичению тарифа или клиенту без тарифа.
    Имеет уникальный номер, отражается в массиве tariff как "promo":[id].

Устройство клиента- устройство воспроизведения контента. 

Информация устройства отражается в массиве devices :

  • <string> uniq - уникальный идентификатор устройства.
  • <int> activation_date - (timestamp) дата активации устройства.
  • <string> model модель устройства.

Лимит устроств зависит от тарифа абонента


Плейлист- ссылка на m3u файл тарифного плана клиента. 

Информация плейлиста отражается в массиве playlists:

  • <string> uniq - уникальный идентификатор плейлиста.
  • <int> activation_date - (timestamp) дата активации плейлиста.
  • <string> url - ссылка на плейлист.

Плейлист считается как одно из устройств клиента и учитывается в лимите устройств клиента.



1.2. Функционал взаимодействия с API реализован как диалог "Запрос-Ответ".


Запрос формируется из трех частей:

  1. HTTP Headers

  2. Body
    Массив данных уникальных для каждого запроса:
  • API_ID - <string>  публичный ключ API (доступен на странице Company Settings)
  • API_TIME - <timestamp> текущее (UTC) время
  • API_HASH - <string> подпись.
  1. Подпись
    Формируется по методу HMAC:
    • Алгоритм SHA 256.
    • Закрытый ключ HMAC (private key). (доступен на странице Company Settings)
    • Сообщение состоящие из:
      • текущего времени (API_TIME)
      • public key (доступен на странице Company Settings)
      • массива данных, отправляемых в указанном запросе (URL-кодированный в строку с разделителем & -  URL query string). 

Внимание!


В случае неправильных ключей API (проверьте пробелы и знаки переноса), либо если время сервера не синхронизируется по NTP в ответ на любой запрос API придет 401 HTTP code.


Response:
HTTP/1.1 401 Unauthorized
Server: nginx/1.16.1
Date: Wed, 04 Nov 2020 16:06:09 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive

Access denied


1.4. Пример запроса.

Пример PHP

**

*  генерация API_HASH (подписи запроса)

*/


//объявление текущего времени

$time = time();


//сообщение запроса

$message = $this->buildMessage($time, $this->API_ID, $data);


//генерация подписи запроса

$api_hash = hash_hmac(‘sha256’, $current_ts . $public_key. http_build_query($message, ‘’, ‘&’), $private_key);

/

 Example Test

<?php
$q = new HmacAPIClient('https://apiua2.hls.tv/',

<API_Public_key>, <API_Private_key>);


// $q->request('tariff/base/list', [], "POST", true);
$q->request('tariff/promo/list', [], "POST", true);
// $q->request('tariff/bundle/list', [], "POST", true);
// $q->request('customer/tariff/set', ['customer_id' => 32, 'base' =>209, 'bundle' => [140]], "POST", true);
//$q->request('customer/tariff/set', ['customer_id' => 3, 'promo' => 108], "POST", true);
// $q->request('/customer/device/get_code', ['customer_id' => 3], "POST", true);
// $q->request('/customer/device/add', ['customer_id' => 111, 'uniq' => '1BF499EDA3E0C588'], "POST", true);
// $q->request('/customer/device/remove', ['uniq' => 'F8CE074A5680BF7B', 'customer_id' => 31], "POST", true);
// $q->request('/customer/block', ['customer_id' => 3], "POST", true);
// $q->request('/customer/activate', ['customer_id' => 3], "POST", true);
// $q->request('/customer/get', ['customer_id' => 111], "POST", true);
//$q->request('stb/get_for_customer', ['customer_id' => 1], "POST", true);
//$q->request('stb/list_activated', [], "POST", true); //List activated company's stbs
//$q->request('stb/list_free', [], "POST", true); //List free (inactive) company's stbs
//$q->request('stb/register', ['stb_uniq' => 'F3195D16F96D96D3', 'customer_id' => 1, 'channel_group_id' => [60, 61]], "POST", true); //Register stb
// $q->request('device/list', [], "POST", true); // List company's Hls clients

class HmacAPIClient {

private $API_ID;
private $API_HOST;
private $API_PRIVATE_KEY;
private $curl_error_msg;

public function __construct($host, $public_key, $private_key)

{

$this->API_ID = $public_key;
$this->API_HOST = $host;
$this->API_PRIVATE_KEY = $private_key;

}

public function request($route, $data = [], $method = "POST", $verbose = false)

{

$host = $this->API_HOST . $route;

$privateKey = $this->API_PRIVATE_KEY;

$time = time();

$message = $this->buildMessage($time, $this->API_ID, $data);
var_dump($message);
$hash = hash_hmac('sha256', $message, $privateKey);
$headers = ['API_ID: ' . $this->API_ID, 'API_TIME: ' . $time, 'API_HASH: ' . $hash];

$ch = curl_init();

curl_setopt($ch, CURLOPT_VERBOSE, FALSE);
curl_setopt($ch, CURLOPT_URL, $host);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);

switch ($method) {

case 'POST':
$data = http_build_query($data);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
break;
case 'GET':
break;
default:
$data = http_build_query($data);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
break;
}

// curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");

if ($verbose)
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);

$result = curl_exec($ch);
if ($verbose) {

if ($result === FALSE) {
echo "Curl Error: " . curl_error($ch);
} else {
echo PHP_EOL;
echo "Request: " . PHP_EOL;
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
echo PHP_EOL;

echo "Response:" . PHP_EOL;
echo $result;
echo PHP_EOL;

}

}
if ($result === FALSE) {

$this->curl_error_msg = curl_error($ch);

}
curl_close($ch);
return $result;

}

public function getErrorMsg() {

return $this→curl_error_msg;

}

protected function buildMessage($time, $id, $data) {
return $time . $id . http_build_query($data, '', '&');
}

}

2.Методы действий с Тарифами.

2.1.Просмотр списка промо тарифов.

Action: tariff/promo/list

Request: POST

Data: отправляем пустой массив -  [ ] 

Response:

{

"result":[

{

"group_id":<int> group_id,

"group_name":<string> group_name,

"hls_channels":[

{

"id":<int> id,

"name":<string> name,

"genre":<string> genre,

"logo":<string> logo

},...

},...],

"status":"ok",

"action":"\/tariff\/promo\/list",

"request":[ ]

}

В котором:

  • <int> group_id - уникальный номер группы каналов.
  • <string> group_name - уникальное имя группы.


  • <array> hls_channels - массив с доступными каналами в выбранном промо тарифе в котором:
    • <int> id - это уникальный идентификатор канала.
    • <string> name - имя канала.
    • <string> genre - жанр к которому относится данный канал.
    • <string> logo - ссылка на логотип данного канала.

Возможные варианты ошибок:

 Ошибка 2302 - был отправлен непустой массив.


{

"error":{

"code":2302,

"msg":"Wrong request data."

},

"request":[string]

}

2.2.Просмотр списка основных тарифов.

Action:   tariff/base/list

Request: POST

Data:  отправляем пустой массив -  [ ] 

Response:

{

"result":[

{

"tariff_id":,<int> tariff_id,
"tariff_name":<string> tariff_name,
"hls_channels":[

],
"device_number":<int> device_number,
}, ...
],
"status":"ok",
"action":"\/tariff\/base\/list",
"request":[
],

}

В котором:

  • <int> group_id -это уникальный номер группы каналов.
  • <string> group_name -уникальное имя группы.
  • <array> hls_channels - массив с доступными каналами в выбранном тарифе в котором:
    • <int> device_number- количество устройств, доступные в base tariff.
    • <int> id - уникальный идентификатор канала.
    • <string> name - имя канала.
    • <string> genre - жанр к которому относится данный канал.
    • <string> logo - ссылка на логотип данного канала.


Возможные варианты ошибок:

 Ошибка 2401 - был отправлен непустой массив.

{

"error":{

"code":2401,
"msg":"Wrong request data."

},

"request":[string]

}


2.3.Просмотр списка бандлов.

Action:  tariff/bundle/list

Request: POST

Data:  отправляем пустой массив -  [ ] 

Response:


{

"result":[

{

"group_id":<int> group_id,

"group_name":<string> group_name,

"hls_channels":[

{

"id":<int> id,

"name":<string> name,

"ganre":<string> genre,

"logo":<string> logo

},...

"local_channels":[ ]

},...

],

"status":"ok",

"action":"\/tariff\/bundle\/list",

"request":[]

}

В котором:

  • <int> group_id - это уникальный номер группы каналов.
  • <string> group_name - уникальное имя группы.
  • <array> hls_channels - массив с доступными каналами в выбранном бандле в котором:
    • <int> id - уникальный идентификатор канала.
    • <string> name - имя канала.
    • <string> genre - жанр к которому относится данный канал.
    • <string> logo - ссылка на логотип данного канала.


3.Методы действий с Пользователем

3.1.Просмотр всей информации пользователя

В таком случае, будет создан новый пользователь, с заданным в запросе id, активным статусом и промо тарифом (если он существует у компании).

Action:  customer/get

Request: POST

Data:  <int> customer_id

Response:


{

"result":{

"id":"<int>",
"tariff":{

"basic":[<int> basic_group_id]],
"bundle":[<int|array> bundle_group_id],
"promo":[<int> promo_id]

},
"devices":[

{

"uniq":<string> uniq,
"activation_date"выводится как activation_data:<timestamp> activation_date,
"model":<string> model

},

],

"limit_number_devices":4,

"status":<int> status,

"web_url":"<string> url",

"playlists":[]

},

"status":"ok",
"action":"\/customer\/get",
"request":{
"customer_id":"<int> customer_id"}

}

В котором:

  • <int> id - это уникальный идентификатор пользователя в системе оператора

    Если пользователя с заданным id не существует

    Создается новый пользователь с активным статусом и промо тарифом (если он назначен у компании).

  • <int> status - текущий статус пользователя. (Принимает значение 0 - блокированный или 1 - активный).
  • "limit_number_devices":<int>device number- количество устройств, доступные в base tariff.
  • <string> web_url - одноразовая ссылка на веб плеер из личного кабинета пользователя.

    ВНИМАНИЕ!

    Возвращает null - если у пользователя не назначен тарифный план и у компании нет промо тарифа

  • “devices”: - массив с устройствами для выбранного пользователя в котором:
    • <string> uniq - уникальный идентификатор устройства.
    • <int> activation_dateвыводится как activation_data - (timestamp) дата активации устройства.
    • <string> model - модель устройства.
  • "playlists"- массив с плейлистами выбранного пользователя, в котором:
    • <string> uniq - уникальный идентификатор плейлиста
    • <int> activation_date - (timestamp) дата активации устройства.
    • "<string> m3u"- ссылка на плейлист
    • <string> user_agent- данные устройства, которое воспроизводит плейлист

У пользователя может быть до 3-х OmegaTV устройств + возможность просмотра в браузере

  • “tariff”: - массив с доступными для выбранного пользователя тарифами в котором:
    • <int> basic - уникальный номер базового тарифа в системе оператора назначенный выбранному пользователю.
    • <int|array> bundle - уникальный номер(a) дополнительных тарифов в системе оператора назначенные выбранному пользователю.
    • <int> promo - уникальный номер промо тарифа в системе оператора назначенного выбранному пользователю.


Возможные варианты ошибок:

 Ошибка 2201 - неверно задан customer_id.

{

"error":{

"code":2201,

"msg":"Invalid customer_id."

},

"request":{

"customer_id":<int> customer_id

}

}

 Ошибка 1701 - отправлены невалидные данные в customer_id.

{

"error":{

"code":1701,

"msg":"Invalid customer_id."

},

"request":{

"customer_id":<int> customer_id

}

}

3.2.Назначить тариф пользователю.

Action: customer/tariff/set

Request: POST

Data:<int> customer_id - уникальный идентификатор пользователя в системе оператора.

<int> base (REQUIRED) - уникальный идентификатор базового тарифа в системе оператора.

<int|array> bundle - уникальный идентификатор(ы) дополнительных тарифов в системе оператора.


Response:

{

"result":{

"customer_id":"<int>"
“op”:<string> op

},

"status":"ok",

"action":"\/customer\/tariff\/set",

"request":{

"customer_id":<int> customer_id,

"base":<int> base,

"bundle":[<int | array> bundle]

}

}

В котором:

  • <int> customer_id - возвращает уникальный идентификатор пользователя которому успешно установлен тариф.

    Если пользователя с заданным id не существует

    Создается новый пользователь с активным статусом и промо тарифом (если он назначен у компании).

  • <string> op - используется для дебага. (Имеет значение “updated" или "created". На работу метода не влияет).

В случаях, если пользователя с запрошенным id существует и имеет назначенный тариф

Повторный запрос переназначает выбранный тариф на новый.


Возможные варианты ошибок:

 Ошибка 1601 - неверно задан customer_id.

{

"error":{

"code":1601,

"msg":"Invalid customer_id."

},

"request":{

"customer_id":<int> customer_id,

"base":<int> base,

"bundle":<int|array> bundle

}

}

 Ошибка 1602- не задан базовый тариф.

{

"error":{

"code":1602,

"msg":"Invalid Basic Tariff ID."

},

"request":{

"customer_id":<int> customer_id,

“base”:<int> base,

"bundle":<int|array> bundle

}

}

 Ошибка 1611- неверно указан базовый тариф.

{

"error":{

"code":1611,

"msg":"Not mentioned in available Company Basic Tariffs."

},

"request":{

"customer_id":<int> customer_id,

"base"<int> base,

"bundle":<int|array> bundle

}

}

 Ошибка 1603- Не задан бандл (дубль кода).

{

"error":{

"code":1603,

"msg":"Invalid bundle tariff ids."

},

"request":{

"customer_id":<int> customer_id:,

"base"<int> base

}

}

 Ошибка 1610- неверно задан Id для бандла.

{

"error":{

"code":1610,

"msg":"Invalid bundle tariff ids."

},

"request":{

"customer_id":<int> customer_id,

"base"<int> base,

"bundle":<int|array> bundle

}

}

3.3.Заблокировать пользователя.

Action: customer/block

Request: POST

Data: <int> customer_id - уникальный идентификатор пользователя в системе оператора.

Response:

{

"result":{

"status":"blocked"

},

"status":"ok",

"action":"/customer/block",

"request":{

"customer_id":<int> customer_id

}

}

В котором:

<string> status- это статус блокировки пользователя. (При успешной блокировке возвращает “blocked”).

Возможные варианты ошибок:

 Ошибка 2001- не отправлен customer_id

{

"error":{

"code":2001,

"msg":"Invalid customer_id."

},

"request":[]

}

 Ошибка 2002- попытка заблокировать несуществующего пользователя.

{

"error":{

"code":2002,

"msg":"Unknown customer_id"

},

"request":{

"customer_id":<int> customer_id

}

}

 Ошибка 2003- пользователь уже заблокирован.

{

 'error' => {
'code' => 2003,
'msg' => 'Customer is already deactivated'

},

3.4. Активировать пользователя. 

Action:  customer/activate

Request: POST

Data: <int> customer_id - уникальный идентификатор пользователя в системе оператора.

Response:

{

"result":{

"status":"activate"

},

"status":"ok",

"action":"\/customer\/activate",

"request":{

"customer_id":<int> customer_id

}

}

В котором:

<string> status - это статус активации пользователя. (При успешной активации возвращает activate).

Возможные варианты ошибок:

 Ошибка 2101- неверно указан параметр customer_id.

{

"error":{

"code":2101,

"msg":"Invalid customer_id."

},

"request":{

"customer_id":<int> customer_id

}

}

 Ошибка 2102- активация несуществующего пользователя.

{

"error":{

"code":2102,

"msg":"Unknown customer_id"

},

"request":{

"customer_id":<int> customer_id

}

}

 Ошибка 2103- не может активировать пользователя без тарифа.

{

"error":{

"code":2103,

"msg":"Can not activate customer without tariff"

},

"request":{

"customer_id":<int> customer_id

}

}

3.5. Добавить устройство пользователю по коду активации.

Action: customer/device/get_code

Request: POST

Data: <int> customer_id - уникальный идентификатор пользователя в системе оператора.

Response:

{

"result":{

"code":<string> code,

"customer_id":<int> customer_id

},

"status":"ok",

"action":"\/customer\/device\/get_code",

"request":{

"customer_id":<int> customer_id

}

}

В котором:

<string> code - это уникальный код для подключения пользователя в системе оператора. (У пользователя должен быть установлен тариф).

<int> customer_id - уникальный идентификатор пользователя в системе оператора.

Возможные варианты ошибок:


 Ошибка 1701 - неверно задан customer_id.

{

"error":{

"code":1701,

"msg":"Invalid customer_id."

},

"request":{

"customer_id":<int> customer_id }

}

 Ошибка 1702 - Неизвестный customer_id. Не существует customer c таким id или не указан параметр с customer_id.

{

"error":{

"code":1702,

"msg":"Unknown customer_id"

},

"request":{

"customer_id":<int> customer_id

}

}

 Ошибка 1704 - Попытка сгенерировать код кастомеру с исчерпанным лимитом устройств

{

"error":{

"code":1704,

"msg":"Device count per customer exceeded"

},

"request":{

"customer_id":<int> customer_id

}

}

 Ошибка 1705 - не может сгенерировать код пользователю без тарифа.

{

"error":{

"code":1705,

"msg":"Can not generate code for the customer without tariff applied"

},

"request":{

"customer_id":<int> customer_id

}

}

3.6.Удалить устройство у пользователя.

Action: customer/device/remove

Request: POST

Data:<int> customer_id - уникальный идентификатор пользователя в системе оператора.

<string> uniq - уникальный идентификатор hls устройства в системе.

Response:


{

"result":{

"uniq":"<String>"

},

"status":"ok",

"action":"\/customer\/device\/remove",

"request":{

"customer_id":<int> customer_id,

"uniq":<string> uniq

}

}

В котором:

<string> uniq - Это уникальный идентификатор hls устройства в системе.

Возможные варианты ошибок:

 Ошибка 1901 - задан некорректный uniq

{

"error":{

"code":1901,

"msg":"Invalid device uniq."

},

"request":{

"customer_id":<int> customer_id,

"uniq":<string> uniq

}

}

 Ошибка 1902 -не существует устройства с заданным uniq.

{

"error":{

"code":1902,

"msg":"Unknown device"

},

"request":{

"customer_id":<int> customer_id,

"uniq":<string> uniq

}

}

 Ошибка 1905 - не указан customer_id.

{

"error":{

"code":1905,

"msg":"Invalid customer_id."

},

"request":{

"uniq":<string> uniq

}

}

 Ошибка 1906 - заданного пользователя не существует в компании.  

{

"error":{

"code":1906,

"msg":"Unknown customer_id"

},

"request":{

"customer_id":<int> customer_id,

"uniq":<string> uniq

}

}

 Ошибка 1907 - неверно задан customer_id для заданного устройства.

{

"error":{

"code":1907,

"msg":"Wrong device customer"

},

"request":{

"customer_id":<int> customer_id,

"uniq":<string> uniq

}

}

3.7.Добавить устройство пользователю по Uniq.

Action: customer/device/add

Request: POST

Data:<string> uniq- уникальный идентификатор hls устройства в системе.

<int> customer_id- уникальный идентификатор пользователя в системе оператора.

Response:

{

"result":{

"activation_date":<int> activation_date,

"device_id":"<id>"

},

"status":"ok",

"action":"\/customer\/device\/add",

"request":{

"customer_id":<int> customer_id,

"uniq":<string> uniq

}

}

В котором:

<int> activation_date - дата активации устройства. Выдается в timestamp (10 символов).

<int> device_id - идентификатор устройства в системе.

Возможные варианты ошибок:

 Ошибка 1801 - Неверно задан customer_id.

{

"error":{

"code":1801,

"msg":"Invalid customer_id."

},

"request":{

"customer_id":<int> customer_id,

"uniq":<string> uniq

}

}

 Ошибка 1802 - заданного пользователя не существует в компании.

{

"error":{

"code":1802,

"msg":"Unknown customer_id"

},

"request":{

"customer_id":<int> customer_id,

"uniq":<string> uniq

}

}

 Ошибка 1804 - Не может добавить устройство пользователю без выбранного тарифа.

{

"error":{

"code":1804,

"msg":"Can not add device to the customer without tariff"

},

"request":{

"customer_id":<int> customer_id,

"uniq":<string> uniq

}

}

 Ошибка 1805 - неверный uniq.

{

"error":{

"code":1805,

"msg":"Unknown device"

},

"request":{

"customer_id":<int> customer_id,

"uniq":<string> uniq

}

}

 Ошибка 1806 - устройство принадлежит другому пользователю компании.

{

"error":{

"code":1806,

"msg":"Device is already added to another customer"

},

"request":{

"customer_id":<int> customer_id,

"uniq":<string> uniq

}

}

 Ошибка 1810 - превышен лимит устройств у пользователя.

{

"error":{

"code":1810,

"msg":"Device count per customer exceeded"

},

"request":{

"customer_id":<int> customer_id,

"uniq":<string> uniq

}

}


3.8.Список всех клиентов компании и их данные

Action: customer/detailed/list
Request: POST
Data: <int> 'page' - номер запрашиваемой страницы

Метод customer/detailed/list Выводит информацию всех клиентов компании в список.

Страница списка содержит информацию 100 клиентов.

Для вывода данных в ответе, в запросе необходимо указать страницу списка, если ее не указать, то список будет выведен с первой страницы

{

"result":{

"total_items_count":123,

"items_per_page":100,

"pages_count":2,

"current_page":1,

"items":[

"id":"<int>",

"tariff":{

"basic":[<int> basic_group_id],

"bundle":[<int|array> bundle_group_id],

"promo":[<int> promo_id]

},

"devices":[

{

"uniq":<string> uniq,
"activation_date"выводится как activation_data:<timestamp> activation_datе,
"model":<string> model

}

],

"status":<int> status,

"web_url":"<string> url",

"playlists":[

{

"uniq":"<string> url",

"activation_data":null,

"model":"PlaylistDevice",

"url":"<string> m3u",

"user_agent":<string> user_agent,

}

"status":"ok",

"action":"\/customer\/get",

"request":{<int> customer_id}

]

}

В котором:

  • "total_items_count":123- кол-во клиентов компании.
  • "items_per_page":100- кол-во клиентов на одной странице.
  • "pages_count":2-кол-во страниц.
  • "current_page":1- конкретная, отображающаяся страница
  • "items": массив в котором отражаются данные клиента аналогичные методу customer/get:
    • <int> id - это уникальный идентификатор пользователя в системе оператора 

    • <int> status - текущий статус пользователя. (Принимает значение 0 - блокированный или 1 - активный).
    • <string> web_url - одноразовая ссылка на веб плеер из личного кабинета пользователя. 

    • “devices”: - массив с устройствами для выбранного пользователя в котором:
      • <string> uniq - уникальный идентификатор устройства.
      • <int> activation_date выводится как activation_data - (timestamp) дата активации устройства.
      • <string> model - модель устройства.
    • "playlists"- массив с плейлистами выбранного пользователя, в котором:
      • <string> uniq - уникальный идентификатор плейлиста
      • <int> activation_date - (timestamp) дата активации устройства.
      • "<string> m3u"- ссылка на плейлист
      • <string> user_agent- данные устройства, которое воспроизводит плейлист
  • “tariff”: - массив с доступными для выбранного пользователя тарифами в котором:
    • <int> basic - уникальный номер базового тарифа в системе оператора назначенный выбранному пользователю.
      • <int|array> bundle - уникальный номер(a) дополнительных тарифов в системе оператора назначенные выбранному пользователю.
      • <int> promo - уникальный номер промо тарифа в системе оператора назначенного выбранному пользователю.


3.9.Метод поиска кастомера по uniq устройства

Action: customer/get_by_uniq
Request: POST
Data: <String> 'uniq' - 
uniq устройства

Метод customer/get_by_uniq позволяет находить информацию о клиенте по uniq устройства, если устройство пренадлежит текущей компании.

{
    "result": {
        "id""<int> customer_id",
        "tariff": {
            "basic": ["<basic>"],
            "bundle": [],
            "promo": []
        },
        "devices": [
            {
                "uniq""<string> uniq",
                "activation_data""<int> timestamp",
                "model""<string> model",
                "last_activation""<int> timestamp",
                "last_ip""<string>ip",
                "comment": " <string> comment", ... 
            }
        ],
        "limit_number_devices":<int> limit_device_number ,
        "status""<int> status",
        "web_url""<string> web_url",
        "playlists": [
            {
                "uniq""<string> uniq",
                "activation_data""<int> timestamp",
                "model""<string> model",
                "url""<string> playlist_url",
                "user_agent""<string> user-agent",
                "last_activation""<int> timestamp",
                "last_ip""<string>ip",
                "comment": <string> comment
            }
        ]
    },
    "status""ok",
    "action""/customer/get_by_uniq",
    "request": {
        "uniq""<string> uniq"
    }
}


В котором:

  • <int> id - это уникальный идентификатор пользователя в системе оператор
  • “tariff”: - массив с доступными для выбранного пользователя тарифами в котором
    • <int> basic - уникальный номер базового тарифа в системе оператора назначенный выбранному пользователю.
    • <int|array> bundle - уникальный номер(a) дополнительных тарифов в системе оператора назначенные выбранному пользователю.
    • <int> promo - уникальный номер промо тарифа в системе оператора назначенного выбранному пользователю=
  • <int> status - текущий статус пользователя. (Принимает значение 0 - блокированный или 1 - активный).
  • “devices”: - массив с устройствами для выбранного пользователя в котором:
    • <string> uniq - уникальный идентификатор устройства.
    • <int> activation_date - (timestamp) дата активации устройства.
    • <string> model - модель устройства.
    • <string> last_activation - (timestamp) дата последней авторизации устройства.
    • <string> last_ip - последний ip c которого авторизировалось устройство. 
    • <string|null> comment - комментарий к выбранному устройству. 
  • "limit_number_devices":<int>device number- количество устройств, доступные в base tariff.
  • <string> web_url - одноразовая ссылка на веб плеер из личного кабинета пользователя.
  • "playlists"- массив с плейлистами выбранного пользователя, в котором:
        • <string> uniq - уникальный идентификатор плейлиста
        • <int> activation_date - (timestamp) дата активации плейлиста .
        • <string> model - модель браузера.
        • <string> url - ссылка на плейлист
        • <string> user_agent- данные об устройстве, которое воспроизводит плейлист
        • <string> last_activation - (timestamp) дата последней авторизации плейлиста.
        • <string> last_ip - последний ip c которого авторизировался плейлист. 
        • <string|null> comment - комментарий к выбранному плейлисту. 


Возможные варианты ошибок:

 Ошибка 2220 - Неправильно задан Uniq
{
    "error": {
        "code"2220,
        "msg""Invalid device uniq."
    },
    "request": {
        "uniq""<string> строка"
    }
}
 Ошибка 2221 - Отправлен пустой uniq
{
    "error": {
        "code"2221,
        "msg""Empty Uniq."
    },
    "request": {
        "uniq"""
    }
}
 Ошибка 2222 - Устройство пренадлежит другой компании
{
    "error": {
        "code"2222,
        "msg""Unknown device"
    },
    "request": {
        "uniq""<string> uniq"
    }
}



4.Методы HLS Client.

4.1.Список всех устройств в компании.

1.Список всех устройств в компании

Action: device/list
Request: POST
Data: отправляем пустой массив -  [ ]
Response:

{

"result":[

"uniq":<string> uniq,

"serial":<string> serial,

"model":<string> model,

"registration_date":<int> registration_date,

"activation_date":<int>activation_date,

"customer_id":<int> customer_id,

},...


],

"status":"ok",

"action":"\/device\/list",

"request":[]

}

Внимание!!!

Customer_id=0 это промо кастомер. За ним закрепляются все промо устройства компании

В котором:

<string> uniq - это уникальный идентификатор hls устройства в системе.

<string> model - модель устройства

<int> registration_date - (timestamp) дата регистрации устройства.

<int> activation_date -  (timestamp) дата активации устройства.

<int> customer_id - уникальный идентификатор пользователя в системе оператора.

Возможные варианты ошибок:

 Ошибка 2602 - был отправлен непустой массив

{

"error":{

"code":2602,

"msg":"Wrong request data."

},

"request":[string]

}

4.2. Поиска кастомера по uniq устройства 

Поиск кастомера по uniq устройства

Action: customer/get_by_uniq

Request: POST
Data: <string> uniq-уникальный идентификатор устройства/плейлиста в системе оператора.
Response:

{

"result":{

"id":"<int>",
"tariff":{

"basic":[<int> basic_group_id]],
"bundle":[<int|array> bundle_group_id],
"promo":[<int> promo_id]

},
"devices":[

{

"uniq":<string> uniq,
"activation_date":<string> activation_date,
"model":<string> model,
"last_activation":<string> дата последней активации,
"last_ip":<string> ip adress,
"comment":<string> комментарий к устройству 

},... 

],

"limit_number_devices":<int> количество устройств у пользователя,

"status":<int> status,

"web_url":"<string> url",

"playlists":[
"uniq": <string> uniq,
"activation_data":<string> activation_date,
"model":<string> model,
"url":<string> url,
"user_agent":<string> user_agent,
"last_activation":<string> last_activation,
"last_ip":<string> ip adress,
"comment": <string> комментарий к устройству
},...
]

},

"status":"ok",
"action":"customer/get_by_uniq",
"request":{
"uniq":"<string> uniq"}

}

В котором:

  • <int> id - это уникальный идентификатор пользователя в системе оператора

    Если пользователя с заданным id не существует

    Создается новый пользователь с активным статусом и промо тарифом (если он назначен у компании).

  • <int> status - текущий статус пользователя. (Принимает значение 0 - блокированный или 1 - активный).
  • "limit_number_devices":<int>device number- количество устройств, доступные в base tariff.
  • <string> web_url - одноразовая ссылка на веб плеер из личного кабинета пользователя.

    Возвращает null - если у пользователя не назначен тарифный план и у компании нет промо тарифа

  • “devices”: - массив с устройствами для выбранного пользователя в котором:
    • <string> uniq - уникальный идентификатор устройства.
    • <int> activation_dateвыводится как activation_data - (timestamp) дата активации устройства.
    • <string> model - модель устройства.
  • "playlists"- массив с плейлистами выбранного пользователя, в котором:
    • <string> uniq - уникальный идентификатор плейлиста
    • <int> activation_date - (timestamp) дата активации устройства.
    • "<string> m3u"- ссылка на плейлист
    • <string> user_agent- данные устройства, которое воспроизводит плейлист

У пользователя может быть до 5-ти OmegaTV устройств + возможность просмотра в браузере

  • “tariff”: - массив с доступными для выбранного пользователя тарифами в котором:
    • <int> basic - уникальный номер базового тарифа в системе оператора назначенный выбранному пользователю.
    • <int|array> bundle - уникальный номер(a) дополнительных тарифов в системе оператора назначенные выбранному пользователю.
    • <int> promo - уникальный номер промо тарифа в системе оператора назначенного выбранному пользователю.

5.Методы действий с Плейлистами.

Добавление плейлиста абоненту

Action: customer/url/add

Request: POST
Data: <int> customer_id-уникальный идентификатор пользователя в системе оператора.
Response:
{

"result":{

"url":<string> url,

"uniq":<string> uniq

},

"status":"ok",

"action":"\/customer\/url\/add",

request":{

"customer_id":<int> customer_id,

}

}

В котором:

  • <string> url - ссылка на плейлист.
  • <string> uniq- уникальный идентификатор плейлиста.

Удаление плейлиста

Action: customer/url/remove 

Request: POST
Data: <int> customer_id-уникальный идентификатор пользователя в системе оператора.

 <string> uniq- уникальный идентификатор плейлиста в системе.

Response:

{

"result":{

"uniq":<string> uniq

},"

status":"ok",

"action":"\/customer\/url\/remove",

"request":{

"customer_id":<int> customer_id,<string> uniq,

}

}

В котором:

  • <string> uniq- уникальный идентификатор плейлиста.

Возможные ошибки

 Ошибка 1705 - задан некорректный uniq

{

"error":{

"code":1912,

"msg":"Unknown device"

},

"request":{

"customer_id":<int> customer_id,

"uniq":<string> uniq

}

}


6.BetaAPI.


Версия API предназначенная для тестирования пререлизного функционала сервиса.

https://api.beta.hls.tv/



Добавление комментария к устройству пользователя

Action:  device/add_comment

Request: POST

Data:  отправляем uniq и comment  (Max length comment = 30)

Response:
{

"status":"ok",

"request":{

"uniq":<string> uniq,

"comment":<int> comment"

}

}

В котором:

  • <string> uniq- это уникальный идентификатор hls устройства в системе.
  • <int> comment- комментарий к устройству.

"comment":<int> comment так же встречается в ответах методов:

  • device/list
  • customer/get
  • customer/detailed/list



1.c. TimeShift/CatchUp Methods

В данный момент функции TimeShift/CatchUp реализованы на cdnua04.hls.tv

При прохождении авторизации на CDN

Ответ при прохождении AuthV3  дополнен параметром:

timestamp- реальное время сервера в режиме Live

Файл j.son file

Дополнился параметром timeshift, который может принимать значенния 0 и 1

Запрос на получение TimeShift/CatchUp

https://cdnua04.hls.tv/timeshift/get/<playlist>/<ch_id>/<timestamp>/index.json

В ответ приходит ссылка на плейлиста m3u8:
https://cdnua04.hls.tv/timeshift/play/<playlist>/<ch_id>/<session>/stream.m3u8


Пример:
Запрос:
https://cdnua04.hls.tv/timeshift/get/67afdc3ad5b664e5af80ef36e719e3d2/277/1551170000/index.json

В ответ параметр link:
https://cdnua04.hls.tv/timeshift/play/67afdc3ad5b664e5af80ef36e719e3d2/277/kotg2ovr5pg3rhdh8tk0kk7us4/stream.m3u8

В процессе диалога в ответ может прийти ошибка, которая отражается кодом

Описание ошибки

Код ответа json

Код ответ m3u8Текст заглушуки
Токен плейлиста не найден423551Неверно указана ссылка на устройство
Ограничения сессий403553Сессия уже существует
CID нет в плейлисте410552Невозможно воспроизвести текущий канал
на канал действуют ограничения (additional tariff вне компании)416554Канал доступен в другой подсети
нет компании или плейлист без компании412551Неверно указана ссылка на устройство
канал доступен только из Украины422555OmegaTV service can be provided only on th e territory of Ukraine
Timeshift не разрешен (Для компании или канала)424556Timeshift не разрешен

1.d.Интеграция модуля биллинга.


 Nodeny+

1.Выберите пункт настройки в меню слева.






2.Выберите пункт модули в меню слева.

3. В окне модулей выберите OmegaTV из списка.


В строку Публичный ключ API введите public keyкоторый вы можете найти на странице Company Setting admin.hls.tv.

В строку Приватный ключ API введите privat keyкоторый вы можете найти на странице Company Setting admin.hls.tv.

В строку Url API введите https://apiua2.hls.tv/.

Нажмите "сохранить".


В меню Настройки→Услуги кликаем по ссылке создания услуги OmegaTv и заполняем все доступные поля.

После чего нажмите "сохранить".


В редких случаях может возникнуть следующая ошибка:

В таком случае Вам нужно:

  1. Проверить все ли данные введены правильно (должно быть выставлено UTC время);
  2. Включить debug-режим. Он доступен в виде ссылки на главной странице админки. После ее нажатия, на всех страницах у текущего администратора слева вверху под эмблемой появится ссылка Debug. При нажатии, вверху страницы появится лог, из которого можно будет понять почему произошла ошибка.
  3. Обновить систему и perl, после чего заново установить модуль. 

 Abills

Откройте окно добавления модуля.

 


В блоке "Сервисы"

В поле номер, число присваивается автоматически.

Название: Введите имя вашей компании 

plug-in: Введите Omega_tv.

Пользователь PORTAL: Выберите "Control".

Checkbox Отключено: Оставьте не выбранным.

Портал продавца: Оставьте незаполненным.

В блоке "Авторизация"

URL: Введите https://apiua2.hls.tv/.


Логин: Введите публичный ключ, который вы можете найти на странице Company Setting admin.hls.tv.

Пароль: Введите приватный ключ, который вы можете найти на странице Company Setting admin.hls.tv.

DEBUG: Значение 0.

DEBUG Файл: Оставьте незаполненным.

Количество: 1.

 Пример заполнения


Нажмите Тест, после успешного теста сохраните введенные данные нажав добавить.


 Ubilling

Выберите вкладку "Настройки системы" в левой боковой панели.

Выберите вкладку alter.ini в открывшемся окне "Настройки БД".


В открывшуюся консоль внесите параметры:

OMEGATV_ENABLED=1

OMEGATV_PUBLIC_KEY="public key"

OMEGATV_PRIVATE_KEY="private key"

OMEGATV_ENABLED может принимать значения: 1- включен и 0-отключен

public key и private key доступны на странице Company Setting admin.hls.tv.

Для тарификации и подключения подписок необходимо при помощи RemoteAPI внести следующие параметры.


Нажмите на вкладку userstats

Внесите такие параметры в консоль:

OM_ENABLED=1 ;

OM_PROTECTION=1 ;

API_URL="http://billing.isp/" ;

API_KEY="UBxxxxxxxxxxxxxxxxx"

API_URL-URL к вашему Ubilling для взаимодействия по RemoteApi.

API_KEY-Серийный номер вашего Ubilling.

Для тарификации и подключения подписок необходимо при помощи RemoteAPI внести следующие параметры.

20 1 1 * * /bin/ubapi "omcontrol&param=chargefee"

*/10 * * * * /bin/ubapi "omcontrol&param=resurrect"

Запрос chargefee сначала производит тарификацию по всем активным подпискам. Если на счету абонента образовалась задолженность, либо он был заморожен после начисления АП ,подписка абонента будет деактивирована.

Запрос resurrect проверяет неактивные подписки и состояние пользователя. Если абонент ликвидировал задолженность на своем счету, либо его счет был разморожен - активирует профиль пользователя.

После этого ярлык OmegaTV появится на домашней странице "Панель задач".



 Mikbill

Зайдите в MikBill

1.Выберите НастройкиСистемные опцииПараметры.


2. В открывшемся окне выберите IPTV. 


3.Найдите модуль OmegaTV и в строках укажите Public key и Private key, которые вы можете найти на странице Company Setting admin.hls.tv.

4.Нажмите кнопку сохранить.

5.Нажмите кнопку "Тест", если все исправно, отобразится ОК.

6.Закройте окно.


Настройка Услуг

1.Зайдите на Admin.hls.tv перейдите на страничку базовых тарифов (Tariffs→Base). Посмотрите ID тарифа.

 ID Tariff

2. Зайдите в MikBill и выберите Настройки→Справочник→Услуги

3. Создайте новую услугу.

4. В открывшемся окне введите название тарифа и id, которые в базовых тарифах admin.hls.tv.

5. Укажите значение больше 1 в поле "Группа услуг"

6. В поле middleware укажите OmegaTV

7.В поле вид услуг укажите Тариф или Пакет Услуг, для активации Additional тарифа

ВАЖНО

Для активации Additional тарифа у клиента, необходимо назначить Пакет Услуг.
Иначе Additional тариф будет считаться как отдельный, второй тариф



Настройка тарифа

1. Перейдите в карточку Тарифы.

2. Кликните дважды по созданному тарифу.

3. В открывшемся окне, слева выберите вкладку "Подписки".

4. Выберите необходимые услуги из таблицы.

5. Сохраните.



 Nodeny50.32 (50.17; 50.33)

Более детальная информация в файле readme внутри архива.


Установка модуля.

  • Файлы Shlstv.pl, hlstv_admin.pl перенести в /usr/local/nodeny/web, проверить, чтобы были доступны пользователю web-сервера (chown www-data Shlstv.pl).Файлы hlstv.pl, hlstv_sync.pl перенести в /usr/local/nodeny/module (создать, если отсутствует).

  • Папку hlstv перенести в /i/ корня web-сервера (напр, /var/www/i/)

  • Создать файл для лога, проверить, чтобы были доступны пользователю web-сервера (touch /usr/local/nodeny/module/hlstv.log && chown www-data /usr/local/nodeny/module/hlstv.log).

  • Внести данные из hlstv.sql в БД биллинга (mysq bill < hlstv.sql)

  • В биллинге создать доп.тарифы для OmegaTV: Операции -> Настройки -> Тарифы дополнительные. Для удобства рекомендуем использовать названия, соответствующие ОmegaTV (напр: "OmegaTV - Премиум").
    * **ВНИМАНИЕ!** В биллинге необходимо создать доп.тариф с нулевой стоимостью, на который можно переключиться при отписке абонента. Назвать его, к примеру, "Без дополнительных тарифов".
  • В файл /usr/local/nodeny/web/plugin_reestr.cfg внести данные о модуле клиентской статистики:
    ~~~
    123 Shlstv HLS_main OmegaTV 0 0
    ~~~
     Где 123 - следующий свободный номер
  •  Активировать клиентский модуль в биллинге: Операции -> Настройки -> Клиентская статистика, в "Список плагинов" добавить Shlstv, сохранить.

  • Активировать модуль админки в биллинге: Операции -> Настройки -> Плагины админки, добавить: _hlstv_admin_OmegaTV_, сохранить.

  • Произвести настройку в биллинге: Операции -> OmegaTV. Внести свои Public key, Private key, указать тариф "Без дополнительных тарифов", внести идентификаторы OmegaTV и их соответствие доп.тарифам в биллнге.

  • Добавить cron задачу на сервере:
    ~~~
    */10 * * * * /usr/local/nodeny/module/hlstv_sync.pl >> /usr/local/nodeny/module/hlstv.log
    ~~~

OmegaTV_patched_Nodeny_50.tar.gz





1.e.Интеграция модуля для MAG/AURA устройств.

Существует два варианта подключения AuraHD/MAG устройства:

  • При наличии middleware со стороны провайдера
  • При отсутствие middleware со стороны провайдера

При наличии middleware Ministra

Существует два приложений OmegaTV для Ministra:

  • Classic
  • Smart Launcher

Classic/Через Github

Необходимо добавить приложение OmegaTV.

1. Откройте вкладку Приложения → Приложения Classic и нажмите кнопку Добавить приложение по URL.

2. Скопируйте в поле URL ссылку "https://github.com/OmegaTV/stalker_classic" и нажмите Далее,а после Сохранить.

3. После сохранения, OmegaTv отразится в списке приложений; нажмите на имя в списке.

4. Установите последнюю версию приложения и включите ее.

После этого OmegaTV будет доступна на ваших AuraHD/MAG устройствах.


Smart Launcher/Через NPM

1. Откройте вкладку Приложения → Приложения Smart Launcher и нажмите кнопку Добавить новое

2.В открывшемся окне введите omegatv в строку поиска пакета NPM, затем нажмите Сохранить

3. После сохранения, OmegaTv отразится в списке приложений; нажмите на имя в списке.

4. Установите последнюю версию приложения и включите ее. После этого OmegaTV будет доступна на ваших AuraHD/MAG устройствах.



Middleware отсутствует

Подключите устройство к телевизору и сети интернет. Во время загрузки портала нажмите кнопку Меню на пульте.

Перейдите в “Системные настройки”→”Серверы”→"Порталы".

В открывшемся окне Порталов нажмите кнопку пульта F1,выделите строку Портал URL и нажмите кнопку “клавиатура”.

При помощи экранной клавиатуры введите http://s.hls.tv/stalker_portal/c

 

Таким же образом в строку имя введите OmegaTV и сохраните, нажав ОК.

Нажмите кнопку домой 3 раза. В открывшемся окне выбора портала выберите созданный портал, нажав OK.

В открывшемся портале выберите OmegaTv.

Введите код активации в строку


ВАЖНО

OmegaTV поддерживает только одно графическое разрешение - 1280х720.
Если картинка отражается непропорционально в приложении, то следует из  меню портала перейти в "Настройки""Видео""Графическое разрешение" и выбрать 1280х720.

2.Просмотр OmegaTV на устройствах.

2.a.Количество устройств в тарифных планах.

Количество устройств абонента зависит от тарифа:
VIP HD -  5 устройств+ веб-плеер в личном кабинете. 
Преміум - 4 устройства+ веб-плеер в личном кабинете.
UA: Ефір - 3 устройства+ веб-плеер в личном кабинете.

2.b. Активация устройств.

Для активации тарифа на устройстве, необходимо активировать при помощи кода астивации.

Operator-support

  • Откройте admin.hls.tvCustomers.

  • Найдите необходимого абонента в списке и выберите его(или используйте строку быстрого поиска).

  • Нажмите кнопку GET ACTIVATION CODE.

  • Полученный код передайте абоненту

Абонент


2.c.Приложения OmegaTV на SmartTV

Модели SmartTV и установка OmegaTV

Omega TV player для WebOS 3.0 и выше (LG Smart) - https://tinyurl.com/ybbox97t

Omega TV player для Samsung по запросу поиска в Tizen Store

2.d.Приложения OmegaTV на мобильных устройствах.

Omega TV для Android 5.0 и выше - https://tinyurl.com/y9e6ak26

Omega TV для IOS 10 и выше- https://tinyurl.com/ya37kkfx

2.e.Приложения OmegaTV для ТВ приставок.

Omega TV для приставок на Android-TVbox- https://tinyurl.com/y9wv8asd

Omega TV portal для MAG, Aura HD - http://s.hls.tv/stalker_portal/c/

Omega TV player для DuneHD в DuneStore→ТВ→Комьюнити приложения

Приложение для портала Ministra - https://github.com/OmegaTV/stalker_classic

2.f.OmegaTV Playlist.

Url ссылка на плейлист доступна в личном кабинете, по-нажатию кнопки "создать playlist".

Плейлист учитывается в лимите устройств абонента.

OmegaTv ограничивает способы проигрывания плейлистов.

Доступные программы:

  • Smart iptv на Smart телевизорах

  • OTT Player (LG, AppleTV)

  • SS IPTV (LG)

  • VLC Player

  • PeersTV

  • U2C ( Uclan )

  • SS IPTV( Samsung)

Для просмотра в Smart iptv

Используя MAC адрес телевизора и ссылку на плейлист заполнить форму

 Как узнать Mac адрес LG Tv

SMART→Настройки→Сеть→Состояние сети→MAC-адрес

ДЛя просмотра в U2C ( Uclan )

  1. Включите устройство и перейдите в меню Настройки Сети 
  2.  Найдите ip-адрес устройства

  3. вернитесь в Главное Меню и нажмите кнопку "ОРТ" пульте ДУ

  4. Выберите добавить "ресурс"→ "автозагрузка m3u".

  5. Откройте браузер на удобном Вам устройстве (предпочтительно Chrome) и введите найденный ранее ip-адрес.
  6. В открывшемся web интерфейсе введите ссылку на m3u файл, присвойте Имя и Сохраните.
  7. Плейлист станет доступным после перезагрузки устройства.

Для телевизоров LG

Для просмотра в OTT Player

Необходимо залогиниться в личный кабинет пользователя OTTPlayer и следовать описанию

Важно: в настройках плейлиста должен быть выбран html5

Для просмотра в SS IPTV

Загрузите плейлист следуя описанию




Просмотр на Apple TV

SS IPTV ( Samsung )

Переходим по ссылке 

Кликаем на вкладку "Samsung Smart TV"
Согласно инструкции, устанавливаем приложение на телевизор. 
Соглашаемся со всеми пунктами лицензии. 
Загрузите плейлист следуя описанию

Для просмотра в VLC Player

Ctrl+N→Вставьте URL ссылку 

PeersTV

Выберите пункт меню "Плейлист" и вставьте ссылку

3.Описание admin.hls.tv.

Для взаимодействия с тарифами, абонентами и устройствами компании внутри admin.hls.tv cуществует три типа ролевых аккаунтов с соответствующим функционалом:

Admin

Создается сотрудниками OmegaTV при создании компании в админке.

Operator-admin имеет доступ к вкладкам:

Company settings, где может редактировать данные компании, имеет доступ к api ключам  и статистике пользователей.

Accounts, где может создавать и редактировать другие аккаунты компании.

Customers, где может создавать и редактировать информацию о Customer, назначать тариф и просматривать каналы тарифа. 

NGTV Players, в которой может удалять и редактировать статусы STB устройств и информацию по ним.

OmegaTV Players, в которой может удалять и редактировать устройства кастомеров и их каналы.

Tariffs→Base, в которой может просматривать базовые тарифы и их каналы.

Tariffs→Additional, в которой может создавать и просматривать созданные additional тарифы.

Channels→HLS Channels, в которой может просматривать список всех каналов доступных компании для создания additional тарифов.

Channels→Secure Channels в которой может просматривать список secured  (доступных только в сети компании) каналов.

Channels→Local Channels, в которой может создавать новые локальные каналы и редактировать созданные.

Channels→Priorities, в которой может изменить приоитетность канала в списке всех каналов и его номер для переключения на канал цифрами на пульте ДУ.

Manager

Аккаунт Manager создается Админом компании.

Operator-manager имеет доступ к вкладкам:

Company settings, где может редактировать данные компании, имеет доступ к api ключам  и статистике пользователей.

Customers, где может создавать и редактировать информацию о Customer, назначать тариф и просматривать каналы тарифа. 

NGTV Playersв которой отображается список STB устройств на которых установлен NG Player, информация по ним и список каналов устройств.

OmegaTV Players, в котором отражаются устройства кастомеров и их каналы, а также кнопка генерации кода активации для кастомера по id.

Tariffs→Base, в которой может просматривать базовые тарифы и их каналы.

Tariffs→Additional,в которой может просматривать additional тарифы и их каналы.

Channels→HLS Channels, в которой может просматривать список всех каналов доступных компании для создания additional тарифов.

Channels→Secure Channels в которой может просматривать список secured  (доступных только в сети компании) каналов.

Channels→Local Channels, в которой может просматривать список локальных каналов.

Channels→Priorities, в которой может изменить приоитетность канала в списке всех каналов и его номер для переключения на канала цифрам на пульте ДУ.

Support

Аккаунт Support создается Админом компании.

Operator-support имеет доступ к вкладкам:

Customers, где может просматривать и редактировать информацию о Customer, назначать тариф, генерировать код активации и просматривать каналы абонента.

NGTV Players,в которой отображается список STB устройств на которых установлен NG Player, информация по ним и список каналов устройств.

OmegaTV Players, в котором отражаются устройства кастомеров и их каналы, а также кнопка генерации кода активации для кастомера по id.

Tariffs→Base, в которой может просматривать базовые тарифы и их каналы.

Tariffs→Additional, в которой может просматривать additional тарифы и их каналы.

Channels→HLS Channels, в которой может просматривать список всех каналов доступных компании для создания additional тарифов.

Channels→Secure Channels в которой может просматривать список secured  (доступных только в сети компании) каналов.

Channels→Local Channels, в которой может просматривать список локальных каналов.


  • No labels