back

eXport-it FFmpeg

Что такое библиотека FFmpeg?

FFmpeg (https://www.ffmpeg.org/) – это комплексное кроссплатформенное решение для записи, преобразования и потоковой передачи аудио и видео. FFmpeg — это ведущий мультимедийный фреймворк, способный декодировать, кодировать, перекодировать, мультиплексировать, демультиплексировать, транслировать, фильтровать и воспроизводить практически все, что создано людьми и машинами. Он поддерживает самые малоизвестные древние форматы вплоть до самых современных. Независимо от того, были ли они разработаны каким-либо комитетом по стандартам, сообществом или корпорацией.

Кроме того, он обладает высокой переносимостью: FFmpeg компилирует, запускает и передает нашу тестовую инфраструктуру FATE в Linux, Mac OS X, Microsoft Windows, BSD, Solaris и т. д. в самых разных средах сборки, машинных архитектурах, и конфигурации.

Сама библиотека FFmpeg находится под лицензией LGPL 2.1. Включение некоторых внешних библиотек (например, libx264) изменяет лицензию на GPL 2 или более позднюю.

Как эта библиотека интегрирована в приложение для Android

Для компиляции библиотек я использовал скрипт ffmpeg-android-maker (авторы: Александр Бережной Javernaut + codacy-badger Codacy Badger + A2va). Этот скрипт загружает исходный код FFmpeg с https://www.ffmpeg.org, создает библиотеку и собирает ее для Android. Сценарий создает общие библиотеки (файлы *.so), а также файлы заголовков (файлы *.h).

Главной задачей ffmpeg-android-maker является подготовка общих библиотек для полной интеграции в проект Android. Сценарий подготавливает выходной каталог, который предполагается использовать. И это не единственное, чем занимается этот проект. Исходный код ffmpeg-android-maker доступен по лицензии MIT. Дополнительные сведения см. в файле LICENSE.txt на странице https://github.com/Javernaut/ffmpeg-android-maker/. Библиотеки eXport-it FFmpeg просто скомпилированы с помощью libaom, libdav1d, liblame, libopus и libtwolame... но не со всеми связанными библиотеками.

Чтобы разработать поддержку Java для FFmpeg и запустить его на Android 7.1–12, я начал с проекта MobileFFmpeg, задокументированного на https://github.com/tanersener/mobile-ffmpeg/ Танером Сенером, который больше не поддерживается. ... и находится под лицензией LGPL 3.0 ...

Наконец, я подготовил проект JNI Android Studio с библиотеками, включил файлы и код поддержки Java и создал файл библиотеки .aar для интеграции в качестве дополнительной библиотеки в мои существующие проекты.


Как запустить многоадресный канал

Для запуска многоадресного канала требуется использовать клиент для доступа к серверу UPnP в вашей локальной сети (Wi-Fi) с поддержкой FFmpeg. Этот сервер должен ответить списком файлов, которые он экспортирует. Если на этом сервере есть поддержка FFmpeg, в конце верхней строки страницы списка должен быть показан небольшой текст «Как канал» красным цветом. Когда текст «красный», нажатие на кнопку «воспроизведение» работает так же, как и до использования протокола UPnP. Если вы нажмете на текст, он должен стать «зеленым», а нажатие на кнопку «воспроизведение» после выбора видео или аудио файлов должно запустить «канал».

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

Использование этой трубы на других устройствах

Многоадресная IP-рассылка не работает через Интернет, она работает только в локальной сети, поэтому в основном по Wi-Fi. Многоадресный канал данных может совместно использоваться многими клиентами одновременно. Вы отправляете поток мультимедийных данных по своей сети Wi-Fi и показываете эти данные на подключенных устройствах почти синхронно, разница лишь в задержке.

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

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

Также можно использовать другие продукты, такие как VLC, SMplayer, ... для показа видео или прослушивания музыки, распространяемой по многоадресному каналу, просто используя URL-адрес "UDP", отображаемый в клиенте eXport-it.

Чтобы остановить многоадресный канал

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

Практические соображения

Для запуска многоадресного канала требуется определенная клиентская часть этого приложения, такая же, как клиент eXport-it других моих современных продуктов. Использовать работающий многоадресный канал можно с помощью клиента приложения или других продуктов, таких как VLC, SMPlayer, ..., работающих на других платформах или на Android. При использовании VLC URL-адрес для использования многоадресного канала плавно отличается, например, udp://@239.255.147.111:27192... только с дополнительным «@». В многоадресном канале UDP медиаданные отправляются только один раз для отображения на нескольких клиентах, но реальной синхронизации нет, а задержка может составлять несколько секунд в зависимости от буферизации и характеристик устройства.

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

У каждого протокола есть свои преимущества и недостатки. Канал UPnP и многоадресной рассылки можно использовать только в локальной сети (в основном Wi-Fi), потоковая передача HTTP работает локально, но также и через Интернет, и в качестве клиента используется веб-браузер. UPnP и многоадресный канал не имеют безопасного способа управления доступом, и любое устройство, подключенное к сети Wi-Fi, может использовать работающий сервер. С помощью протокола HTTP вы можете определять имена пользователей и пароли, а также устанавливать файлы в категории доступа (группы), ограничивая доступ к некоторым медиафайлам для определенных пользователей. Настройки сервера позволяют ограничить количество распространяемых файлов и при необходимости установить имя категории для каждого файла.

back