Начало работы с Ace Stream АПИ

Здравствуйте. На спортивных сайтах выкладывают contentId матча. Скажите, пожалуйста, как по этому Id можно получить m3u8 ссылку

Добавив его (CID) в плейлист медиа-сервера, например. После можно скачать (m3u8) плейлист из веб-интерфейса медиа-сервера.

Решусь задать дилетантский вопрос. Я не могу стутчаться, как здесь описано http://acestream.net/demos/http-api/ с контент id и получать m3u8? Хочу написать простенькую прогу, которая бы принимала contentId, получала бы ссылку на m3u8 и пихала бы её в player. Как я понимаю, нужно ip адрес другой, не тот, который в примере

Это уже сделано - посредством встроенного в движок прокси-сервера или “стороннего” - http://mytalks.ru/index.php?topic=4506.0

Как оба эти подхода, так и свой “велосипед” требуют запущенной копии движка Ace Stream (локального либо удаленного) - именно для того, чтобы “преобразовать” contentId (Р2Р-контент) в другой формат (например в HLS m3u8-плейлист).

Конкретно из примера в цитате в ответе вернется json, в котором, среди прочего, будет и ссылка на m3u8 HLS плейлист.

Будет гораздо проще, если не играться в угадайку, а сразу внятно описать чего хочется, например:

  • имеется исходный контент в виде .торрент файла;
  • требуется - скачать его посредством Ace Stream и получить на выходе m3u8 плейлист;
  • целевое устройство для воспроизведения этого плейлиста - Apple TV.

Хочу написать простенький клиент для ios (для личного пользования), который воспроизводит acestream контент.
Как я понял из http://acestream.net/demos/http-api/ один из вариантов - делать запрос на Api и получать m3u8 ссылку, а затем встявлять её в плеер своего клиента.
Пример из ссылки:

http://127.0.0.1:6878/ace/manifest.m3u8?format=json&sid=0.6045503369100068&transcode_audio=1&transcode_mp3=0&use_api_events=1&use_api_stop=1&id=94c2fd8fb9bc8f2fc71a2cbe9d4b866f227a0209

{
“response”: {
“playback_url”: “http://127.0.0.1:6878/ace/r/5410b27fc567c35c8547e3b69b141215ce3a1fd7/ef0609c43e560697329d93dae4571edb.m3u8”,
“stat_url”: “http://127.0.0.1:6878/ace/stat/5410b27fc567c35c8547e3b69b141215ce3a1fd7/ef0609c43e560697329d93dae4571edb”,
“command_url”: “http://127.0.0.1:6878/ace/cmd/5410b27fc567c35c8547e3b69b141215ce3a1fd7/ef0609c43e560697329d93dae4571edb”,
“event_url”: “http://127.0.0.1:6878/ace/event/5410b27fc567c35c8547e3b69b141215ce3a1fd7/ef0609c43e560697329d93dae4571edb”,
},
“error”: null
}

У меня есть только ContentID, который я беру на одном из сайтов.

Какая схема моих дествий, объясните, пожалуйста? Если я скачаю и запущу движок на компьютере, я могу отправлять запрос вида :

http://ip адрес компьютера :port /ace/manifest.m3u8?format=json&id=клнтентID, взятого с сайта
И получать в ответе json содержащий m3u8 ? Есть ли ещё альтернативный вариант?

Да, но именно для плеера проще отправлять ссылку вида


http://IP:PORT/ace/manifest.m3u8?format=m3u8&id=a5a7e10612daa2b56fd30c95acf4a1ea580bf21a

и получать в ответе готовый m3u8 плейлист.

Для “непрограммиста” так, например:

  • запускаем на ПК Ace Stream;
  • заходим в “Медиа-сервер”, затем в “Настройки медиа-сервера” и выбираем “HLS” для “live/vod stream type”;
  • открываем на iOS любой плеер с поддержкой URL в качестве источника и указываем там URL вида http://IP:PORT/ace/getstream?id=a5a7e10612daa2b56fd30c95acf4a1ea580bf21a

