Что такое VLC и как это можно использовать? Часть 3. Воспроизведение и вещание

1167

Тем, кто прочел первые две статьи про VLC, предлагаю продолжение. Напомню, что с помощью этого мультимедийного комбайна можно прослушивать музыку и смотреть видео. Правда, также можно бесплатно смотреть боевики в режиме онлайн. Но тут важно иметь качественное соединение с Интернетом. Кстати, если вам нужен ремонт macbook air, то квалифицированную помощь вы найдете по ссылке.

Но вернемся к VLC. В этой статье, найденной на неофициальном проекте GNU/Linux ХМАО-Югра www.oslinux.ru, речь пойдет о том, как настроить воспроизведение и вещание.

Автор Нурулин Андрей (C) anurulin(@)gmail(.)com для проекта GNU/Linux ХМАО-Югра

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

Продвинутый пользователь, не заинтересованный в создании сервера вещания, может применять консольный интерфейс для перекодирования форматов мультимедийного содержимого.

Источник воспроизведения, например файл с расширением .avi, спутниковый ресивер, или интернет радиостанция, в этой статье будет называться входным потоком.

Результат обработки входного потока, например файл с расширением .mkv, или звук/изображение на мониторе, будем называть выходным потоком.

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

Понятие обозначающее количество информации на единицу времени входного или выходного потока (например 128 кбит/с), будет именоваться как плотность потока, или плотность.

Модули доступа к носителям

Поддерживаемые источники входного потока зависят от модулей доступа (access modules), включенных в имеющийся у вас дистрибутива VLC.

При воспроизведении VLC пытается подобрать наиболее подходящий модуль, если возникает необходимость явно задать модуль достаточно воспользоваться опцией -access .

Модули доступа:

Модули Включен Описание
cdda да Модуль для ввода Audio CD. На сегодняшний дель более предпочтительным является применение libvcdinfo и libcdio. Предполагается, что модуль libcdio заменит более старый. Когда станет достаточно широко поддерживать различные ОС.
dvb нет Позволяет читать со спутниковых (DVB-S, DVB-T и DBC-C), радио-цифровых, или кабельных тюнеров. Модуль использует Video4Linux 2 API функции, доступные с версии ядра Linux 2.5.X и 2.6.X.
dvd да Старый модуль для чтения DVD.
dvdplay да Этот модуль как правило используется для ввода DVD. Требует libdvdcss для декодирования DVD и libdvdplay для навигации по содержимому DVD диска.
dshow да Только для Windows

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

http, ftp, udp, file, directory, mms всегда Стандартные модули доступа. Позволяют считывать файлы, из указанного каталога, читать потоки по протоколам http, ftp, udp, mms
pvr нет Только для Windows

Позволяет читать с плат Hauppauge PVR.

rstp/rtp/sdp нет Позволяет считывать из сети поток VOD (Видео по требованию) через протокол RSTP . Использует библиотеку liveMedia с сайта http://live555.com/
satellite нет Модуль ввода позволяющий напрямую читать с плат Hauppauge WinTV Nova в ОС семейства GNU/Linux. Необходим драйвер версии 0.9.4 доступный на linuxtv.org.
slp да При чтении сетевых потоков позволяет получать информацию о названиях и адресах анонсированных в потоке. Применяет протокол SLP.
v4l нет Позволяет читать с устройств Video4Linux.
vcd да Для чтения VideoCD. Со временем будет заменен на libvcdinfo и libcdio.

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

vlc [file_name.ext]

Очевидно, что в приведенном примере для того чтобы открыть файл [file_name.ext] (в текущем каталоге) применяется метод доступа file, и, если необходимо, это можно указать явно:

vlc file:///[path_to_file]/[file_name.ext]

В последнем примере задается полный путь к воспроизводимому файлу, [path_to_file] заменяет путь к файлу [file_name.ext]

Пример шаблона воспроизведения DVD:

vlc dvd://[device][@raw_device][@[title][:[chapter][:angle]]]

Пример шаблона воспроизведения Video CD:

vlc vcd://[device][@S[number]]

Простая команда vcd:/ запускает воспроизведение содержимого диска по умолчанию (возможно это трек 1 или фрагмент 0) с использованием устройства по умолчанию (возможно это /dev/cdrom). Каждый из параметров, и содержимое (параметр [number] ) и устройство (параметр [device]) могут быть заданы пользователем.

Заглавные T, E, P, S имеют значение «трек» (Track), «вхождение» (Entry), «воспроизведение» (Playback) и «сегмент» (Segment).

