Меню Рубрики

Установка кодеков raspberry pi

Raspberry Pi 2 — собираем AAC, MP3, H264 и FFMPEG на Raspbian (Jessie)

Сегодня я поделюсь с вами как я собирал FFMPEG с кодеками на Raspbian Pi (Jessie).

FFMPEG — это пожалуй самая популярная библиотека в мире linux для работы с мультимедиа.

Как известно, FFMPEG не включен в репозиторий raspbian, поэтому его не возможно просто установить с помощью

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

Перед тем, как мы скомпилируем FFMPEG, нам понадобиться собрать также все кодеки, которые мы планируем использовать. В моем случае это AAC, MP3 и H264.

Обычно для установки чего либо, требуются права root. Для того, чтобы не вводить каждый раз sudo — сделаем это один раз

Для работы с медиа нам понадобятся соответствующие библиотеки для работы со звуком — ALSA

После этого, ALSA headers можно будет найти в /usr/include/alsa, а соответствующие библиотеки в /usr/lib/arm-linux-gnueabihf.

Не уверен, что в этом есть необходимость, но я собрал на всякий случай YASM

Теперь собираем кодек H264. Очень важно указать параметр —disable-asm в конфигураторе, без него, при попытке использовать H264 кодек, вылазит ошибка — «illegal instruction«.

Следующим собираем MP3 кодек. Библиотеки mp3 кодека будут установлены в /usr/local/lib/libmp3lame

Собираем AAC кодек, в итоге библиотеки будут установлены в /usr/local/lib/libfaac

В данной версии faac-1.28 (надеюсь что только в этой версии) есть ошибка в файле common/mp4v2/mpeg4ip.h, чтобы ее пофиксить надо открыть этот файл и добавить несколько строк после строки 126 таким образом, чтобы это выглядело примерно так

FFMPEG

Наконец мы готовы собрать FFMPEG. В итоге библиотеки ffmpeg будут установлены в /usr/bin/ffmpg. Компиляция ffmpeg занимает не мало времени, и как повествует нам об этом интернет, на ранних версиях Raspberry Pi это могло достигать и до 5 часов, но благо в новом Rasspberry Pi 2 B есть аж целых 4 ядра процессора, поэтому для меня, весь процесс компиляции занял не более 25 минут (и это при том, что я не разгонял тактовую частоту процессора до 1000MHz), что в свою очередь не может не радовать.

Финальные настройки

Из-за того, что все кодеки были установлены в папку /usr/local/lib, ffmpeg надо дать об этом как-то знать, для этого существует глобальная переменная — LD_LIBRARY_PATH. Можно каждый раз запускать ffmpeg таким образом

Но есть и более универсальный вариант — установить значение этой переменной на постоянной основе

На этом наша сборка подошла к концу. Единственное, на что хотелось бы обратить внимание, всё вышеперечисленное будет работать только с указанными версиями исходников, на других версиях я не тестировал поэтому не могу дать гарантии что это будет работать.

источник

Raspberry Pi: Кодируем H.264 видео в реальном времени

В одном из проектов компании Itseez, связанных с компьютерным зрением, мы используем Raspberry Pi для обработки видео потока с веб-камеры, и недавно столкнулись с проблемой записи видео на флеш-карту. Трудность состояла в том, что ресурсы ЦП съедались другими более важными задачами, однако сохранять видео все же было нужно. Причем предпочтений, каким кодеком сжимать и какой формат использовать, не было, лишь бы это никак не сказывалось на fps (количестве кадров в секунду). Перепробовав большое число программных кодеков от RAW до H.264 (использовалась обертка OpenCV над FFmpeg), пришли к выводу, что ничего из этого не выйдет, т.к. при высокой нагрузке fps проседал с 20 до 5 кадров в секунду, при том что картинка – черно-белая с разрешением 320×240. Немного погуглив, выяснили, что в процессоре Raspberry Pi есть аппаратный кодер с поддержкой стандарта H.264 (насколько мне известно, лицензия приобретена только для него). Плюсом ко всему было то, что взаимодействие с кодером реализовано по стандарту OpenMAX, поэтому было решено взяться за написание кода с использованием OpenMAX, и посмотреть, что из этого получится. Получилось, кстати, очень даже недурно!

Ниже пример видео до применения аппаратного ускорения:

.

OpenMAX (Open Media Acceleration) — это кросс-платформенный API, который предоставляет набор средств для аппаратного ускорения обработки видео и аудио и работы с различными мультимедийными системами, разработанный для использования независимо от ОС или аппаратной платформы. Сразу оговорюсь, что на Raspberry Pi реализован не «чистый» OpenMAX IL (Integration Layer) API, а некоторая адаптированная версия для чипа Broadcom. Поэтому попытка переиспользовать код на другой плате может провалиться. К тому же решено было использовать обертку над OpenMAX, предоставленную разработчиками Raspberry Pi — ilcient. В дистрибутиве Raspbian wheezy уже по умолчанию есть готовые библиотеки и примеры использования OpenMAX, которые находятся в каталоге /opt/vc/. В подкаталоге /opt/vc/src/hello_pi/libs/ilclient/ находятся исходники оберток над OpenMAX. Это файлы ilclient.c ilclient.h и ilcore.c.
Вернемся к задаче. Есть изображение с камеры, одноканальное (то есть черно-белое), с разрешением 320х240, в нашем случае это структура IplImage из OpenCV, и нужно сохранить ее в контейнер AVI, предварительно прогнав через кодек Н.264. Отсюда вытекают следующие подзадачи и способы, которыми они решались:

  • Перед кодированием необходимо привести изображение к какой-нибудь цветовой модели, например YUV420p, это будем делать с помощью модуля swscale из набора библиотек FFmpeg версии 0.7.1.
  • Кодируем полученный буфер с помощью OpenMAX, предварительно настроив его так, что входным будет буфер, содержащий изображение в YUV420p, а выходным буфер с изображением, после обработки его кодеком H.264.
  • Сохраняем сжатое изображение в AVI контейнер, используя все тот же FFmpeg.
Читайте также:  Установка программ в linux apt

Итак по пунктам:

Конвертирование

Здесь все просто: создаем контекст конвертирования и две структуры AVPicture. Первая – для одноканального изображения, вторая — для YUV420p:

Конвертирование соответственно выглядит следующим образом:

Где buf – это будет входной буфер кодека, а frame – IplImage* с камеры.

Кодирование

Здесь – посложнее, особенно важно правильно и в нужной последовательности выполнить инициализацию кодера:

Здесь происходит создание клиента и установка параметров входного буфера: высоты и ширины изображения, fps и цветовой схемы. Порт 200 — это определенный разработчиками входной порт к драйверу компоненты video_encode, 201 — выходной порт данной компоненты. Для других операций (декодирование видео, кодирование-декодирование аудио и т.п.) соответственно используются другие порты.

Выше происходит установка параметров выходного буфера и битрейта. Параметр format.eCompressionFormat = OMX_VIDEO_CodingAVC, как раз определяет то, что изображение будет кодироваться в H.264. Оптимальный битрейт вычислили вручную, как описано здесь: www.ezs3.com/public/What_bitrate_should_I_use_when_encoding_my_video_How_do_I_optimize_my_video_for_the_web.cfm.

Далее включаем буферы и переводим драйвер в состояние иcполнения.
Собственно, само кодирование:

Сохранение видео

Здесь тоже ничего сложного для тех, кто пользовался FFmpeg. Инициализация контекста выходного формата:

Далее открываем файл на запись и записываем заголовок и информацию о формате содержимого:

Процесс сохранения закодированного изображения:

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

Соответственно, придется также собрать или установить FFmpeg и OpenCV, хотя ничто не мешает использовать другие библиотеки для сохранения видео в файл. Файлы «bcm_host.h» и «ilclient.h» можно найти в подкаталогах пути /opt/vc/. ilclient.c и ilcore.с, в которых находится код OpenMAX клиента, собираются вместе с проектом.
Для линковки обязательно потребуются следующие библиотеки:

