Streaming

From Ace Stream Wiki
Revision as of 12:41, 10 September 2013 by Anton (talk | contribs) (Запуск трансляции)
Jump to: navigation, search

Установка

Установка ACE Stream на Debian/Ubuntu из репозитория

Шаг 1

Добавить ссылку на соответствующий репозиторий в файл /etc/apt/sources.list.

Репозиторий следует выбирать в зависимости от операционной системы.

Debian 6+:

deb http://repo.acestream.org/debian/ squeeze main
либо
deb http://repo.acestream.org/debian/ sid main

Примечание: пакеты в репозитории sid собраны с зависимостями, которые соответствуют официальным sid-репозиториям Debian. Если вы не знаете, какой репозиторий выбрать, используйте squeeze.

Ubuntu 11.10:

deb http://repo.acestream.org/ubuntu/ oneiric main

Ubuntu 12.04:

deb http://repo.acestream.org/ubuntu/ precise main

Ubuntu 12.10:

deb http://repo.acestream.org/ubuntu/ quantal main

Ubuntu 13.04:

deb http://repo.acestream.org/ubuntu/ raring main

Шаг 2

Установка публичного ключа. Для этого необходимо выполнить следующую команду:

Debian:

wget -O - http://repo.acestream.org/keys/acestream.public.key | apt-key add -

Ubuntu:

sudo wget -O - http://repo.acestream.org/keys/acestream.public.key | sudo apt-key add -

Шаг 3

Установка нужного пакета. Например, для установки движка нужно установить пакет acestream-engine

Debian

apt-get update
apt-get install acestream-engine

Ubuntu

sudo apt-get update
sudo apt-get install acestream-engine

В репозитории для Ubuntu доступны следующие пакеты:

  • acestream-engine - движок
  • acestream-mozilla-plugin - плагин для браузеров
  • acestream-player - десктопный плеер
  • acestream-player-data - набор общих библиотек для плеера и плагина
  • acestream-full - полный пакет, который включает в себя все вышеперечисленные

Для Debian доступен только движок (acestream-engine).

Установка пакет ACE Stream на Ubuntu из deb-пакета

Можно установить ACE Stream на Ubuntu без использования репозитория. Для этого необходимо скачать установочный пакет по одной из ссылок ниже и установить пакет через менеджер пакетов (например, двойным кликом на скачанный файл пакета).

Пакет для 32-битных версий Ubuntu:

http://dl.torrentstream.org/products/acestream-full/ubuntu/i368/latest

Пакет для 64-битных версий Ubuntu:

http://dl.torrentstream.org/products/acestream-full/ubuntu/amd64/latest

Поддерживаемые версии Ubuntu: 11.10, 12.04, 12.10

Данный установочный пакет является аналогом пакета acestream-full из репозитория и включает в себя движок, плеер и плагин для браузеров.

Установка Ace Stream на CentOS

Для установки на CentOS необходимо:

  • наличие установленного python 2.6
  • наличие установленного модуля python-argparse
  • скачать пакет, соответствующий версии CentOS (ссылки ниже)
  • распаковать скачанный архив и скопировать содержимое в папку /usr

На данный момент доступны такие пакеты:

Данные пакеты тестировались на версиях 5.8 и 6.3 соответственно

Android

Пакет для установки Ace Stream for Android: http://dl.acestream.org/android/acestream-2.1.5.apk

Информация для разработчиков

Ace Stream for Android выполнен в виде сервиса, к которому могут подключаться сторонние приложения. AIDL-файлы для подключения к Ace Stream:

После того, как стороннее приложение подключается к сервису Ace Stream, происходит следующее:

  • если Ace Stream не запущен, то он запускается
  • приложение получает порт для работы с Ace Stream Engine API через callback onStartEnd()
  • приложение начинает работу с движком по API

Запуск трансляции

Основные термины

  • Источник - программа, которая принимает на вход HTTP-поток трансляции и обеспечивает просмотр трансляции с помощью ПО Ace Stream
  • Узел поддержки - программа, позволяющая масштабировать трансляцию за счет использования дополнительного серверного оборудования и интернет-каналов
  • Клиент - ПО Ace Stream, которое используется для просмотра трансляции
  • Timeshift - временной интервал, в рамках которого в клиенты могут осуществлять перемотку трансляции