vcd:///dev/cdrom@E0 — воспроизведение информации с устройства dev/cdrom номер вхождения 0.

Пример шаблона воспроизведения Audio CD:

vlc cdda://[device][@[track]]

Пример шаблона воспроизведения мультикастового потока по протоколу RTP:

vlc rtp://@multicast_address[:server_port]

Пример шаблона воспроизведения потока RTSP:

vlc rtsp://www.example.org/your_stream

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

В более сложном варианте, VLC запускается с различными опциями и вызовом различных модулей:

vlc input_stream -option1 -option2 … -optionN -sout ‘#module1{option1=…,
option2=…}:module2{option1=…, option2=…}:…’

где input_stream — входной поток, -option1 -option2 … -optionN — опции, -sout ‘#module1{option1=…, option2=…}:module2{option1=…, option2=…}:…’ — опция указывающая модули выходного потока и их параметры.

Модули выходного потока

На сегодняшний день доступны следующие модули обрабатывающие выходной поток:

  • standard пересылает входной поток по протоколам доступа file, udp, http, https, mmsh, rtp. Модуль производит обертывание потока в один из возможных форматов, обеспечивает так же другой функционал.
  • transcode производит перекодирование входного потока другими (отличными от оригинала) кодеками на лету.
  • duplicate позволяет перекодировать входной поток, производить его форматирование различными способами. Это может применяться, когда один и тот же выходной поток нужно подготовить для устройств с различным программным обеспечением и неравными аппаратными возможностями.
  • display этот модуль применяется если вы хотите видеть (и/или слышать) выходной поток, не направленный на ваш монитор, например с случае работы VLC в режиме сетевого вещания.
  • rtp применяется для вещания через RTP. Отдельные элементы потока (например аудио и видео каналы) будут объединяться и доступны по общему UDP порту.
  • es позволяет разделять элементы входного потока.

Необходимо рассмотреть опции модулей более подробно. Во всех случаях упоминания кодеков и мультимедийных форматов, подразумевается наличие под рукой предыдущей статьи из этой серии («Часть 2. Обзор кодеков и форматов VLC»).

Модуль standard (допустимо название std) перенаправляет (сохраняя) выходной поток в файл или производит сетевое вещание, выполняя обертывание выходного потока в заданный формат. Применяется с опциями:

  • access= — возможные значения смотрите во второй статье в графе «Доступ к выводу» таблицы «Список поддерживаемых контейнеров при передаче потока в сеть или файл».
  • mux= — возможные значения смотрите во второй статье в графе «Модуль VLC» таблицы «Список поддерживаемых контейнеров при передаче потока в сеть или файл».
  • dst= — значение зависит от выбранного модуля доступа и задается в формате URL.
  • sap — эта опция используется для рассылки анонсов по протоколу SAP (Session Announcement Protocol). SAP — это протокол обнаружения сервисов, использующий зарезервированный мультикастовый адрес (239.255.255.250) для рассылки списка вещаемых каналов на сервере.
  • group= — применяется вместе с опцией sap. Позволяет логически группировать каналы, например по тематике или качеству сжатия
  • sap-ipv6 — применяется вместе с опцией sap. Задействует ipv6 вместо ipv4 для работы sap.
  • slp — альтернатива sap. slp (Service Location Protocol) — протокол позволяющий обнаруживать сервисы в локальной сети и использовать их без предварительной конфигурации. Данный протокол шире поддерживается не Windows системами.
  • name= — параметр применяемый как для sap, так и для slp, для указания названия потока.

Модуль display применяется в случаях, когда необходимо поток перенаправленный в сеть или файл выводить на экран. Удобен в применении совместно с модулем duplicate. Для display доступны следующие опции:

  • novideo — уничтожение изображения в отображаемом потоке.
  • noaudio — уничтожение звука в проигрываемом потоке.
  • delay= — задержка воспроизводимого потока в миллисекундах.

