Разработка плеера под Linux — кросс-компиляция Mplayer
Разработка плеера под Linux — кросс-компиляция Mplayer

1. Предисловие

MPlayer — это мультимедийный проигрыватель с открытым исходным кодом, который может работать в основных версиях Linux, Windows и Mac OS. Он в основном широко используется в системах Linux; MPlayer не только поддерживает графический интерфейс, но также поддерживает воспроизведение из командной строки. В этой статье рассказывается, как кросс-компилировать MplayerJ и пересадить его на встроенную плату разработки, чтобы нормально запускать видео в командной строке, а структура драйвера кадрового буфера, используемая ЖК-экраном, визуализирует изображение.

Плата разработки использует плату разработки Tiny4412 компании Friendly Arm. MCU — EXYNOS4412 компании Samsung. Разрешение ЖК-дисплея, подключенного к плате, составляет 800*480, интерфейс инфраструктуры драйвера кадрового буфера, версия ядра Linux — 3.5, система не имеет графического интерфейса. , а файловая система: Использование минимальной корневой файловой системы, созданной busybox, позволяет сделать всю систему относительно оптимизированной. Кросс-компилятор использует Arm-Linux-GCC версии 4.5.1.

При запуске Mplayer из командной строки он поддерживает два режима работы: главный режим и подчиненный режим. Главный режим — это обычный режим, который отслеживает события клавиатуры и обеспечивает полное отключение звука, увеличение и уменьшение громкости, управление субтитрами, ускоренную перемотку вперед. в соответствии с сочетаниями клавиш на клавиатуре. Отступите и дождитесь операции. Если вы хотите, чтобы основной процесс управлял проигрывателем с помощью кода для выполнения определенных операций воспроизведения, вы можете использовать подчиненный режим для воспроизведения. В подчиненном режиме вы можете взаимодействовать с mplayer через каналы для завершения загрузки видео, паузы, остановки, быстрой перемотки вперед и т. д. перемотка и т.п. Функция.

2. Портируем библиотеку libmad

По умолчанию MPlayer использует встроенную библиотеку mp3lib для декодирования mp3, но процессоры серии ARM обычно не имеют модулей арифметики с плавающей запятой. mp3lib, используемая mplayer для декодирования mp3, по умолчанию является библиотекой арифметики с плавающей запятой. на руке, поэтому пересаживается. Вам нужно перед mplayer скомпилировать библиотеку libmad.

libmad — это библиотека высокоточного декодирования звука MPEG с открытым исходным кодом. LIBMAD обеспечивает 24-битный вывод PCM, который полностью выполняет вычисления с фиксированной запятой и очень подходит для использования на платформах без поддержки плавающей запятой. Используя ряд API, предоставляемых libmad, вы можете очень просто реализовать декодирование данных MP3. В файле mad.h в каталоге исходного кода libmad вы можете увидеть большинство структур данных и API библиотеки.

Адрес загрузки: http://www.linuxfromscratch.org/blfs/view/svn/multimedia/libmad.html

(1) Разархивируйте

Язык кода:javascript
копировать
[root@xiaolong video]# tar xvf libmad-0.15.1b.tar.gz 
[root@xiaolong video]# cd libmad-0.15.1b

(2) Настройте и сгенерируйте Makefile.

Язык кода:javascript
копировать
[root@xiaolong libmad-0.15.1b]# ./configure CC=arm-linux-gcc --enable-fpm=arm --host=arm-linux --disable-shared --disable-debugging --prefix=$(pwd)/_install
--prefix=$(pwd)/_

install указывает путь установки окончательно сгенерированного файла библиотеки.

(3) Изменить Makefile

Удалите -fforce-mem примерно в строке 29 Makefile.

Или измените его напрямую с помощью команды:

Язык кода:javascript
копировать
sed  -i  's/-fforce-mem/ /g'  Makefile

Найдите в документации -fforce-mem и ничем не замените его.

(4) Скомпилируйте и установите