Ну и плюс нужно будет указать библиотеки FFmpeg и OpenCV, например, как показано ниже:

Вот, собственно, и все. Добавлю лишь то, что при использовании встроенного кодера fps нашей системы с включенной функцией сохранения видео и без нее практически не отличаются, при том что ранее при использовании софтварных кодеков fps падал на 40-60%. Убедитесь сами:

источник

Как сделать медиаплеер на основе Raspberry Pi 3. Собираем устройство и устанавливаем ПО

Что?: Raspberry Pi 3 — новое поколение попурярного микрокомпьютера
Где?: На Gearbest — около $38 на распродаже
Дополнительно
: Платы расширения, аксессуары и датчики для этой платформы — на Gearbest

Семейство недорогих компактных одноплатных компьютеров Raspberry Pi появилось на рынке в несколько лет назад и с тех пор завоевало признание энтузиастов DIY по всему миру. В начале этого года было объявлено, что суммарные продажи превысили восемь миллионов устройств, а число публикаций о них в сети Интернет не поддается подсчету. Так что данная статья в определенном смысле представляет собой еще одну «каплю в море».

Тем не менее, рассказать о собственном опыте работы с новой версией микроПК все-таки хочется. Надеемся, что этот материал будет полезен тем читателям, которые пока незнакомы с этой платформой. Дополнительную информацию можно найти на официальном сайте, различных ресурсах для разработчиков и сайтах, посвященных проектам DIY (например, этом).

Версия Raspberry Pi 3, последняя из «полноразмерных», была анонсирована в начале этого года. Она сохранила основные черты своей предшественницы, включая размеры платы, интерфейсы, число и расположение портов ввода-вывода. Так что с ней будут совместимы разработанные ранее для Raspberry Pi 2 корпуса, дисплеи, камеры, платы расширения и другие компоненты.

Комплект поставки традиционно минимальный – в картонной коробке идет только плата в антистатическом пакете и пара бумажек. Так что для запуска устройства вам потребуются некоторые дополнительные элементы, в частности блок питания с выходом microUSB и параметрами 5 В 2 А, карта памяти формата microSD, монитор и клавиатура.

Внешний вид платы не изменился. Без внимательного рассмотрения отличить ее от предшественницы непросто, если не знать, в какой угол смотреть. Размеры платы составляют 5,6×8,5 см (формат «кретитка»), а максимальная высота определяется двойными портами USB (немногим менее 2 см). На лицевой стороне мы видим главный процессор, чип контроллера Ethernet и USB-хаба, основные слоты и порты. С обратной стороны платы находится чип оперативной памяти и слот для карт памяти.

Ключевым отличием от предшественника является использованная SoC – теперь это 64-х битный четырехядерный чип BCM2837, ядра которого имеют архитектуру ARM Cortex-A53 и работают на штатной частоте 1,2 ГГц (в стандартном дистрибутиве ОС частота снижается до 600 МГц при отсутствии нагрузки). В случае работы с высокой нагрузкой, рекомендуется установить на него радиатор, который часто продается в комплекте с корпусом и блоком питания. В процессоре находится и графический контроллер, который поддерживает API OpenGL ES 2.0 и может декодировать популярные форматы видео (в частности H.264, но не H.265). Второе, тоже достаточно актуальное на наш взгляд, обновление – интеграция на плату контроллеров Wi-Fi (одна антенна, 2,4 ГГц, 802.11b/g/n, до 150 Мбит/с) и Bluetooth 4.1. Наличие встроенного контроллера беспроводной сети позволяет более удобно реализовать сценарии с сетевым подключением, например минисервера автоматизации. С другой стороны, использование компактной антенны (без возможности штатно установить другую, внешнюю) явно не способствует высокой скорости и дальности работы.