Модуль rtp применяется для вещания выходного потока по протоколу RTP (Real Time Protocol). Не смотря на возможность применения протокола RTSP (в URL параметра dst=), организовать работу видео по требованию (VoD) с этим модулем не удастся. Доступные параметры rtp:

  • dst= — позволяет задать UDP адрес направления вещания как в виде удреса отдельного хоста, так и мультикастовый адрес.
  • port= — задает порт вывода первой из сотсавляющих общего потока. Номер пота должен быть четным.
  • port-video= — указывает порт для вывода видео. Номер порта должен быть четным.
  • port-audio= — указывает порт для вывода аудио. Номер порта должен быть четным.
  • sdp= — позволяет указать расположение файла SDP (Session Description Protocol), файл должен быть доступным. Путь файла задается в формате URL указанием одного из протоколов: file, http, rtsp, sap.
  • ttl= — задает время жизни UDP пакета в формате TTL (Time to Live).
  • mux= — позволяет задать метод инкапсуляции (обертывания) выходного потока. Смотрите описание опции для модуля standard.
  • rtcp-mux — задействует RTP в стеке с RTCP, отправляя информацию о состоянии сесии на тот же адрес что и RTP.
  • proto= — явным образом задает транспортный протокол для RTP пакетов. Может принимать одно из следующих значений: dccp, sctp, tcp, udp, udplite.
  • name= — параметр для отправки желаемого имени клиенту, принимающему поток.
  • description= — задает дополнительное описание потока.
  • url= — адрес интернет сайта где можно получить дополнительную информацию о принимаемом потоке.
  • email= — адрес электронной почты для связи с источником вещания.

Модуль es позволяет делить общий поток на несколько составляющих, сохраняя результат в отдельный файл или пересылая его на различные адреса. Для es применяются следующие опции:

  • access-video= — позволяет указать модуль доступа к видео составляющей потока, аналогично опцию access в модуле standard.
  • access-audio= — позволяет указать модуль доступа к аудио составляющей потока, аналогично опцию access в модуле standard.
  • access= — задает медуль доступа к обоим составляюшим потока, если они не отличаются.
  • mux-video= — задает метод инкапсуляции для видео составляющей. Возможны аналогичные значения опции mux модуля standard.
  • mux-audio= — задает метод инкапсуляции для аудто составляющей. Возможны аналогичные значения опции mux модуля standard.
  • mux= — задает метод инкапсуляции для обоих составляющих потока, если они не отличаются.
  • dst-video= — указывает файл для сохранения видео потока, или адрес его вещания.
  • dst-audio= — указывает файл для сохранения аудио потока, или адрес его вещания.
  • dst= — указывает файл для сохранения обоих составляющих потока, или адрес их вещания.

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

  • vcodec= — видео кодек в который необходимо перекодировать поток. Возможные значения можно найти во второй части данной серии статей.
  • vb= — плотность видео потока, заданная в кбит/с.
  • venc= — возможные значения описаны в таблице “Сторонние библиотеки в декодировании видео и аудио потоков”.
  • fps= — параметр задающий количество кадров в секунду.
  • deinterlace — задействует деинтерлейсинг (устранение чересстрочности).
  • croptop= — позволяет задать в пикселях ширину полосы с верхнего края для обрезания кадра.
  • cropbottom= — позволяет задать в пикселях ширину полосы с нижнего края для обрезания кадра.
  • cropleft — позволяет задать в пикселях ширину полосы с левого края для обрезания кадра.
  • cropright= — позволяет задать в пикселях ширину полосы с правого края для обрезания кадра.
  • scale= — задает масштаб оригинального размера кадра, позволяя увеличивать и уменьшать его.
  • width= — задает ширину кадра в пикселях.
  • height= — задает высоту кадра в пикселях.
  • acodec= — аудиокодек, возможные кодеки можно уточнить во второй части данной серии статей.
  • ab= — задает плотность аудио потока в кбит/с.
  • aenc= — возможные значения описаны в таблице “Сторонние библиотеки в декодировании видео и аудио потоков” в этой статье, ниже.
  • samplerate= — задает частоту звучания в герцах.
  • channels= — позволяет задавать количество аудио каналов потока.
  • scodec= — задает формат выводимых субтитров.
  • senc= — перекодирует данные о субтитрах в указанный формат.
  • soverlay — опция включает наложение субтитров прямо на видео изображение.
  • sfilter= — позволяет производить наложение картинки или текста на верхний край видео.
  • threads= — задает количество потоков, для параллельного перекодирования потока. Рекомендуется указывать количество процессоров данного компьютера.
  • audio-sync — когда эта опция заявлена, VLC будет добавлять/удалять видео кадры, для синхронизации их с аудио потоком.

Сторонние библиотеки в декодировании видео и аудио потоков VLC

Модуль Описание Параметры Параметр transcode
ffmpeg Обеспечивается библиотекой libavcodec, поддерживающей огромное количество видео и аудио форматов и кодеков. максимальное лоичество кадров между двумя ключевыми кадрами