Переход с версий 2.0.х на версию 2.1 и выше

Команда acestreamengine

Начиная с версии 2.1 Ace Stream Engine для Linux представляет собой один исполняемый файл acestreamengine, который работает в различных режимах в зависимости от заданных параметров.

Режим работы задается одним из следующих параметров:

  • --client-console - запустить движок в режиме клиента из консоли (без графического интерфейса)
  • --client-wx - запустить движок в режиме клиента с графическим интерфейсом WX
  • --client-gtk - запустить движок в режиме клиента с графическим интерфейсом GTK
  • --stream-source - запустить источник трансляции
  • --stream-node - запустить узел поддержки
  • --create-transport - создать транспортный файл из существующего контента (VOD)
  • --create-transport-multi - создать мультипотоковый транспортный файл
  • --version - показать версию движка

Каждый режим работы имеет свои обязательные и необязательные параметры, описанные в соответствующих разделах.

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

  • --log-stdout - выводить информацию в STDOUT
  • --log-stderr - выводить информацию в STDERR
  • --log-file PATH - выводить информацию в указанный файл
  • --log-max-size SIZE - максимальный размер файла (в байтах)
  • --log-backup-count COUNT - сколько резервных логов хранить (резервный лог файл создается при достижении лимита, указанного паметром --log-max-size)
  • --log-file-buffer SIZE - включить буферизацию вывода в файл (с использованием буфера указанного размера в байтах)
  • --log-syslog HOST - выводить информацию в syslog-сервер по указанному адресу
  • --log-syslog-port PORT - порт syslog-сервера
  • --log-syslog-facility FACILITY - используемый facility
  • --log-syslog-buffer SIZE - включить буферизацию вывода в syslog (с использованием буфера указанного размера в байтах)

Общая схема работы

Организация трансляции начинается с запуска источника (команда acestreamengine-stream). Источник принимает на вход HTTP-поток (в данный момент поддерживаются HTTP-потоки с инкапсуляцией MPEG-TS) с оригиналом трансляции и после запуска создает файл с расширением acelive. Данный файл является уникальным идентификатором трансляции и используется клиентами для подключения и просмотра.

Синтаксис команды acestreamengine --stream-source

Команда acestreamengine --stream-source запускает источник трансляции.

обязательные параметры

  • --name NAME - название трансляции (это название используется при создании файла acelive и других служебных файлов)
  • --source SOURCE - источник (ссылка на http-поток)
  • --bitrate BITRATE - средний битрейт потока в байтах в секунду

необязательные параметры

  • --title TITLE - "читабельное" название трансляции (это название выводится у клиентов). Если не задано, берется из --name
  • --destdir DESTDIR - устаревший параметр, лучше использовать --cache-dir и --publish-dir
  • --cache-dir CACHE_DIR - папка для создания служебных файлов (кеш трансляции и другие)
  • --publish-dir PUBLISH_DIR - папка, в которой будет создан acelive-файл
  • --piecesize PIECESIZE - размер куска в байтах (если не задан, выставляется автоматически в зависимости от битрейта)
  • --duration DURATION - размер кеша трансляции в формат ЧЧ:ММ:СС (по умолчанию один час: 01:00:00)
  • --host HOST - вручную задать адрес локального трекера
  • --port PORT - порт, на котором работает движок. По умолчанию 7764.
  • --skip-internal-tracker - отключить локальный трекер
  • --add-authorized-peers - добавить список авторизованных пиров в acelive файл
  • --private-source - сделать источник приватным
  • --support-node SUPPORT_NODE - добавить узел поддержки (в формате ip:port). Этот параметр может встречаться несколько раз, если нужно добавить несколько узлов поддержки.
  • --tracker TRACKER - добавить трекер (announce url). Этот параметр может встречаться несколько раз.
  • --maxclients MAXCLIENTS - максимальное количество пиров, на которые одновременно отдаются данные с источника. По умолчанию 7.
  • --log-debug DEBUG - установить уровень отладки (по умолчанию 0 - минимальный)
  • --source-read-timeout SECONDS - таймаут на чтение данных из оригинального источника (в секундах). По умолчанию 30.
  • --source-reconnect-interval SECONDS - интервал в секундах, через который движок попробует повторно подсоединиться к оригинальному источнику при обрыве связи. По умолчанию 5.
  • --pid-file-dir PATH - папка, в которой будет создан pid-файл движка. По умолчанию /tmp.
  • --provider-key - ключ провайдера (для партнерской программы)
  • --content-id - идентификатор контента (для партнерской программы)
  • --permanent - отметить трансляцию как постоянно действующую
  • --date-start YYYY-MM-DD HH:mm:ss - указать дату и время начала трансляции (для одноразовых трансляций)
  • --date-end YYYY-MM-DD HH:mm:ss - указать дату и время окончания трансляции (для одноразовых трансляций)
  • --premium - запросить статус "премиум" для трансляции
  • --upload-limit - ограничить скорость отдачи (в байтах/с, по умолчанию 0 - не ограничивать)
  • --max-connections - максимальное общее кол-во соединений (по умолчанию 1000)
  • --max-peers - максимальное кол-во подключений к пирам (по умолчанию 50)
  • --service-remote-access - разрешить удаленный просмотр статистики
  • --service-access-token - ключ доступа для удаленной статистики
  • --stats-report-interval - интервал в секундах между обновлениями внутренней статистики (по умолчанию 60)
  • --stats-report-peers - обновлять данные по пирам во внутренней статистике

