Open Broadcast Encoder

Сьогодні хочу розповісти про чудовому продукті англійської компанії Open Broadcast Systems Ltd. Це софтверний енкодер відео-аудіо потоку.
Я познайомився з цим продуктом на виставці IBC-2013. Там же на конференціях з'ясував ряд цікавих подробиць про те, звідки «ноги ростуть». А ростуть вони з EBU і BBC, двох гігантів науково-дослідної діяльності у сфері теле-радіо мовлення.
Так чим же є OBE, а чим не є?

OBE це енкодер отримує на вхід сигнал SDI і видає на вихід IP потік.
Сфера його можливого застосування досить широка, але основне його призначення-це професійне телебачення. Його не можна використовувати для інтернет мовлення, принаймні безпосередньо.
У минулій статті я опустив технічні подробиці свого проекту, тепер почну заповнювати цей пробіл.
Приступимо до складання і встановлення. На сайті OBE є чудова інструкція, але в ній є і ряд недоліків та прогалин. Відразу обмовлюся, що збірка буде проводитися під Centos 6.5. Враховуйте це і перевіряйте значення шляхів при збірці.

Першим ділом оновлюємо Yasm до версії 1.2.0 або вище.
Це можна зробити стандартними засобами вашого дистрибутива Linux. Якщо пакета немає, то збираємо з исходников:
wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar-zxvf yasm-1.2.0.tar.gz
cd yasm-1.2.0/ && ./configure --prefix=/usr --libdir=/usr/lib64 && make && make install

Встановлюємо ряд залежностей:
yum install-y libtwolame.x86_64 libtwolame-devel.x86_64 autoconf.noarch git.x86_64 libtool.x86_64 zvbi-devel.x86_64 screen.x86_64

Тепер сам енкодер.
mkdir ./obe && cd ./obe
git clone https://github.com/ob-encoder/fdk-aac.git
cd ./fdk-aac
autoreconf-i && ./configure --prefix=/usr --libdir=/usr/lib64 --enable-shared
make && make install

git clone https://github.com/ob-encoder/libav-obe.git
cd ../libav-obe
./configure --prefix=/usr --libdir=/usr/lib64 --enable-gpl --enable-nonfree --enable-libfdk-aac --disable-swscale-alpha --disable-avdevice --enable-shared --enable-pic
make && make install

git clone https://github.com/ob-encoder/x264-obe.git
cd ../x264-obe && ./configure --prefix=/usr --libdir=/usr/lib64 --disable-lavf --disable-swscale --disable-opencl --enable-shared --enable-pic
make && make install

git clone https://github.com/ob-encoder/libmpegts-obe.git
cd ../libmpegts && ./configure --prefix=/usr --libdir=/usr/lib64
make && make install

Тепер встановлюємо драйвер SDI плати від Blackmagic.
Йдемо на сайт і качаємо версію 9.8. Її там в прямому доступі вже немає. Новий драйвер я не перевіряв. Можете скачати новий і перевірити. Якщо через приблизно 25 годин звук не відвалився, то все добре.

Оновлюємо прошивку:
BlackmagicFirmwareUpdater status
BlackmagicFirmwareUpdater update №карти

Не відміняйте процес! «Цегла» забезпечений. У мене пішло два тижні на «танці з бубном» для відновлення цієї залізяки.

Оновлюємо, перевантажуємося.

Йдемо далі:
git clone https://github.com/ob-encoder/obe-rt.git
cd ./obe-rt
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
./configure --prefix=/usr --libdir=/usr/lib64
make && make install

Якщо все пройшло гладко, то продовжуємо.

Підключаємо джерело SDI сигналу до входу плати Decklink.
Без цього нічого не вийде. Енкодер не має задаючого генератора і використовує синхросигнал SDI. Якщо є можливість, то настійно рекомендую купити генератор і підключити його до всіх SDI пристроїв. Повірте, це позбавляє від величезної купи проблем.

Повернемося до энкодеру. Першим ділом вам потрібно освоїти screen. Це «віконний менеджер терміналу. Він вам дуже стати в нагоді і не тільки тут.

Запускаємо менеджера:
screen-RD encoder

Запускаємо енкодер:
obecli

Тепер увага!
На сайті OBE дано приклади конфігурації — не використовуйте їх як є!
Він даний виключно для ознайомлення, для реальної трансляції це використовувати не можна!

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

Тепер повністю робоча конфігурація, яка дає на аналізаторах потоку правильну картинку:
set input decklink
set input opts card-idx=0 // якщо карток або кілька входів, поміняйте значення
set input opts video format=1080i50 // так так саме 50i, це телебачення, але про це в наступній статті.
probe input

Якщо все правильно, то ви отримаєте таке повідомлення:
Probing device: Decklink card 0. Timeout 20 seconds
..
Detected input streams:
Input-stream-id: 0 - Video: RAW 1920x1080i 25/1fps
Input-stream-id: 1 - Audio: AAC 16 channels 48kHz

Encoder outputs:
Output-stream-id: 0 - Input-stream-id: 0 - Video: AVC
Output-stream-id: 1 - Input-stream-id: 1 - Audio: RAW - SDI audio pair: 1

Тепер налаштування самого потоку.
Знову увага! При використанні даного конфига, ви гарантовано отримуєте «правильний» потік. Це було перевірено на декількох апаратних і програмних аналізаторах, а так само на кінцевих пристроях користувачів. Будь-які зміни призведуть до помилок в потоці!
set stream opts 0:threads=8,format=avc,level=41
set stream opts 1:format=mp2,mp2-mode=stereo
set muxer opts ts-muxrate=5000550,ts-type=dvb,pcr-period=40,cbr=1
set stream opts 0:pid=101
set stream opts 1:pid=110
set muxer opts ts-id=1,program-num=1,pmt-pid=100
set stream opts 0:lookahead=0,bframes=0
set stream opts 0:profile=high,max-refs=3
set stream opts 0:keyint=12,vbv-maxrate=4500,vbv-bufsize=4500,bitrate=4500
set stream opts 1:bitrate=256
set outputs 1
set output opts 0:target=udp://224.0.0.1:5000?ttl=100&miface=eth0
start

Відповідь енкодера:
Encoding started

Тепер енкодер почав кодування потоку 5 mbps на мультикастовый адреса 224.0.0.1 і порт 5000.

Якщо ви вирішили змінити швидкість потоку, але до цього нічого подібного не робили, просто підіть налийте чаю і розслабтеся.
Для тих у кого є досвід і багато-багато бажання, можу порадити програмний аналізатор потоку mpeg-analyzer від streamguru.de. Він не безкоштовний, але є повнофункціональний тріал. Повинно вистачити.
На даному знімку аналізатора показаний правильний потік:


А тут те, за що можуть дати по голові:


Тепер кілька слів про те, чого робити не можна, без повного розуміння «навіщо».
У енкодери передбачений режим lowestlatency, що дозволяє знизити затримку кодування до декількох часток секунди. Дана опція вимагає наявності режиму intra-refresh. З цього приводу можна почитати в інтернеті. Відносно даного продукту, поки краще забути про цієї опції, вона «сира» і мало керована. До того ж структура intra-refresh підтримується далеко не всіма пристроями відтворення, а ваш провайдер, що забезпечує послугу CDN приміром, може побачити на записи прекрасний чорний прямокутник на весь екран.

Ось власне і все.

Так, маленька прохання писати запитання в коментарях, а не в лічку.

Наступного разу планую лікнеп для любителів «познімати» відео на DSLR.
Лікнеп з точки зору BBC, EBU і мого скромного досвіду.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.