Тем, кто прочел первые две статьи про 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 в выводе мультимедиа. Данная статья призвана служить в качестве справочного пособия. Я старался быть максимально точным, проверяя большинство из того, что написано. В случае обнаружения неточностей, или ошибок, обязательно сообщите.
Спасибо, что дочитали до конца.