дополнительно

  • -h, --help - показать описание команд

Синтаксис команды acestreamengine --stream-node

Команда acestreamengine --stream-node запускает узел поддержки

обязательные параметры

  • --url URL> - ссылка на acelive файл трансляции

необязательные параметры

  • --port PORT - порт (по умолчанию 8621)
  • --state-dir STATE_DIR - папка для временных файлов (удаляется после остановки узла поддержки)
  • --source-node SOURCE_NODE - адрес источника трансляции (ip:port)
  • --support-node SUPPORT_NODE - добавить адрес другого узла поддержки (ip:port). Этот параметр может встречаться несколько раз.
  • --allow-source-download - разрешить получение данных от источника
  • --allow-support-download - разрешить получение данных от других узлов поддержки
  • --allow-peers-download - разрешить получение данных от обычных пиров
  • --max-connections MAX_CONNECTIONS - максимальное общее кол-во соединений (по умолчанию 1000)
  • --max-peers MAX_PEERS - максимальное кол-во подключений к пирам (по умолчанию 50)
  • --max-upload-slots MAX_UPLOAD_SLOTS - максимальное количество пиров, на которые одновременно отдаются данные с узла поддержки (по умолчанию 7)
  • --max-download-speed MAX_DOWNLOAD_SPEED - максимальная скорость загрузки (байт/с). По умолчанию 0 (без ограничений).
  • --max-upload-speed MAX_UPLOAD_SPEED - максимальная скорость отдачи (байт/с). По умолчанию 0 (без ограничений).
  • --stats-report-interval STATS_REPORT_INTERVAL - интервал в секундах между обновлениями внутренней статистики (по умолчанию 60)
  • --stats-report-peers - обновлять данные по пирам во внутренней статистике
  • --service-remote-access - разрешить удаленный просмотр статистики
  • --service-access-token - ключ доступа для удаленной статистики
  • --log-debug DEBUG - установить уровень отладки

дополнительно

  • -h, --help - показать описание команд

Встроенный трекер

Встроенный трекер - это трекер встроенный в источник трансляции. Если он не отключен опцией --skip-internal-tracker, то его адрес будет автоматически добавлен в acelive-файл.

При организации трансляций с большим количеством пользователей мы рекомендуем отключать встроенный трекер и заменять его внешним трекером с хорошей производительностью (например, XBT Tracker)

Авторизованные узлы

Для того, чтобы клиент подключился к трансляции и начал просмотр, ему необходимо либо установить соединение минимум с двумя другими узлами, либо установить соединение с авторизованным узлом. Авторизованный узел - это узел, который был отмечен создателем трансляции как такой, которому можно "доверять". Как правило, это источник трансляции и/или узлы поддержки.

