Мультимедиа фреймворки для MeeGo

Создать новую статью

07.10.2010 10:00


Об авторе

Здравствуйте, меня зовут Сергей Иванов. Я являюсь студентом факультета ВМК в ННГУ им. Лобачевского. В последнее время я специализируюсь на разработке мультимедийных приложений под операционные системы на основе Linux. С лета 2010 года моя специализация привела меня в проект "Video capturing service with social networks functionality for MeeGo", где я вплотную столкнулся с особенностями программирования под эту новую ОС для мобильных устройств.

Введение

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

Самыми яркими примерами таких фрэймворков являются Gstreamer и FFmpeg. Они оба написаны на языке программирования «С», но построены на разных библиотеках более низкого уровня, и поэтому принципы их работы сильно различаются.

GStreamer

+GStreamer.jpg

Архитектура GStreamer

GStreamer - мультимедийный фреймворк написанный с использованием библиотеки Glib. Он установлен в MeeGo по умолчанию. Эта библиотека является основой для большинства мультимедийных приложений, таких как видео-редакторы, медиа-плееры, программы записи и т.д.

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

Простейший конвеер укладывается в формулу «Входящий поток - Обработка - Исходящий поток». Усложнение и, как следствие, расширение функционала происходит во втором звене. Отдельные плагины различаются по выполняемым ими функциям. Для выполнения поставленной задачи плагины отбираются в определенной последовательности, которая и составляет конвейер.
В MeeGo предустановленно более 100 плагинов. Для создания мультимедийных файлов существует видео кодек Theora, а для аудио Vorbis. Контейнером для новых файлов является ogg. В настоящий момент официальные репозитарии MeeGo содержат не так много плагинов, как хотелось бы. Однако всегда есть возможность скачать и установить необходимые вам для работы плагины с сайта проекта GStreamer. Так как под GStreamer существует более 150 плагинов и постоянно добавляются новые и совершенствуются существующие, возможности этого framework практически неограничены. На данный момент Gstreamer поддерживает кодирование и декодирование во всех известных форматах включая новомодный H.264(AVC), mp3, ACC и многие другие.

Среда рабочего стола GNOME является основным пользователем технологии GStreamer и зависит от него с версии 2.2. Используется и в приложениях, не связанных с GNOME, к примеру, в медиаплатформе Chameleo, аудиосистемой KDE 4 Phonon и мультимедиапроигрывателем Songbird. Помимо различных мультимедиапроигрывателей, GStreamer используется в серверных приложениях (Flumotion), в аудио- и видеоредакторах (нелинейные редакторы Jokosher и Pitivi), и для работы с веб-камерами (Cheese).

Официальная классификация плагинов для Gstreamer

  • protocols handling
  • sources: аудио и видео
  • formats: микшеры, демикшеры, субтитры и т.д.
  • codecs: кодеки и декодеры
  • filtres: конверторы, микшеры, эффекты и т.д.
  • sinks: аудио и видео

pipeline.jpg

Пример конвейера (воспроизведение видео формата .ogg)

Каково основное преимущество использования GStreamer в сравнении со стандартным программированием? До появления GStreamer программист при разработке мультимедийного приложения должен был напрямую работать с API Also-сервера (аудиопотоки) и X-сервера (видеопотоки). Код программы получался неоправданно большим, увеличивалась вероятность ошибок, а процесс их поиска и исправления становился невероятно долгим и трудоемким. Не говоря уже о том, что на изучение API этих серверов программист должен был тратить уйму времени и сил.

Программирование с использованием Gstreamer - более высокий уровень программирования. Программист не пишет код программы «с нуля», а просто составляет конвейер из уже написанных плагинов, который обеспечивает выполнение поставленной задачи. Это уменьшает размер кода и, как следствие, вероятность ошибки, а процесс написания программы упрощается в разы.

В состав GStreamer также входят стандартные приложения, облегчающие процесс написания программы в еще большей степени.

Приложения GStreamer:

 

  • gst-inspect или gst-inspect-0.10

Выводит на монитор список плагинов имеющихся в системе
Показывает подробную информацию об выбранном плагине
Примеры:
gst-inspect
gst-inspect theoraenc

  • gst-launch или gst-launch-0.10

Позволяет создавать и запускать на выполнения конвейеры Gstreamer
Примеры:
gst-launch audiotestsrc ! pulsesink - воспроизведение тестового звука через динамики
gst-launch ximagewsrc show-pointer=true ! video/x-raw- rgb,framerate=25/1 ! videorate ! ffmpegcolorspace ! videoscale method=1 ! video/x-raw-yuv,width=1280,height=800,framerate=25/1 ! queue ! ! theoraenc ! oggmux ! filesink location=/tmp/test.ogv - производит захват изображения с монитора и запись видео-потока в файл /tmp/test.ogv

 

  • gst-editor

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

 

gst-editor

Это делает разработку приложений с использованием Gstreamer еще проще и наглядней.

Пример приложения написанного на С с использованием библиотеки GStreamer находится во вложениях в файле GStreamer_sample.cpp.

