Open main menu

Ace Stream Wiki β

Changes

Engine API/en

19,426 bytes added, 16:03, 24 December 2012
no edit summary
'''Data exchange with TS Engine APIhappens via TCP protocol.''' '''By default TS Engine accepts incoming connections in port 62062.'''  == General form of commands ==Each command must consist of a string terminated by a separator \r\n Most of commands have such form: <tt>'''CMD [param1] [param2] ...'''</tt> where <tt>'''CMD'''</tt> - predefined command name <tt>'''param1, param2 ...'''</tt> - command's parameters, separated by a space == Commands' types == All commands are divided into incoming and outgoing. Incoming commands are sent from a client to TS Engine. Client is any software that uses TS Engine functions. Using incoming commands the client controls TS Engine. Outgoing commends are sent from TS Engine to the client. This type of commands is used to inform the client about work of TS Engine. == Synchronous commands == Most of incoming commands are performed asynchronously, ie. for these commands there is no such thing as "response to command". '''Examples of asynchronous commands:''' - client sends LOADASYNC, after loading content TS Engine sends LOADRESP after a while - client sends START, after the end of pre-buffering TS Engine sends PLAY  But there are also commands that are performed synchronously, in "request-response" mode. At the moment, there are two such commands: '''LOAD''' and '''GETPID'''. Synchronous command assumes the response, sent from TS Engine to the client as a string, starting with ##. Processing of synchronous commands from client's side should look like this: - client sends a command (for example, "GETPID qwerty 0 0 0") and waits for response from TS Engine - if a message starting with ## is received from TS Engine, this message is considered as response to synchronous command (for example, ##12345) ==Incoming commands == <tt>'''HELLOBG'''</tt> Используется в рамках процедуры "рукопожатия" между клиентом и TS Engine. Эта команда должна быть отправлена клиентом сразу после установления tcp-соединения с TS Engine. Соединение с TS Engine считается успешным после того, как клиент получил от TS Engine ответ на "рукопожатие" - команду HELLOTS  <tt>'''READY'''</tt> Информирует TS Engine о том, что клиент готов принимать исходящие команды  <tt>'''LOAD TORRENT''' <torrent_url> <developer_id> <affiliate_id> <zone_id> '''LOAD INFOHASH''' <torrent_infohash> <developer_id> <affiliate_id> <zone_id> '''LOAD PID''' <player_id> '''LOAD RAW''' <torrent_data> <developer_id> <affiliate_id> <zone_id> '''LOADASYNC''' <request_id> '''TORRENT''' <torrent_url> <developer_id> <affiliate_id> <zone_id> '''LOADASYNC''' <request_id> '''INFOHASH''' <torrent_infohash> <developer_id> <affiliate_id> <zone_id> '''LOADASYNC''' <request_id> '''PID''' <player_id> '''LOADASYNC''' <request_id> '''RAW''' <torrent_data> <developer_id> <affiliate_id> <zone_id></tt> Данные команды выполняют загрузку содержимого торрент-файла и используются для того, чтобы клиент мог получить список названийфайлов в интересующем торрент-файле. Команды LOAD выполняются синхронно, команды LOADASYNC - асинхронно (ответ приходит в исходящей команде LOADRESP). Более предпочтительным методом является асинхронная загрузка. '''Параметры:''' <tt>'''request_id'''</tt> - случайное целое число - идентификатор запроса LOADASYNC; этот же идентификатор будет отослан клиенту в команде LOADRESP после того,как будет получен список файлов; данный идентификатор служит для того, чтобы клиент в случае отправки нескольких запросов LOAD точно знал, на какой из этих запросов получен ответ <tt>'''torrent_url'''</tt> - ссылка на торрент файл (например, http://sometracker.com/torrent/12345) <tt>'''torrent_infohash'''</tt> - infohash торрента <tt>'''player_id'''</tt> - код плеера <tt>'''torrent_data'''</tt> - содержимое торрент-файла в кодировке base64 <tt>'''developer_id'''</tt> - код разработчика (если неизвестно, необходимо передавать 0) <tt>'''affiliate_id'''</tt> - код партнера (если неизвестно, необходимо передавать 0) <tt>'''zone_id'''</tt> - код зоны партнера (если неизвестно, необходимо передавать 0)  <tt>'''START TORRENT''' <torrent_url> <file_indexes> <developer_id> <affiliate_id> <zone_id> '''START INFOHASH''' <torrent_infohash> <file_indexes> <developer_id> <affiliate_id> <zone_id> '''START PID''' <player_id> <file_indexes> '''START RAW''' <torrent_data> <file_indexes> <developer_id> <affiliate_id> <zone_id> '''START URL''' <direct_url> <file_indexes> <developer_id> <affiliate_id> <zone_id>)</tt> Данные команды используются для начала загрузки определенного файла из торрент-файла либо для начала загрузки файла по прямой ссылке (START URL) '''Параметры:''' <tt>'''file_indexes'''</tt> - список индексов файлов из торрент-файла, которые необходимо загружать. Индексы файлов клиент получает в сообщении LOADRESP разделенных запятой. Индексы начинаются с нуля и соответствуют списку файлов,который был получен в результате выполнения команды LOAD. Например, если в торрент-файле всего один видео-файл, то необходимо отправлять индекс 0. Если в торренте пять видео-файлов и необходимо начать проигрывание первого, но при это загружать остальные, то отправляется 0,1,2,3,4. Если нужно проиграть третий файл, и не загружать другие, отправляется 2. <tt>'''torrent_url'''</tt> - ссылка на торрент файл (например, http://sometracker.com/torrent/12345) <tt>'''torrent_infohash'''</tt> - infohash торрента <tt>'''player_id'''</tt> - код плеера <tt>'''torrent_data'''</tt> - содержимое торрент-файла в кодировке base64 <tt>'''direct_url'''</tt> - прямая ссылка на файл (например, http://somesite.com/files/video.mp4) <tt>'''developer_id'''</tt> - код разработчика (если неизвестно, необходимо передавать 0) <tt>'''affiliate_id'''</tt> - код партнера (если неизвестно, необходимо передавать 0) <tt>'''zone_id'''</tt> - код зоны партнера (если неизвестно, необходимо передавать 0)  <tt>'''GETPID''' <infohash> <developer_id> <affiliate_id> <zone_id></tt> Получение кода плеера по набору параметров. Эта команда является синхронной командой (см.ниже). В ответ отправляется код плеера, либо пустая строка, если код плеера не может быть получен  <tt>'''SHUTDOWN'''</tt> Закрыть соединение с клиентом.  <tt>'''STOP'''</tt> Остановить загрузку файла, который загружается в данный момент.  <tt>'''DUR''' <video_url> <duration></tt> Сообщить TS Engine о длительности видео-файла, который в данный момент проигрывается клиентом.Данная команда должна отправлять сразу после того, как клиент определил длительность контента. '''Параметры:''' <tt>'''video_url'''</tt> - ссылка на видео, которая была отправлена клиенту после окончания пребуферизации <tt>'''duration'''</tt> - длительность в миллисекундах  <tt>'''PLAYBACK''' <video_url> <event></tt> Сообщить TS Engine о процентном соотношении проигранного видео Данная команда особенно важна, когда идет прогрывание рекламных роликов - переход к основному видео происходит только после того,как TS Engine получил команду PLAYBACK 100 (т.е. после того, как клиент полность проиграл рекламный ролик) '''Параметры:''' <tt>'''video_url'''</tt> - ссылка на видео, которая была отправлена клиенту после окончания пребуферизации <tt>'''event'''</tt> - одно из данных событий: 0 - начало проигрывания 25 - проиграно 25% видео 50 - проиграно 50% видео 75 - проиграно 75% видео 100 - проиграно 100% видео == Исходящие команды == <tt>'''HELLOTS'''</tt> ответная команда в рамках процедуры рукопожатия  <tt>'''AUTH''' <auth_level></tt> Уровень доступа пользователя <tt>auth_level</tt> - целое число - уровень доступа На данный момент возможны два значения уровня доступа: 0 - пользователю не доступны расширенные функции (перемотка и проигрывание файлов из торрента с несколькими видео-файлами) 1 - пользователю доступны расширенные функции  <tt>'''STATE''' <state_id></tt> Информация о текущем статусе TS Engine  <tt>'''SHUTDOWN'''</tt> TS Engine завершил работу  <tt>'''PLAY''' <video_url></tt> <tt>'''PLAYAD''' <video_url></tt> <tt>'''PLAYADI''' <video_url></tt> Начать проигрывание видео по ссылке video_url (данная ссылка ведет на http-сервер, встроенный в TS Engine). <tt>'''PLAY'''</tt> - проигрывание основного видео <tt>'''PLAYAD'''</tt> - проигрывание непрерываемого рекламного ролика (пользователь не может перемотать либо пропустить данный рекламный ролик) <tt>'''PLAYADI'''</tt> - проигрывание прерываемого рекламного ролика (пользователь может перемотать либо пропустить данный рекламный ролик)  <tt>'''PAUSE'''</tt> TS Engine начал буферизацию, так как недостаточно данных для проигрывания видео без остановки  <tt>'''RESUME'''</tt> TS Engine завершил буферизацию  <tt>'''LOADRESP''' <request_id> <response></tt> Ответ на команду LOAD <tt>'''request_id'''</tt> - идентификатор запроса <tt>'''response'''</tt> - список файлов в формате json в такого вида: { "status": 1, "infohash": "abcd1234", "files": [ ["file1.mp4", 0], ["file2.avi", 1], ["file3.mkv", 5] ] } <tt>'''status'''</tt> - 0: в торренте нет видео файлов, 1 - в торренте один видео файл, 2 - в торренте более одного видео файла <tt>'''infohash'''</tt> - infohash торрента <tt>'''files'''</tt> - список файлов; это массив, каждый элемент в котором состоит из массива из двух элементов: первый - название файла, второй - позиция файла в торренте (эта позиция должна отправляться в команде START для указания, какой именно файл необходимо загружать, если их несколько). Имена файлов передаются в кодировке UTF-8 в urlencoded виде.  <tt>'''INFO''' <message_id>;<message_text></tt> Информационное сообщение <tt>'''message_id'''</tt> - код сообщения <tt>'''message_text'''</tt> - текст сообщения   <tt>'''STATUS''' <status_string></tt> Данное сообщение отправляется периодически для информирования клиента о текущем статусе загрузки контента <tt>'''status_string'''</tt> - строка описанного ниже формата  Если идет проигрывание основного контента  <tt>STATUS main:status_string</tt>  Если идет проигрывание рекламного ролика:  <tt>STATUS main:status_string|ad:status_string</tt>  <tt>'''status_string:'''</tt> TS Engine ничего не делает - <tt>'''idle'''</tt> ошибка - <tt>'''err;error_id;error_message'''</tt> (код и описание) проверка - <tt>'''check;progress'''</tt> пребуферизация - <tt>'''prebuf;progress;time'''</tt> закачка - <tt>'''dl'''</tt> буферизация - <tt>'''buf;progress;time'''</tt> ожидание достаточной скорости - <tt>'''wait;time'''</tt>  Ко всем <tt>status_string</tt> (кроме <tt>idle, err, check</tt>) добавляются общие данные:  <tt>total_progress;immediate_progress;speed_down;http_speed_down;speed_up;peers;http_peers;downloaded;http_downloaded;uploaded</tt> <tt>'''total_progress'''</tt> - сколько всего закачано по данному файлу <tt>'''immediate_progress'''</tt> - сколько непрерывных данных закачано начиная с текущей позиции (для отображения кол-ва закачанного в бегунке)  Все числа передаются как integer. Все progress принимают значение от 0 до 100.  '''Примеры:''' <tt>STATUS main:prebuf;45;30|ad:buf;69 STATUS main:dl|ad:dl</tt> '''Пример трансформация статусов в текстовые сообщения, понятные пользователю:'''  <tt>check - Checking xx% prebuf - Prebuffering xx% buf - Buffering xx% wait - Waiting sufficient download speed err - выводим сообщение об ошибке dl, idle - ничего не выводим</tt> == События == <tt>'''EVENT event_name param1_name=param1_value param2_name=param2_value ...'''</tt> Параметры не обязательны. Значения параметров - <tt>'''urlencoded utf-8'''</tt>   == Примеры == <tt>'''>>'''</tt> - сообщения от клиента к TS Engine <tt>'''<<'''</tt> - сообщения от TS Engine к клиенту  1) Проигрывание торрент-файла по ссылке без рекламных роликов (необходимость проигрывания рекламных роликов определяет TS Engine). Для загрузки содержимого торрента используется асинхронная команда LOADASYNC. Торрент файл содержит один видео-файл.  handshake  <tt>>>HELLOBG <<HELLOTS</tt> client is ready to receive messages  <tt>>>READY</tt> advanced functions are available for user  <tt><<AUTH 1</tt> load torrent by link  <tt>>>LOADASYNC 467763 TORRENT http://rutor.org/download/67346 0 0 0 <<LOADRESP 467763 {"status": 1, "files": <nowiki>[["Prey%202_%20E3%202011%20Official%20Trailer_2.mp4", 0]]</nowiki>, "infohash": "4c78e1cf0df23b4f5a16a106829ebed710cb52e0"}</tt> get player's code (for example, to show it to user)  <tt>>>GETPID 4c78e1cf0df23b4f5a16a106829ebed710cb52e0 0 0 0 <<##36ae4c89ab45b4010b1461c513da38d007356195</tt> start video pre-buffering  <tt>>>START TORRENT http://rutor.org/download/67346 0 0 0 0</tt> pre-buffering is in the process  <tt><<STATE 1 <<STATUS main:prebuf;0;2147483447;0;0;0;0;0;0;0;0;0;0 <<STATUS main:prebuf;0;2132;0;0;29;0;0;8;0;131072;0;0 <<STATUS main:prebuf;8;942;0;0;60;0;0;9;0;393216;0;0 <<STATUS main:prebuf;50;591;0;0;87;0;0;8;0;835584;0;0 <<STATUS main:prebuf;75;497;0;0;98;0;0;8;0;1146880;0;0 <<STATUS main:prebuf;91;448;0;0;105;0;0;8;0;1441792;0;0</tt> pre-buffering is finished, client gets a link for content playback  <tt><<PLAY http://127.0.0.1:6878/content/4c78e1cf0df23b4f5a16a106829ebed710cb52e0/0.673752283974 <<STATE 2</tt> client sends content duration (~201 seconds)  <tt>>>DUR http://127.0.0.1:6878/content/4c78e1cf0df23b4f5a16a106829ebed710cb52e0/0.673752283974 201964</tt> client informs that playback was started  <tt>>>PLAYBACK http://127.0.0.1:6878/content/4c78e1cf0df23b4f5a16a106829ebed710cb52e0/0.673752283974 0</tt> TS Engine loads content  <tt><<STATUS main:dl;0;0;110;0;0;8;0;1622016;0;0 <<STATUS main:dl;0;0;128;0;0;8;0;2965504;0;0 <<STATUS main:dl;0;0;130;0;0;8;0;3129344;0;0</tt> TS Engine doesn't have enough data for playback, starts buffering  <tt><<PAUSE <<STATE 3 <<STATUS main:buf;0;315;0;0;130;0;0;8;0;3260416;0;0 <<STATUS main:buf;90;299;0;0;133;0;0;8;0;3866624;0;0 <<STATUS main:buf;90;278;0;0;138;0;0;8;0;4390912;0;0</tt> buffering is finished  <tt><<RESUME <<STATE 2 <<STATUS main:dl;0;0;141;0;0;8;0;4898816;0;0</tt> client lost 25% of content  <tt>>>PLAYBACK http://127.0.0.1:6878/content/4c78e1cf0df23b4f5a16a106829ebed710cb52e0/0.673752283974 25 <<STATUS main:dl;0;0;141;0;0;8;0;4898816;0;0 <<STATUS main:dl;0;0;146;0;0;7;0;8388608;0;0</tt> client lost 50% of content  <tt>>>PLAYBACK http://127.0.0.1:6878/content/4c78e1cf0df23b4f5a16a106829ebed710cb52e0/0.673752283974 50 <<STATUS main:dl;0;0;145;0;0;7;0;9404416;0;0</tt> client lost 75% of content  <tt>>>PLAYBACK http://127.0.0.1:6878/content/4c78e1cf0df23b4f5a16a106829ebed710cb52e0/0.673752283974 75 <<STATUS main:dl;0;0;146;0;0;7;0;9568256;0;0</tt> stop content loading  <tt>>>STOP <<STATE 0</tt> disconnect  <tt>>>SHUTDOWN <<SHUTDOWN</entt>