Последние версии ПО ACE Stream поддерживают использование списка авторизованных узлов в acelive-файле. Для этого при создании трансляции задается опция --add-authorized-peers, после чего формируется список авторизованных узлов и добавляется в acelive-файл. В список авторизованных узлов попадает источник трансляции (если это не приватный источник) и все указанные узлы поддержки. Клиенты, которые получили данный acelive-файл, используют список для определения того, является ли какой-либо узел авторизованным.

Если в acelive-файл не был добавлен список авторизованных узлов, либо у клиента установлена старая версия ACE Stream, которая не распознает данный список, то авторизованным узлом считается узел, IP адрес которого совпадает с адресом первого трекера в списке трекеров. Если встроенный трекер на источнике не отключен, то он будет первым в списке и клиенты будут считать источник авторизованным узлом. В случае, если встроенный трекер отключен, для поддержки старых клиентов мы рекомендуем ставить на первое место трекер, расположенный на том же сервере, что и источник трансляции (чтобы адреса первого трекера и источника совпадали), либо использовать как минимум один узел поддержки (чтобы клиенты при старте могли установить соединение сразу с двумя пирами, даже если больше никто не смотрит трансляцию).

Timeshift

Функция "Timeshift" дает пользователям возможность осуществить перемотку трансляции на некоторое время назад, а также поставить трансляцию на паузу и вернуться к просмотру в удобное для них время.

Время, на которое может осуществляться перемотка назад, задается при создании трансляции опцией --duration. Время указывается в формате ЧЧ:ММ:СС.

Например, при указании опции --duration 00:30:00 будет задан интервал 30 минут.

Примеры

Для примеров предположим наличие локальной сети с тремя серверами:

  • 192.168.1.1 - сервер для источника
  • 192.168.1.2 - сервер для узла поддержки
  • 192.168.1.3 - сервер для узла поддержки
  • 192.168.1.100 - сервер, который отдает оригинальный поток трансляции (HTTP MPEG-TS) по адресу http://192.168.1.100/stream (средний битрейт потока - 300 000 байт/с)

На сервере 192.168.1.1 предполагается наличие веб-сервера с корневой папкой /home/www, а также двух папок:

  • /home/www/streams - для хранения acelive-файлов, которые будут доступны для скачивания по ссылке вида http://192.168.1.1/streams/test.acelive
  • /tmp/streams - для хранения кэша и служебных файлов трансляций

Источник с встроенным трекером

Это наиболее простой способ запуск трансляции, не требующий запуска узлов поддержки и установки дополнительных трекеров. Данный способ подходит для трансляций с небольшим количество пользователей.

На сервере 192.168.1.1 запускаем источник:

acestreamengine --stream-source \
--name "test" \
--title "Тестовая трансляция" \
--source "http://192.168.1.100/stream" \
--bitrate 300000 \
--publish-dir "/home/www/streams" \
--cache-dir "/tmp/streams" \
--add-authorized-peers \
--log-stdout

Опция --add-authorized-peers добавляет в acelive-файл список авторизованных узлов (в данном случае это источник: 192.168.1.1).

После запуска трансляции в папке /home/www/streams будет создан файл test.acelive, в папке /tmp/streams будут созданы такие файлы:

  • test - кэш трансляции. Размер этого файла примерно равен длительность_потока_в_секундах (опция --duration, по умолчанию 1 час) * битрейт байт
  • test.restart - здесь хранится информация для корректного перезапуска трансляции
  • test.sauth - ключ для цифровой подписи трансляции

Для просмотра трансляции клиенты могут скачать файл трансляции по ссылке http://192.168.1.1/streams/test.acelive и запустить его в плеере ACE Stream, либо использовать другие способы (Способы просмотра трансляции).

Источник с внешним трекером

Если трансляция предполагает большое количество пользователей, то желательно использовать внешний трекер и отключить встроенный (для снижения нагрузки на источник).

В качестве внешнего трекера мы советуем использовать XBT Tracker

В данном примере предполагаем, что XBT Tracker установлен и запущен на сервере 192.168.1.1. Запуск трансляции теперь будет выглядеть таким образом:

acestreamengine --stream-source \
--name "test" \
--title "Тестовая трансляция" \
--source "http://192.168.1.100/stream" \
--bitrate 300000 \
--publish-dir "/home/www/streams" \
--cache-dir "/tmp/streams" \
--add-authorized-peers \
--skip-internal-tracker \
--tracker "udp://192.168.1.1:2710/announce" \
--log-stdout