В заключении хочется сказать, что при создании своих приложений я использовал GStreamer, что сильно упростило мою работу в сравнении с классическим способом программирования с прямым обращением к API. Средний срок написания мной небольшого приложения сократился с трех-четырех дней до пяти часов. При этом я ощутил все преимущества Gstreamer, о которых написал выше.

Пример готового проекта

Для больше наглядности, я хочу продемонстрировать возможности GStreamer на примере нашего проекта.

В рамках Wireless Laboratory был создан проект “Multimedia technologies” для разработки ПО под MeeGo, позволяющего работать с видео- аудио потоками и кодеками. Первой программной созданной в рамках данного проекта является capture видео с экрана мобильного телефона с возможностью загрузки полученного видео в социальные сети. Программа создана для расширения мультимедийных возможностей MeeGo работы с камерой, экраном и социальными сетями.

Наличие различных средств для работы с мультимедийными данными великолепная возможность для расширения рынка MeeGo устройств. Важно чтобы эти программы предоставляли готовые решения для получения пользователями нового опыта взаимодействия с устройствами. Video capturing service with social networks functionality for MeeGo готовая программа для создания мануалов наглядных “HOWTO”, записи достижений и фрагментов из мобильных игр, записи видео с камеры и отправки его в социальные сети. Это решения позволяет сразу использовать все возможности для работы с полученным видео изображением на мобильном устройстве.

Функции, реализованные в текущей версии программы:

  • Возможность записи видео с экрана мобильного устройства по нажатию горячих клавиш
  • Возможность записи видео с видеокамеры
  • Возможность настройки частоты кадров и видео и аудио кодеков
  • Отправка видео в социальные сети

Для в данной программы используются библиотеки:

  • GStreamer – библиотека для захвата видео потока
  • FFmpeg – набор кодеков для кодирования видео и аудио потока

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

FFmpeg

FFmpeg - мультимедийный фреймворк на основе библиотек libavcodec (библиотека кодирования и декодирования аудио и видео) и libavformat (библиотека мультиплексирования и демультиплексирования в медиаконтейнер).

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

К сожалению FFmpeg отсутствует в официалных репозитариях для MeeGo, но при необходимости может быть скачана со страницы проекта FFmpeg и установлена из исходников без лишних проблем.

Поддерживаемые кодеки:

  • H.264
  • Intel Indeo
  • Sorenson 3 Codec используется в QuickTime
  • Theora совместно с Vorbis в контейнере Ogg
  • Windows Media Audio(WMA)
  • WMV - кодеки
  • и другие

Компоненты FFmpeg:

  • ffmpeg

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

Пример:

ffmpeg -f x11grab -s cif -I :0.0 /tmp/test.mpg - производит захват изображения с монитора и запись видое потока в файл /tmp/test.ogv

ffmpeg -I /tmp/in.wav -ar 22050 /tmp/out.mpg - производит конвертирование in.wav в MPEG audio c частотой дискретизации 22050 Hz

  • ffserver

потоковый сервер для вещания использующий протокол HTTP

Пример:

ffserver -f doc/ffserver.conf & ffmpeg -I INPUTEFILE http://localhost:8090/feed.ffm - теперь вы можете пересесть за другой компьютер запустить свой любимый плеер и прослушать аудио написав адресной строке http://<ip где запущен ffserver>:8090/feed1.ffm

  • ffplay

медиаплеер

  • libavcodec

библиотека с аудио и видео кодеками

  • libavformat

библиотека для мультиплексирования и демультиплексирования для различных форматов

  • libwscale

библиотека для маштабирования видео

  • libstproc

библиотека стандартных подпрограмм обработки видео

Пример исходного кода простой программы написанной на С с использованием libavcodec и libavformat можно посмотерть по этой ссылке.

Media Application FrameWork

Однако существует несколько задач, которые не затронуты в предыдущих фрэймворках. Это связано со сложностью новых приложений, в которых пользователям предоставляются все виды возможных на данный момент мультимедийных служб, таких как: UPnP, Last.Fm, Youtube, и т. д. Для удобства написания приложений для этих сервисов в MeeGo существует The Multimedia Applications FrameWork(MAFW). MAFW предоставляет программистам простой и удобный способ создания современных мультимедиа приложений отвечающих сегодняшним запросам пользователей.

MAFW по сути есть надстройка более высокого уровня над Gstreamer. В introduction к MAFW написано, что она позволяет более "просто" работать с  мультимедиа сервисами с которыми "не умеет" работать GStreamer.

MAFW

Как видно на рисунке MAFW предоставляет функционал для программ типа MediaPlayer. Этот фрэймворк предоставляет широкие возможности на высоком уровне работы со многими сервисами. такими как UPnP servers, Samba shares, Bluetooth devices, Internet services. MAFW позволяет писать программы для воспроизведения мультимедиа с использованием практически всех существующих для этого сервисов, как под Windows так и под *Unix системами.

Заключение

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

Полезные ссылки:

http://www.gstreamer.org
https://garage.maemo.org/projects/mafw
http://www.ffmpeg.org



Вложенные файлы