VLC stream и наложение логотипа


На прошедшей неделе столкнулся по работе с необходимостью наложения метки на видеопоток. Казалось бы, ничего сложного, однако же все в значительной степени осложнялось тем, что видеопоток шел не только к нам и наложить метки на исходный поток не представлялось возможным (поскольку метки имеют служебный характер и просто любопытные из видеть не должны). Если сначала я начал смотреть в сторону ffserver (в итоге мне не удалось ровным счетом ничего путного), то в итоге остановился на том, что есть, наверное, практически на любом компьютере ― на VLC Player'е от VideoLAN. Сам по себе плеер уже давно потерял статус плеера и постепенно превратился в целый мультимедийный агрегат, который позволяет как просматривать видео, так и конвертировать его, снимать с потоков и устройств вроде веб-камеры, а кроме всего прочего еще и вещать в сети в формате потокового медиа. Последняя функция нам и пригодится.

Сначала я начал экспериментировать с наложением картинки на изображение непосредственно в режиме проигрывания через пользовательский плеер VLC, однако позже понял, что это средство позволяет наложить картинку только для меня. Не буду долго тянуть и скажу, что решился мой вопрос при помощи серверной версии VLC и средства ретрансляции. Серверная версия, по сути дела, это тот же VLC, но с поддержкой режима работы без графического интерфейса (на сервере, где нет графического окружения, достаточно трудно реализовать отображение интерфейса). Нам нужно всего-то в командной строке обратиться к VLC с параметром «-I dummy» и несколькими другими, в которых мы будем описывать входящий поток для ретрансляции, параметры логотипа и параметры исходящего потока. Описывать все это я не буду, так как в Интернете этого добра достаточно (нужно только внимательно смотреть за версией, используемой в инструкции, поскольку инструкции для ранних версий сильно отличаются от инструкций для современной).

Для наложения логотипа на потоковое видео нам нужно объявить перед указанием входящего потока параметр «--logo-file», а сразу следом за ним указать абсолютный путь к файлу накладываемого изображения. Что касается того, что этот параметр должен быть объявлен перед указанием входящего потока, то эту мысль я взял из множества инструкций на разных языках. Быть может, это не так и существенно, однако иначе я не пробовал, поскольку у меня все заработало итак. Можете поэкспериментировать, если есть желание; думаю, что заведется и так. Кроме этого параметра нам нужно еще и наложить созданный слой на видео. Для этого в секцию «transcode» добавляем следующий параметр:

sfilter=logo
В итоге все работает замечательно: у нас есть собственная копия потока, на которую мы можем накладывать что угодно и никого больше это не затронет. Советую, кстати, для начала провести эксперименты либо с веб-камерой (которая в linux имеет внутренний адрес вроде v4l2:///dev/video0 и три слеша подряд ― это не опечатка, поскольку два относятся к протоколу, а третий ― к адресу устройства), что будет несколько быстрее и удобнее, либо с каким-нибудь онлайн телевидением (быть может, даже с IPTV, главное, чтобы задержек существенных не было). Самое главное, что нужно знать об этом типе ретрансляции ― это то, что при обрыве вещания на исходном потоке процесс, который занимается ретрансляцией у вас, также будет завершен, поэтому ретрансляцию нужно будет запустить вручную как только исходный поток снова поднимется (тут, конечно, будет весело с нестабильными потоками, но я думаю, что если хорошо заняться этим вопросом, то эту проблему (вернее, ее решение) можно как-то автоматизировать).

А я-то, собственно, рассказать хотел вовсе не о том всем, что описал выше, а о достаточно простом и удобном приеме при работе с логотипами для VLC. По умолчанию, логотип, наложенный через указанные выше директивы, будет прилеплен к позиции 0x0. Вас, конечно же, это, скорее всего, не порадует, но я знаю, как эту проблему решить. Во-первых, если ваш логотип нужно разместить слева, можно просто создать PNG-файл с прозрачностью на фоне и добавить перед логотипом необходимые отступы. Если вдруг вы хотите разместить логотип более специфическим способом, то это сделать еще проще, но для этого нужно точно знать разрешение входящего потока. Если входящий поток у нас 720x486 (NTSC), то нужно создать прозрачное PNG-изображение такого же размера прилепить на него логотип именно туда, куда нам нужно. Вот и все. И совсем не нужно никаких дополнительных директив. Если что, такие логотипы очень легко создаются через GIMP.

Вот так я и получил ретрансляцию видеопотока со служебными метками всего-то за несколько минут.


11.03.2014, 22:48
  видео, stream, VLC.
Просмотров: 6509.
3