Читайте также:  Установка газового счетчика нижний

Объем оперативной памяти не изменился и все также составляет 1 ГБ. Программное обеспечение нужно записывать на карту памяти, собственного флэша здесь нет. Компьютер имеет выход HDMI (поддерживает разрешения до FullHD и даже немного выше), композитный видеовыход и стереоаудиовыход (аудиовхода нет, для его реализации потребуется дополнительное оборудование), четыре порта USB 2.0, 10/100 Мбит/с проводной сетевой контроллер, порт GPIO на 40 контактов (если будете что-то подключать к нему, обратите внимание, что используются уровни 3,3 В), фирменные разъемы для камеры и дисплея и порт microUSB для подачи питания. Выключателя питания в системе нет, как и встроенных часов с собственной резервной батареей. О сравнительной производительности третьей и второй версий компьютера в Интернете представлено очень много информации и, учитывая описанные выше отличия в SoC, вполне ожидаемо, что новое поколение быстрее в связанных с вычислениями на процессоре задачах. С другой стороны, оно более горячее и потребляет больше электроэнергии под нагрузкой, а кардинально нового уровня производительности не обеспечивает. Можно говорить о том, что оба устройства способны решать одни и те же задачи.

Основной ОС для этой платформы является дистрибутив Raspbian, основанный на Debian. Установить его можно с использованием специальной программы NOOBS или просто записав образ операционной системы на карту памяти.

Но конечно продукт совместим с большим числом операционных систем, включая различные варианты Linux (в том числе Gentoo и Ubuntu) и Windows 10 IoT Core. Для решения определенных задач в сети можно найти готовые специализированные проекты дистрибутивов, но никто не мешает вам использовать устройство просто как универсальный многофункциональный компьютер с Linux. Так что найти подходящий для вашего уровня подготовки вариант, скорее всего, не составит труда.

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

Начать можно с достаточно простых сценариев, не требующих глубокого знания программирования и большого опыта работы с паяльником. Пожалуй, наиболее популярный вариант использования миникомпьютера, на который стоит обратить внимание, – реализация медиаплеера. Прежде всего, отметим, что такое решение вполне конкурирует с готовыми продуктами по стоимости, удобству и возможностям. Однако есть несколько особенностей, которые стоит учитывать в данном случае. Во-первых, речь идет только о видео с разрешением до FullHD включительно, а кодеки могут быть представлены наиболее распространенным сегодня H.264 (AVC), а также MPEG2 и VC1.

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

Для хранения медиабиблиотеки можно подключить к компьютеру USB-накопители, но сценарий работы с сетевым накопителем представляется более интересным. Скорости (проводной) сети будет достаточно в том числе и на BD-ремуксы.

Из готовых комплектов для медиацентра наиболее известны четыре: OpenELEC, OSMC, Xbian и Rasplex. Первые три ориентированы на работу с популярной HTPC-оболочкой Kodi и в целом с пользовательской точки зрения выглядят одинаково, а третий является расширенной клиентом для сервера Plex версией OpenELEC. Если тема для вас новая – можно познакомиться с возможностями Kodi, установив его как приложение на ваш настольный компьютер или ноутбук.

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

Читайте также:  Установка климата контроля на вектра б

Процесс запуска решений для медиацентров максимально упрощен – для OpenELEC и OSMC вы скачиваете готовый образ ОС с сайта и записываете его специальной утилитой на карту памяти (большой объем здесь не нужен, я бы рекомендовал 2 или 4 ГБ Class10), Xbian и Rasplex в дополнение к этому, предлагает и собственную программу для инициализации карты памяти и записи на нее образа ОС.

После этого, вы устанавливаете карту в Raspberry Pi, подключаете HDMI, сеть, клавиатуру и мышку (могут потребоваться на начальном этапе конфигурации) и включаете питание. Далее в зависимости от дистрибутива вам может быть предложен мастер для установки некоторых основных параметров (например, имени компьютера, сетевого подключения и т.п.).

