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. Сценарій готує каталог "output", який призначений для використання. І це не єдине, що робить цей проект. Вихідний код 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/ від Taner Sener, який більше не підтримується ... і ліцензується згідно з 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 і Multicast можна використовувати тільки в локальній мережі (в основному Wi-Fi), потокова передача HTTP працює локально, але також через Інтернет і використовувати веб-браузер як клієнт. UPnP і канал Multicast не мають безпечного способу контролю доступу, і будь-який пристрій, підключений до мережі Wi-Fi, може використовувати запущений сервер. За допомогою протоколу HTTP ви можете визначити імена користувачів і паролі, а також встановити файли в категорії (групи) доступу, обмежуючи доступ до деяких медіафайлів для певних користувачів. Налаштування сервера дозволяють обмежити, які файли розповсюджуються, і за потреби встановити назву категорії для файлу.

back