117
edits
Changes
no edit summary
==Общее описаниеAbout==Начиная с версии Since version 3.1 появилась возможность управлять движком по протоколу we implemented API to control app engine via HTTP. Для передачи команды движку нужно отправить To do that, you should send appropriate HTTP GET запрос на http-порт движкаquery to engine (default IP:port is 127. Порт по умолчанию0.0.1: 6878.)
==ОграниченияLimitations==You can't use HTTP API движка нельзя использовать с помощью with AJAX-запросов с HTTPS-страницqueries from secured (https) pages, because HTTP API is not secured, and such behaviour (http query from https page) will be blocked by browser.So you must have and serve a dedicated unsecured page on your secured site to work with engine HTTP API.
http://127.0.0.1:6878/webui/api/service?method=get_version&format=jsonp&callback=mycallback
mycallback({"result": {"code": 3002300, "version": "3.1.0-rc2"}, "error": null});</nowiki>
<nowiki><!DOCTYPE html>
<html>
</html></nowiki>
==Методы APImethods==В описаниях методов Terms: <tt>''<engine_address>''</tt> - это ip-адрес движкаapp engine IP address, <tt>''<engine_port>''</tt> - http-порт движкаapp engine HTTP port.Все методы принимают такие общие параметрыCommon params:*'''sid''' - [[#Идентификатор плеераplayer id|идентификатор плеераplayer id]] (необязательный параметрoptional)*'''id''' - идентификатор контента (content id) (условно обязательный параметрconditional param)*'''infohash''' - transport file infohash транспортного файла (.acelive либо or .torrent файлаfile) (условно обязательный параметрconditional param)*'''url''' - ссылка на транспортный файл link to transport file (условно обязательный параметрconditional param)*'''path''' - путь к транспортному файлу в локальной файловой системе local path to transport file (условно обязательный параметрconditional param)
===Получение потока в формате How to get HLSstream===Query:
<tt><nowiki>http://<engine_address>:<engine_port>/ace/manifest.m3u8</nowiki></tt>
<nowiki>http://127.0.0.1:6878/ace/manifest.m3u8?id=dd1e67078381739d14beca697356ab76d49d1a2d</nowiki>
===Получение потока по How to get HTTPstream===Query:
<tt><nowiki>http://<engine_address>:<engine_port>/ace/getstream</nowiki></tt>
<nowiki>http://127.0.0.1:6878/ace/getstream?id=dd1e67078381739d14beca697356ab76d49d1a2d</nowiki>
===Запуск How to play HLS-трансляцииbroadcast===Query:
<tt><nowiki>http://<engine_address>:<engine_port>/hls/manifest.m3u8</nowiki></tt>
<nowiki>http://127.0.0.1:6878/hls/manifest.m3u8?manifest_url=http%3A%2F%2Fwin.cdn.bonus-tv.ru%2FTVB7%2Fntv%2Fplaylist.m3u8</nowiki>
<nowiki><!DOCTYPE html>
<html>
</html></nowiki>
==Расширенные возможностиAdditional features==Движок предоставляет некоторые дополнительные возможности по управлению сессией воспроизведения.Сюда входит возможность отправлять движку дополнительные командыEngine can provide some additional features to control playback session, получать информацию про сессию воспроизведенияsuch as extra commands, а также получать некоторые событияsession statistics and events polling.Для получения доступа к расширенным возможностям необходимо добавить такой параметр при старте сессии воспроизведенияTo access such features, you must add this param to playback session options:
<tt>format=json</tt>
<tt><nowiki>{
"playback_url": playback_url,
;playback_url
:ссылка для получения медиа-потокаmedia stream link
;stat_url
:ссылка для получения информации про сессиюsession statistics link
;command_url
:ссылка для отправки команд движкуengine commands link
;event_url
:ссылка для получения событийsession events link
<tt>event_url</tt> в ответе выдается только в том случае, если страт выполнялся с параметром will be present in engine response only if query contains param <tt>use_api_events</tt>.
===Получение статистикиGetting some stats===Via <tt>stat_url</tt> link app engine should return JSON-formatted structure:*'''status''' - playback session status:**''prebuf'' - prebuffering**''dl'' - playback*'''peers''' - number of connected peers*'''speed_down''' - download speed (Kbytes per sec)*'''speed_up''' - upload (Kbytes per sec)*'''downloaded''' - total downloaded (bytes)*'''uploaded''' - total uploaded (bytes)*'''total_progress''' - download ratio in percentage to media size, valid for VOD only, for live always 0
http://127.0.0.1:6878/ace/stat/6d12f958332ef0bd258053ba1afd833ddf9b74f9/f528764d624db129b32c21fbca0cb8d6
{
"response": {
}</nowiki>
===Отправка команд движкуSending extra commands to the app engine===По ссылке Via <tt>command_url</tt> движок принимает команды для управления сессией воспроизведенияlink you can control playback session.
http://127.0.0.1:6878/ace/cmd/5410b27fc567c35c8547e3b69b141215ce3a1fd7/ef0609c43e560697329d93dae4571edb?method=stop
{
"response": "ok",
}</nowiki>
===Получение событий от движкаGetting events from the app engine===Ссылка Via <tt>event_url</tt> используется для получения событий от движка методом link you can get events from the app engine, using "long polling" method.
In the versions prior to 3003600 <tt>response</tt> field contains "JSON as string" data.
В версиях до 3003600 в поле <tt>response</tt> передается не сам JSON-объект, а его строковое представление.
http://127.0.0.1:6878/ace/event/5410b27fc567c35c8547e3b69b141215ce3a1fd7/ef0609c43e560697329d93dae4571edb
{
"response": {
}
{
"response": "{\"name\": \"got_codec_info\"}, \"params\": {\"audio_codec_id\": 86018, \"video_codec_id\": 28}",
<nowiki>{
"response": null,
}</nowiki>
====Список событийEvents list====
;missing_content
:движок не может найти запрашиваемый сегмент при воспроизведении quered fragment cannot be found (HLS (плеер должен перемотать на playback). Player should fast-forward to keep up with "live)" stream.
;got_codec_info
:доступна информация по кодекам потокаstream codec data is ready.:;параметрыparams:::video_codec_id - идентификатор видеокодекаvideo codec id::audio_codec_id - идентификатор аудиокодекаaudio codec id:Идентификаторы кодеков взяты из библиотеки audio/video IDs corresponded to ffmpeglibavcodec, их можно найти [https://ffmpeg.org/doxygen/trunk/avcodec_8h_source.html здесьfull list here]:Данное событие можно использовать для вывода сообщения в случаеthis event can be useful, если плеер не поддерживает данные кодекиwhen player do not support such codec(s).
;segmenter_failed
:встроенный в движок built-in HLS-сегментатор не смог обработать поток (плеер должен остановить воспроизведение)segmenter failed to process stream. Player should stop the playback.
;download_stopped
:движок остановил воспроизведениеengine has stopped playback:;параметрыparams::<tt>reason</tt> - причина остановки; возможные значенияstop reason, possible values::::<tt>missing_option</tt> - отсутствует платная опцияcontent not free, необходимая для воспроизведения данного контента"paid option" is missing.::<tt>option</tt> - идентификатор отсутствующей опции missing option ID (для for <tt>reason=missing_option</tt>)
====Пример на javascriptJavascript example====Данный пример использует библиотеку Using [https://jquery.com jQuery]library.
<nowiki>function startEventListener() {
startEventListener("http://127.0.0.1:6878/ace/event/5410b27fc567c35c8547e3b69b141215ce3a1fd7/ef0609c43e560697329d93dae4571edb");</nowiki>
==<div id="stop-notifications"></div>Получение уведомлений об отсутствии платных опцийNotifications about missing paid option==В определенных ситуациях для воспроизведения контента может понадобится наличие у пользователя той или иной платной опцииIn some cases user must have a permit (the paid option) to playback some content. При отсутствии опции движок остановит воспроизведение и уведомит пользователя о необходимости приобрести опцию If such permit not granted, then app engine will stop the playback and send a notification to user (для этого будет открыта страница в браузере по умолчаниюby showing some predefined text in the default browser).This behaviour can be overrided, and then client API will handle user notifications by itself. To do this, engine playback session should be started with <nowiki>use_stop_notifications=1</nowiki> param.In this case at playback stop app engine will not send notification to user, but send a event to client.
{
"extra_data": {
}</nowiki>
http://127.0.0.1:6878/ace/manifest.m3u8?id=c894b23a65d64a0dae2076d2a01ec6bface83b01&format=json&use_api_events=1&use_stop_notifications=1
{
}
http://127.0.0.1:6878/ace/event/6d12f958332ef0bd258053ba1afd833ddf9b74f9/f528764d624db129b32c21fbca0cb8d6
{
"response": {
}</nowiki>
==Идентификатор плеераPlayer ID==Идентификатор плеера Player ID - произвольная строкаrandom string, которая идентифицирует плеер при обращении к движкуused for impersonate player during engine connect session. В качестве идентификатора лучше всего использовать случайное число. Предназначение идентификатора плеера Player ID purpose - дать движку возможность отличать запросы одного плеера от другого. Это связано с таким ограничением - нельзя просматривать одну и ту же app engine should distinguish one player from another, as in the current engine implementation user cannot play the same live-трансляцию через движок одновременно в двух плеерах. При возникновении такой ситуации результаты непредсказуемы stream with two (трансляция может начать идти с перебоями в обоих плеерахor more). В связи с этим движок перестает отдавать плееру данные по трансляции, если эту же трансляцию запустили в другом плеереplayers from one engine, но делает это только в том случаеand engine will stop to serve requests from one player, если может отличить один плеер от другогоwhen got a new request from another.