hurry-up параметр позволяющий упрощать обработку, снижая качество, если процессор оказывается перегружен.

interlace позволяет улучшить перекодирование потоков с чересстрочной разверткой

noise-reduction= задействует алгоритм подавления шумов

vt= задает уровень толерантности к
плотности потока видео в кбит/с

bframes= задает количество B кадров между двумя ключевыми кадрами

qmin= задает минимальное значение квантификатора масштаба

qmax= задает максимальное значение квантификатора масштаба

qscale= задает постоянное значение квантификатора масштаба плотности видео потока

i-quant-factor= задает квантификатор I кадров, в сравнении с P кадрами

hq= позволяет задать вектор качества движущихся изображений

strict= allows to force a stricter standard compliance (possible values are -1, 0 and 1, default is 0),

strict-rc enables a strict rate control algorithm

rc-buffer-size= allows to choose the size of the buffer used for rate control (bigger means more efficient rate control)

rc-buffer-aggressivity= allows to set the rate control buffer aggressiveness *FIXME*

pre-me allows to enable pre motion estimation

mpeg4-matrix enable use of the MPEG4 quantization matrix with MPEG2 streams, improving quality while keeping compatibility with MPEG2 decoders, trellis enables trelli quantization (better quality, but slower processing).

venc=, aenc=
vorbis Кодек сжатия с потерями с поддержкой как постоянной, так и переменной плотности аудио потока. Разрабатывается проектом Xiph.org, является свободным и открытым. quality= качество звучанияоцененное в диапазоне от 1 до 10

max-bitrate= задает максимальную плотность аудио потока в кбит/с

min-bitrate= задает минимальную плотность аудио в кбит/с

aenc=
speex Аудио кодек сжатия с потерями, рекомендуется к применению на каналах с пропускной способностью примерно 10 кбит/с. aenc=
theora Свободный от патентов и лицензионной платы кодек проекта Xiph.org quality= качество изображения оцененное в диапазоне от 1 до 10 venc=
x264 Свободная и открытая реализация кодека h264, одного из ранних кодеков сжатия видео высокого качества. Поддерживает множество специфичных формату параметров. keyint=задает максимальное количество кадров между двумя ключевыми кадрами

idrint= позволяет задать максимальное количество кадров между IDR кадрами

bframes= позволяет задать максимальное количество кадром между I и P кадрами

qp= квантификатор в диапазоне 1-51, если требуется зафиксировать это значение. Два следующих параметра задают динамический режим работы по этому параметру

qp-max= задает максимальное значение квантификатора

qp-min=задает минимальное значение квантификатора

loopfilter включает фильтр подавления блоков

analyse задействует обнаружение смены сцены

cabac задействует Контекстнозависимое Адаптивное
Бинарное кодирование

frameref= позволяет задать количество ссылочных кадров

scenecut= в режиме контроля за изменением сцены этот параметр определяет агрессивность вставки I кадров

venc=

Модуль duplicate позволяет дублировать выходные потоки, обрабатывая каждую копию отдельно. Для модуля применяются следующие параметры:

  • dst= — позволяет задавать модули, через которые должна быть пропущена копия выходного потока. Любой из ранее описанных модулей может быть использован в качестве параметра этой опции
  • select= — эта опция позволяет дублировать и обрабатывать отдельные составные части потока. Может быть задано несколько критериев, отделяя их друг от друга запятой. Для критериев требующих указание параметра, можно указывать диапазон отделяя минимальное значение от максимального с помощью тире.

Параметры опции select=:

  • program= требование дублировать элементарные составляющие только выбранных потоков. Параметр применим только с MPEG2/TS потоками.
  • noprogram= требование дублировать элементарные составляющие только не выбранных потоков. Параметр применим только с MPEG2/TS потоками.
  • es= дублировать элементарную составляющую выбранного по ID потока.
  • noes= не ублировать элементарную составляющую выбранного по ID потока.
  • video дублировать только видео поток.
  • novideo не дублировать видео поток.
  • audio дублировать аудио поток.
  • noaudio не дублировать аудио поток.
  • spu дублировать поток субтитров.
  • nospu не дублировать поток субтитров.

Были рассмотрены возможности VLC в выводе мультимедиа. Данная статья призвана служить в качестве справочного пособия. Я старался быть максимально точным, проверяя большинство из того, что написано. В случае обнаружения неточностей, или ошибок, обязательно сообщите.

Спасибо, что дочитали до конца.