Немаловажным вопросом является способ управления плеером. Здесь есть несколько вариантов, если не считать клавиатуры+мышки, что не очень удобно в данном случае. Во-первых, специальные приложения для смартфонов и планшетов. Во-вторых, для некоторых моделей телевизоров можно попробовать HDMI CEC – управление со штатного пульта ТВ по HDMI. В-третьих, можно собраться с духом и добавить к Raspberry Pi одну деталь – приемник ИК-сигналов на трех проводках – и взять любой стандартный пульт ДУ от бытовой техники. Лично для меня последний способ наиболее удобен.

Даже если вы не дружите с паяльником, ничего сложного в нем нет. Нужно купить специальный чип-приемник (до 100 руб в дорогом магазине в Москве в наличии), три провода и подключить все согласно схеме к микрокомпьютеру. Вот ссылки на несколько материалов по теме: первая, вторая, третья.

С точки аппаратной точки зрения тонкостей здесь две. Первая – выбор модели приемника, а точнее его частоты. Большинство пультов работают с 38 кГц, но встречаются модели на 36 кГц. Учитывая невысокую стоимость чипа, можно начать с первого или купить сразу оба. Что касается конкретных артикулов, то подходят, например, модели TSOP31238 (38 кГц) и TSOP31236 (36 кГц). Еще один вариант – попробовать вытащить чип из какого-нибудь старого оборудования, от которого остался и пульт, но здесь нужно быть уверенным в схеме его подключения и напряжении питания. Как раз второй вопрос – правильное подключение ножек к микрокомпьютеру. На нем самом все достаточно просто – земля, питание 3,3 В и линия данных (большинство проектов работают с GPIO18, особого смысла менять ножку нет). А вот микросхемы приемников могут иметь разное расположение ножек, так что обязательно найдите документацию именно на вашу модель и проверьте. Например, для упомянутых TSOP312xx если смотреть со стороны линзы, то слева направо идут земля, питание, данные.

Следующий этап – программная настройка. Наиболее проста она будет в случае применения популярных моделей пультов, например Microsoft MCE или Xbox/Xbox 360 (последний, кстати, работает на 36 кГц). Для них часто есть готовые конфигурационные файлы. Но при желании вы можете настроить и любой другой пульт, хотя с этим придется повозиться. Сначала надо составить соответствие кодов названиям команд и потом отредактировать конфигурацию медиацентра для сопоставления названий команд действиям в программе. Хороший материал по данному вопросу нашелся по этой ссылке http://www.msldigital.com/pages/support-for-remote. Кроме того, для OSMC настройки ИК-пульта есть прямо в меню основного интерфейса.

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

Что касается выбора из указанных выше вариантов дистрибутивов, то наиболее удобным показался проект OSMC. В нем «из коробки» есть русский язык, можно изменить дизайн интерфейса, предусмотрена опция включения доступа по ssh, а также удалось легко запустить ИК-пульт от Xbox 360, просто выбрав его профиль в меню.

OpenELEC интересен тем, что работа Kodi в нем реализована поверх специализированной ОС, а не полноценной Linux, что потенциально должно хорошо сказаться на стабильности и скорости.

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

Rasplex интересен именно в связке с сервером Plex. Это позволяет повысить удобство работы с медиабиблиотекой большого объема благодаря индексации и поддержке метаинформации, загружаемой из сети Интернет.

Безусловно, большинство описанных проблем решаемо, но в случае близких итоговых результатов обычно нет смысла тратить на них время и проще сразу взять устраивающую рабочую версию.

Так что в целом, если вам хочется что-то сделать своими руками и/или не устраивают по гибкости или стоимости готовые решения медиаплееров, Raspberry Pi 3 вполне может удовлетворить желание узнать что-то новое, а также выступить в роли практичного и недорогого решения для этого сценария.

Стоит отметить, что часть упомянутых выше проектов работоспособны не только на Raspberry Pi, но и множестве других аналогичных миникомпьютеров.

источник