Спасибо за разъяснения


Написал таки клиента для ios. Суть такая: на windows запущен движок, со смартфона делается http запрос, в ответ приходит ссылка, вставляется в плеер.
Но не могу сказать, что такой вариант меня бы устроил. Нет возможности держать сервер постоянно в рабочем состоянии. Хочу, чтобы не было взаимодействия с windows-компьютером. Подскажите, пожалуйста, что нужно для того, чтобы реализовать на ios. Что почитать, с чем ознакомиться?

Что мешает держать сервер в любом другом месте - VPS/VDS (linux/arm), любой линуксовый АРМ мини-хост (RPi и его клоны) и т.д?

Нужно “всего лишь” реализовать движок Ace Stream “c нуля” под iOS/macOS, при этом исходников нет (и у нас пока в планах нет открывать исходники движка).

А если говорить про реализацию движка на ios, то каковы масштабы работы, с какими сложностями пришлось бы столкнуться и что вообще нужно знать для этого? Просто пока движок представляет “чёрный ящик” и как он работает, непонятно

Если грубо, и касаться только части “смотреть”, но не “вещать”, то нужно написать свою торрент-качалку+HTTP прокси сервер и связать это все слоем АПИ.

Какую-то более конкретную, точечную информацию, если вдруг руки дойдут, и знаний хватит, я смогу здесь получить ?

Нет конечно. Разве это не очевидно из фразы “у нас пока в планах нет открывать исходники движка”?

Да, и если вдруг и это не очевидно - для нас не проблема портировать Ace Stream под iOS/macOS. Проблема в том, что нам не нужно приложение, которое нельзя опубликовать в яблочном аппсторе.

Если грубо, и касаться только части "смотреть", но не "вещать", то нужно написать свою торрент-качалку
а подскажите, как по contentId получить торрент файл или поток?

“получить” как и откуда? Если локально, то движок сохраняет торрент-файлы в .ACEStream/collected_torrent_files/
А если через http АПИ и “удаленно”, то см. http://wiki.acestream.media/Engine_HTTP_API#How_to_get_HTTP_stream

я пытаюсь разобраться, как работает движок

Если грубо, и касаться только части "смотреть", но не "вещать", то нужно написать свою торрент-качалку+HTTP прокси сервер и связать это все слоем АПИ.
Ладно, есть не ContentId, есть info hash. С помощью него вы качаете файл с видео трансляции?

тогда начинать нужно с http://www.bittorrent.org/beps/bep_0003.html

в том числе. Про инфохеш проще понять на примере https://ru.wikipedia.org/wiki/Magnet-ссылка
Но в целом infohash, content ID и транспортные файлы (.torrent или .acelive) это все всего лишь разные способы достижения одной и той же цели - получить информацию об участниках и ресурсах Р2Р сети.

Не совсем понимаю, как скрыть ip адрес сервера. Например, если запускаешь стрим на виртуальной машине, на компьютере, то в расшифровке acelive файла анонс отображается например так httр://192.168.0.1:7282/announce

То есть, отображается ip локальной машины. Но, если добавляешь трансляцию на удалённом сервере, то в анонсе отображается ip адрес сервера httр://ip_адрес_сервера:порт/announce

А если сервер скрыт за антидоссом, это практически уязвимость для различных манипуляций нехорошими людьми. При знании реального ip адреса сервера, сам антидосс становится совершенно бесполезным.

Читал документацию, но так и не понял, как формируется этот анонс. Пробовал добавлять --tracker и --metatracker, это работает, но вместе с ними всё равно отображается и реальный ip адрес сервера. Может есть решение этого вопроса? Ткните пожалуйста носом, не могу сам найти.

см. http://wiki.acestream.media/Streaming - для начала попробовать --skip-internal-tracker