Язык кода:javascript
копировать
[root@xiaolong libmad-0.15.1b]# make && make install

(5) Просмотр успешно скомпилированных файлов

Язык кода:javascript
копировать
[root@xiaolong libmad-0.15.1b]# cd _install/
[root@xiaolong _install]# ls
include  lib

Есть две папки, include и lib, и в соответствующих папках генерируются файлы mad.h и libmad.a. Эти два файла используются для компиляции mplayer.

3. Кросс-компиляция MPlayer-1.3.0.

Адрес загрузки: http://www.mplayerhq.hu/design7/news.html

(1) Разархивируйте установку.

Язык кода:javascript
копировать
[root@xiaolong video]# tar xvf MPlayer-1.3.0.tar.gz 
[root@xiaolong MPlayer-1.3.0]# cd MPlayer-1.3.0

(2) Настройте и создайте файл config.mak.

Язык кода:javascript
копировать
[root@xiaolong MPlayer-1.3.0]# ./configure --prefix=$PWD/mplayer_installdir --cc=arm-linux-gcc --host-cc=gcc --target=arm-linux --enable-cross-compile --enable-mad  --disable-gui --disable-menu  --disable-x11 --yasm=""  --extra-cflags=-I/work/video/libmad-0.15.1b/_install/include --extra-ldflags=-L/work/video/libmad-0.15.1b/_install/lib/  2>&1 |tee logfile

Пути, указанные выше с помощью -I и -L, представляют собой пути, созданные при компиляции и установке библиотеки libmad. Заполните путь в соответствии с вашим собственным путем к библиотеке libmad.

(3) Измените файл config.mak.

Удалите параметр -s в строке 33 файла config.mak.

Язык кода:javascript
копировать
[root@xiaolong MPlayer-1.3.0]# gedit config.mak +33

(4) Скомпилируйте и установите

Язык кода:javascript
копировать
[root@xiaolong MPlayer-1.3.0]# make && make install

Скомпилируйте и установить После успеха,Вы получите исполняемый файл mplayer.,Это программа командной строки для плеера,Бегите, чтобы воспроизвести видео.

4. Развертывание операционной среды

(1). Копирование зависимых библиотек.

Копирование зависимостей означает, что вам нужно найти все файлы библиотеки, необходимые при запуске команды mplayer, и скопировать их в каталог /lib платы разработки.

Затем скопируйте команду исполняемого файла mplayer в каталог /bins платы разработки.

Язык кода:javascript
копировать
[root@xiaolong MPlayer-1.3.0]# cp mplayer /work/rootfs/bin/ -fv

[root@xiaolong /]#
cp /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/libncurses*.so* /work/rootfs/lib/ -rf

[root@xiaolong /]#
cp /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/libpng*.so* /work/rootfs/lib/ -rf

[root@xiaolong /]#
cp /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/libasound*.so* /work/rootfs/lib/ -rf


[root@xiaolong /]#
cp /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/libz.so*  /work/rootfs/lib/ -rf

[root@xiaolong /]#
cp /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/libjpeg.so*  /work/rootfs/lib/ -rf

[root@xiaolong /]#
cp /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/libfreetype.so*  /work/rootfs/lib/ -rf

(2) Тестовое воспроизведение видео

Язык кода:javascript
копировать
[root@XiaoLong /]# mplayer xiaomaolv.mp4 -zoom -x 800 -y 480

mplayer: команда воспроизведения видео, созданная mplayer. xiaomaolv.mp4: Файл воспроизводимого видео. -zoom -x 800 -y 480: размер масштабирования видео

Игра в фоновом режиме:

Язык кода:javascript
копировать
[root@XiaoLong /]# mplayer -slave -quiet -fs /video_mp3/xiaomaolv.mp4 &

(3) Измените позицию воспроизведения по умолчанию в mplayer.

Измените исходный код:

Язык кода:javascript
копировать
[root@xiaolong MPlayer-1.3.0]# vim libmpcodecs/vf_vo.c +184
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose