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

865

Тем, кто прочел первые две статьи про 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/[email protected] — воспроизведение информации с устройства 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.orgquality= качество изображения оцененное в диапазоне от 1 до 10venc=
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 в выводе мультимедиа. Данная статья призвана служить в качестве справочного пособия. Я старался быть максимально точным, проверяя большинство из того, что написано. В случае обнаружения неточностей, или ошибок, обязательно сообщите.

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