GStreamer: кодеки с привкусом Linux | ||
Мультимедиа > Кодеки Вы когда-нибудь задумывались о том как работают Gnome-плееры, такие как Totem, Rhythmbox или Banshee? Наверное каждый из вас в новоустановленной Ubuntu, при попытке проиграть AVI-шку видел сообщение о необходимости установить дополнительный пакет gst-ffmpeg или gst-plugins-ugly.
Основное отличие от VLC или FFmpeg в том, что первоначально среда разрабатывалась не для определённого приложения, а для всех программ, которые могут работать с мультимедиа. Данный фреймворк интегрирован в такие языки: С, С++/Qt, Python, Ruby, Perl. Данная технология позволяет создавать приложения, которые способны:
Для решения таких задач, как перекодирование фильма в другой формат, большую популярность имеют такие программы как mencoder или VLC. Но сделать то-же самое при помощи GStreamer — не на много сложнее. Ниже представлены примеры для Linux, демонстрирующие возможности фреймворка. В данных примерах мы будем использовать основные программы gst-launch и gst-inspect — чем-то напоминающие Windows-приложение GraphEdit. Для тех, кому нужна графическая оболочка — есть gst-editor. Но учтите, что эти программы предназначены для отладки, поэтому не ожидайте от них удобства в использовании. Для начала работы с GStreamer необходимо уяснить некоторые понятия:
В классическом виде мы получаем тако вида цепочку: source -> parser -> decoder -> filter -> sink. Если вам лень собирать всю цепочку кодеков и мультиплексоров вручную, GStreamer может сделать это за вас: $ gst-launch playbin uri=file:///home/me/audo.mp3 Элемент «playbin» сам разбирает файл, находит нужный кодек и элемент вывода. Всё что нужно — указать путь к файлу, который нужно проиграть. Если-же вам интересно какой элемент за что отвечает, вы можете запустить gst-inspect и увидеть все доступные элементы, а «gst-inspect lame» — покажет парамерты mp3-кодера. Так-же стоит отметить полезность элемента «decodebin2», который сам находит нужный декодер. Простейший аудиоплеер: $ gst-launch filesrc location=audio.mp3 ! decodebin2 ! alsasink Простейший аудиоплеер (выбираем кодек вручную, и согласовываем форматы): $ gst-launch filesrc location=audio.mp3 ! mad ! audioconvert ! audioresample ! alsasink Плеер посложнее (со звуком и видео): $ gst-launch filesrc location=audovideofile.mpeg ! decodebin2 name=decoder \ decoder. ! ffmpegcolorspace ! xvimagesink \ decoder. ! audioconvert ! audioresample ! alsasink Если вам нужно перекодировать AVI-файл в MOV, можно воспользоваться следующей командой: $ gst-launch-0.10 filesrc location=film.avi ! \ decodebin2 name=decoder { qtmux name=muxer ! filesink location=film.mov } \ { decoder. ! ffmpegcolorspace ! jpegenc ! queue ! muxer. } \ { decoder. ! queue ! audioconvert ! queue ! muxer. } Хочется сделать вещание, одновременно с записью в файл и отображением на экране вещаемого видео? Без проблем: $ gst-launch v4l2src ! queue ! \ ffmpegcolorspace ! tee name=t1 ! \ queue ! xvimagesink sync=false t1. ! \ queue ! theoraenc quality=1 ! \ queue ! oggmux name=mux \ alsasrc ! audio/x-raw-int,rate=8000,channels=1,depth=8 ! \ queue ! audioconvert ! vorbisenc ! \ queue ! mux. mux. ! \ queue ! tee name= t ! \ queue ! filesink location=test.ogg t. ! \ queue ! shout2send ip= port=8000 password=hackme Любители повещать во флеше — тоже не остались в стороне, благодаря librtmp (надо пересобрать пакет gst-plugins-bad): $ gst-launch v4l2src ! \ queue ! ffmpegcolorspace ! ffenc_flv ! \ queue ! flvmux name=muux is-live=true ! \ rtmpsink location='rtmp://localhost/path/to/stream live=1' \ alsasrc ! audio/x-raw-int,rate=22050,channels=1,depth=16 ! \ queue ! audioconvert ! lame bitrate=48 ! \ queue ! muux. Так-же разработчики позаботились об использовании «родных» мультимедийных фреймворков (QuickTime/DirectShow), если вы используете MacOS или Windows, благодаря «мостам». Ну и в заключение хочется сказать, что есть немало проблем, которые ещё предстоит решить разработчикам (рассинхронизации, проблемы с утечками памяти и производительности). Большинство из них связано с использованием сторонних библиотек, которые не всегда качественно написаны. Вот поэтому разработчики и придумали интересный приём — плагины разделены на 5 категорий:
|
||
Комментарии | ||