Опция --skip-internal-tracker отключает встроенный трекер, опция --tracker подключает внешний трекер.

Источник с двумя узлами поддержки

В случае, если на источнике не хватает пропускной способности исходящего канала для нормальной работы трансляции, можно использовать узлы поддержки. Чаще всего узел поддержки представляет собой узел, который принимает данные от источника и отдает клиентам (хотя узел поддержки также может принимать данные от других узлов поддержки и даже от клиентов, в зависимости от его настроек). Узел поддержки имеет смысл ставить на отдельном сервере с хорошей шириной исходящего канала.

Для максимально эффективной работы схемы с узлами поддержки источнику необходимо сообщить адреса этих узлов с помощью опции --support-node:

acestreamengine --stream-source \
--name "test" \
--title "Тестовая трансляция" \
--source "http://192.168.1.100/stream" \
--bitrate 300000 \
--port 7764 \
--publish-dir "/home/www/streams" \
--cache-dir "/tmp/streams" \
--add-authorized-peers \
--skip-internal-tracker \
--tracker "udp://192.168.1.1:2710/announce" \
--support-node "192.168.1.2:8621" \
--support-node "192.168.1.3:8621" \
--log-stdout

Запускаем узлы поддержки на серверах 192.168.1.2 и 192.168.1.3 (команды для запуска одинаковые):

acestreamengine --stream-node \
--url "http://192.168.1.1/streams/test.acelive" \
--state-dir "/tmp" \
--source-node "192.168.1.1:7764" \
--allow-source-download \
--log-stdout

Опция --source-node задает адрес источника.

Опция --allow-source-download разрешает узлу поддержки скачивать данные с источника (скачивание с других узлов поддержки и клиентов в данном случае запрещено).

Если необходимо разрешить узлам поддержки скачивать данные с других узлов поддержки, то следует задать список других узлов опцией --support-node и разрешить скачивание опцией --allow-support-download.

На сервере 192.168.1.2 это будет выглядеть так:

acestreamengine --stream-node \
--url "http://192.168.1.1/streams/test.acelive" \
--state-dir "/tmp" \
--source-node "192.168.1.1:7764" \
--allow-source-download \
--support-node "192.168.1.3:8621" \
--allow-support-download \
--log-stdout

На сервере 192.168.1.3:

acestreamengine --stream-node \
--url "http://192.168.1.1/streams/test.acelive" \
--state-dir "/tmp" \
--source-node "192.168.1.1:7764" \
--allow-source-download \
--support-node "192.168.1.2:8621" \
--allow-support-download \
--log-stdout

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

Иногда может возникнуть необходимость запретить клиентам напрямую обращаться к источнику трансляции. Например, источник может быть физически расположен на сервере в защищенной зоне без доступа из внешнего мира. В этом случае трансляцию можно организовать по следующей схеме:

  • источник делается приватным (получать от него данные смогут только узлы поддержки, указанные явным образом)
  • узлы поддержки получают данные от источника и отдают клиентам
  • клиенты получают данные от узлов поддержки

Для того, чтобы сделать источник приватным, следует указать опцию --private-source:

acestreamengine --stream-source \
--name "test" \
--title "Тестовая трансляция" \
--source "http://192.168.1.100/stream" \
--bitrate 300000 \
--port 7764 \
--publish-dir "/home/www/streams" \
--cache-dir "/tmp/streams" \
--add-authorized-peers \
--skip-internal-tracker \
--tracker "udp://192.168.1.2:2710/announce" \
--support-node "192.168.1.2:8621" \
--support-node "192.168.1.3:8621" \
--private-source \
--log-stdout

Следует обратить внимание на то, что в данной конфигурации адрес трекера изменен на udp://192.168.1.2:2710/announce. Это сделано для поддержки старых версий клиентов, которые не обрабатывают список авторизованных пиров (подробнее здесь Авторизованные узлы).

Узлы поддержки на серверах 192.168.1.2 и 192.168.1.3 запускаем как обычно:

acestreamengine --stream-node \
--url "http://192.168.1.1/streams/test.acelive" \
--state-dir "/tmp" \
--source-node "192.168.1.1:7764" \
--allow-source-download \
--log-stdout