Исследование нескольких решений для воспроизведения потоков RTSP на платформе Android (VLC VS ExoPlayer VS SmartPlayer).
Исследование нескольких решений для воспроизведения потоков RTSP на платформе Android (VLC VS ExoPlayer VS SmartPlayer).

Технический опыт

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

1. Использование VLC для Android

VLC Media Player (мультимедийный проигрыватель VLC), первоначально называвшийся клиентом VideoLAN, представляет собой продукт бренда VideoLAN и мультимедийный проигрыватель, разработанный VideoLAN. Он поддерживает множество аудио- и видеодекодеров и форматов файлов, а также поддерживает аудио- и видеодиски DVD, аудио- и видеодиски VCD, а также различные протоколы потоковой передачи. Его также можно использовать в качестве сервера одноадресной или многоадресной потоковой передачи через высокоскоростное сетевое соединение IPv4 или IPv6. Он сочетает в себе декодер проекта FFmpeg и библиотеку libdvdcss для функции воспроизведения мультимедийных файлов и шифрования DVD-дисков.

VLC для Android — это медиаплеер с открытым исходным кодом, который поддерживает несколько форматов, включая потоковую передачу RTSP. Вы можете интегрировать VLC в свое приложение Android или просто отправить URL-адрес потока RTSP в качестве намерения в приложение VLC для воспроизведения.

  • Можно играть во что угодно - Файлы, диски, камеры, устройства и потоковое мультимедиа
  • Воспроизводит большинство форматов без установки пакетов кодеков. - MPEG-2, MPEG-4, H.264, MKV, WebM, WMV, MP3...
  • Работает на всех платформах - Windows, Linux, Mac OS X, Unix, iOS, Android ...
  • совершенно бесплатно - Никакого шпионского ПО, никакой рекламы, никакого отслеживания

Интегрируйте VLC в проекты Android.

Интеграция VLC в платформу Android в основном включает в себя такие этапы, как получение исходного кода с официального склада VLC, настройку среды разработки Android, сборку проекта, развертывание на устройствах Android и тестирование. Ниже приведен подробный процесс интеграции:

1. Получите исходный код VLC.
  • Получите исходный код из официального репозитория Git VLC. Вы можете клонировать ветку Android VLC на свой локальный компьютер с помощью команд Git.,Например, с помощью командыgit clone https://code.videolan.org/videolan/vlc-android.git
2. Настройте среду разработки Android.
  • Установите Android Studio и Android NDK. Android Studio — это официальная среда разработки для разработки приложений Android, а Android NDK используется для компиляции собственного кода (например, C/C++).
  • Убедитесь, что Android Studio и все необходимые плагины обновлены до последней версии.
  • Настройте путь NDK и другие необходимые переменные среды, чтобы эти инструменты можно было найти в процессе сборки.
3. Создайте Android-проект VLC.
  • Откройте Android Studio и выберите «Открыть существующий проект Android Studio».
  • В открывшемся диалоговом окне,Перейдите к репозиторию VLC, который вы клонировали.,и выберитеvlc-androidПапка как каталог проекта。
  • Ждем Android Studio загружает проект. В навигаторе проекта,оказатьсяlibvlcмодуль,и щелкните правой кнопкой мыши, чтобы выбрать“Reimport all Gradle project», чтобы гарантировать правильное разрешение всех зависимостей Gradle.
  • Дождитесь завершения сборки Gradle. Это может занять некоторое время, поскольку проект VLC содержит много кода и зависимостей.
4. Развертывание на устройствах Android
  • Подключите устройство Android к компьютеру и убедитесь, что на устройстве включен режим отладки по USB.
  • На панели инструментов Android Studio нажмите кнопку «Выполнить» и выберите свое устройство Android в качестве целевого.
  • Подождите, пока приложение установится и запустится на устройстве. Если все в порядке, приложение VLC сможет работать на вашем устройстве Android.
5. Тестирование функций VLC
  • Откройте приложение VLC на своем устройстве и попробуйте воспроизвести некоторые аудио- или видеофайлы, особенно потоковый контент, например потоки RTSP.
  • Убедитесь, что аудио и видео воспроизводятся правильно и не возникает сбоев или ошибок.
  • Выполните другие необходимые тесты, такие как регулировка скорости воспроизведения, переключение звуковых дорожек и т. д., чтобы убедиться, что все функции VLC работают правильно.
На что следует обратить внимание
  • В процессе интеграции вы можете столкнуться с некоторыми проблемами, связанными с конкретными версиями Android или устройствами. На этом этапе рекомендуется обратиться за помощью к официальной документации VLC или форумам сообщества.
  • Если вам необходимо изменить исходный код VLC для удовлетворения конкретных потребностей (например, добавить новые функции воспроизведения или оптимизировать производительность), убедитесь, что вы понимаете влияние ваших изменений, и проведите достаточное тестирование, прежде чем отправлять код.
  • Версия VLC для Android может не включать в себя все функции настольной версии, поэтому вам необходимо тщательно оценить, доступны ли необходимые функции при интеграции.

2. Использование ExoPlayer

ExoPlayer от Google — это библиотека воспроизведения мультимедиа с открытым исходным кодом, разработанная для замены API MediaPlayer в Android и обеспечивающая более широкую поддержку форматов и лучшую производительность. ExoPlayer поддерживает потоковую передачу RTSP (через расширение или собственный рендерер).

Поддержка RTSP через FFmpeg

Поскольку FFmpeg — очень мощная мультимедийная платформа, она поддерживает несколько протоколов потоковой передачи, включая RTSP. Вы можете использовать FFmpeg с ExoPlayer для декодирования потока RTSP через FFmpeg и передачи декодированных данных в ExoPlayer для воспроизведения.

  1. Интегрированная библиотека FFmpeg.:первый,Вам необходимо интегрировать библиотеку FFmpeg в ваш проект Android. Это возможно путем компиляции исходного кода FFmpeg в библиотеку для Android.,Или используйте уже скомпилированную библиотеку FFmpeg Android для завершения.
  2. Создайте собственный MediaSource:существоватьExoPlayerсередина,Вы можете создать индивидуальныйMediaSourceинтегрироватьFFmpeg。этотMediaSourceбудет нести ответственность за использованиеFFmpegвытащить и расшифроватьRTSPпоток,И передайте декодированные данные (обычно аудио PCM и видеокадры YUV или RGB) в средство рендеринга ExoPlayer.
  3. Рендеринг декодированных данных:ExoPlayerрендерер(нравитьсяSimpleExoPlayer.VideoRendererEventListenerиSimpleExoPlayer.AudioRendererEventListener)Может принимать декодированный звукивидеоданные,и визуализировать его на экране или воспроизвести. Однако,Поскольку механизмы рендеринга FFmpeg и ExoPlayer могут отличаться,Возможно, вам придется написать дополнительный код, чтобы соединить две системы.

3. SmartPlayer

SmartPlayer — это модуль воспроизведения RTSP с низкой задержкой в ​​серии SmartMediaKit Daniu Live SDK. Он имеет полностью разработанное ядро, полный набор функций, высокую стабильность, сверхнизкую задержку и сверхнизкое использование ресурсов. Он подходит для промышленности. такие как безопасность, образование и индивидуальное управление, а задержка может быть уменьшена до 150-300 мс.

  • [Поддержка протокола воспроизведения] Высокая стабильность、сверхнизкая задержка、Впервые в отраслиRTSPпрямая трансляцияSDK проигрывателя
  • [Воспроизведение нескольких экземпляров] Поддерживает воспроизведение нескольких экземпляров;
  • [Обратный вызов по событию] поддерживает состояние сети, состояние буфера и другие обратные вызовы;
  • [Формат видео] поддерживает H.265, H.264, кроме того, также поддерживает воспроизведение RTSP MJPEG;
  • [Аудиоформат] Поддержка AAC/PCMA/PCMU;
  • [Мягкое декодирование H.264/H.265] Поддержка мягкого декодирования H.264/H.265;
  • [Жесткое декодирование H.264] Windows/Android/iOS поддерживает жесткое декодирование H.264 для определенных моделей;
  • [Жесткая расшифровка H.265] Windows/Android/iOS поддерживает жесткую расшифровку H.265 для определенных моделей;
  • [H.264/H.265 Hard Decoding] Android поддерживает настройку жесткого декодирования в режиме Surface и жесткого декодирования в обычном режиме;
  • [Настройка режима RTSP] Поддержка настройки режима RTSP TCP/UDP;
  • [Автоматическое переключение RTSP TCP/UDP] Поддерживает автоматическое переключение режимов RTSP TCP и UDP;
  • [Настройка тайм-аута RTSP] Поддерживает настройку тайм-аута RTSP, единица измерения: секунды;
  • [Обработка аутентификации RTSP 401] Поддерживает отчеты о событиях RTSP 401. Если URL-адрес содержит информацию аутентификации, она будет обработана автоматически;
  • [Настройка буферного времени]Поддержка буфера настройка времени;
  • [Открыть за секунды на первом экране] Поддерживает режим открытия за секунды на первом экране;
  • [Сложная сетевая обработка] Поддерживает автоматическую адаптацию к различным сетевым средам, например отключение и повторное подключение к сети;
  • [Быстрое переключение URL-адресов] Поддерживает быстрое переключение других URL-адресов во время воспроизведения, а переключение контента происходит быстрее;
  • [Множественные механизмы рендеринга аудио и видео] Платформа Android, видео: Surfaceview/OpenGL ES, аудио: AudioTrack/OpenSL ES;
  • [Отключение звука в реальном времени] Поддерживает отключение/включение звука в режиме реального времени во время воспроизведения;
  • [Регулировка громкости в реальном времени] Поддерживает регулировку громкости в реальном времени во время воспроизведения;
  • [Снимок в реальном времени] поддерживает захват текущего экрана воспроизведения во время воспроизведения;
  • [Воспроизведение только ключевых кадров] Платформа Windows поддерживает настройку в режиме реального времени, следует ли воспроизводить только ключевые кадры;
  • [Угол рендеринга] Поддерживает четыре настройки угла рендеринга видеоэкрана: 0°, 90°, 180° и 270°;
  • [Зеркало рендеринга] поддерживает настройки режима горизонтальной инверсии и вертикальной инверсии;
  • [Равное масштабирование] Поддерживает масштабирование и рисование изображений (режим жесткого решения для поверхностного режима Android не поддерживает это);
  • [Обновление скорости загрузки в реальном времени] Поддерживает обратный вызов текущей скорости загрузки в реальном времени (поддерживает настройку интервала обратного вызова);
  • [Обратный вызов видеоданных перед декодированием] Поддерживает обратный вызов данных H.264/H.265;
  • [Обратный вызов видеоданных после декодирования] Поддерживает обратный вызов данных YUV/RGB после декодирования;
  • [Обратный вызов аудиоданных перед декодированием] Поддерживает обратный вызов данных AAC/PCMA/PCMU;
  • [Адаптивная аудио и видео] поддерживает адаптивную адаптацию после изменения аудио и видео информации во время воспроизведения;
  • [Расширенная функция записи видео] Идеально поддерживает использование в сочетании с SDK для записи видео.

Подвести итог

Какой подход вы выберете, зависит от ваших конкретных потребностей, требований к производительности и того, сколько времени вы готовы потратить на интеграцию и поддержку кода. VLC для Android и ExoPlayer — относительно простой и популярный выбор. Если у вас очень высокие требования к стабильности и функциональной производительности, мы думаем, что вы можете посмотреть SmartPlayer из Daniu Live SDK. Мы думаем, что вы можете обратиться к следующему плееру. стандарты:

1. Низкая задержка: Большая часть воспроизведения RTSP предназначена для сценариев прямой трансляции. Если задержка слишком велика, это серьезно повлияет на качество воспроизведения. Поэтому низкая задержка является очень важным показателем для оценки хорошего RTSP-плеера. В настоящее время задержка воспроизведения RTSP в реальном времени в Daniu Live SDK. ниже, чем у плееров с открытым исходным кодом. Он лучше (задержка Daniu Live SDK находится на уровне миллисекунд, а задержка плееров с открытым исходным кодом, таких как VLC, относительно велика), и при длительной эксплуатации Daniu. Проигрыватель Live SDK не вызывает накопления задержек. Плееры с открытым исходным кодом или сторонние, длительные сроки работы, склонны к накоплению задержек;

2. Обработка синхронизации аудио и видео: Чтобы добиться низкой задержки, большинство плееров даже не синхронизируют аудио и видео и не получают звук. Видео воспроизводится напрямую, что приводит к рассинхронизации аудио/видео и различным проблемам, таким как случайные скачки временных меток. Плеер, предоставляемый Daniu Live SDK, имеет хорошую синхронизацию временных меток и ненормальные механизмы исправления временных меток;

Примечание. Если он находится в режиме сверхнизкой задержки, вы можете установить 0 буферов и не синхронизировать аудио и видео:

3. Поддержка нескольких экземпляров: SDK прямой трансляции RTSP, предоставляемый Daniu Live SDK, поддерживает несколько экземпляров потоковых данных RTSP, если позволяет производительность устройства. Большинство проигрывателей с открытым исходным кодом не поддерживают поддержку нескольких экземпляров.

4. Поддержка буфера настройки времени: В некоторых случаях с дрожаниями сети игроку требуется поддержка. буфера Настройка времени, вообще говоря, измеряется в миллисекундах, а плееры с открытым исходным кодом недостаточно дружелюбны, чтобы это поддерживать;

5. Отключение звука в реальном времени: Например, при воспроизведении потоков RTSP в нескольких окнах качество звука будет очень плохим, поэтому функция отключения звука в реальном времени очень необходима. Плееры с открытым исходным кодом не имеют функции отключения звука в реальном времени;

6. Ротация просмотров видео: Многие камеры вызывают инвертирование изображения из-за ограничений установки, поэтому хороший RTSP-плеер должен поддерживать поворот видеоизображения в реальном времени (0°). 90° 180° 270°), горизонтальная инверсия, вертикальная инверсия, плееры с открытым исходным кодом или сторонние плееры не имеют этой функции;

7. Поддержка вывода аудио/видео данных после декодирования: Danniu Live SDK связался со многими разработчиками в надежде получить данные YUV или RGB во время игры и выполнить анализ алгоритмов, например сопоставление лиц. У проигрывателей с открытым исходным кодом нет этой функции;

8. Живой снимок: Очень важно делать интересные или важные снимки в режиме реального времени. У обычных проигрывателей нет возможности делать снимки, а у проигрывателей с открытым исходным кодом этой функции нет;

9. Обработка джиттера сети (например, отключение и повторное подключение): Стабильный механизм сетевой обработки, такая поддержка, как отключение и повторное подключение сети и т. д. Плееры с открытым исходным кодом плохо поддерживают обработку сетевых исключений;

10. Долгосрочная стабильность работы: SDK прямой трансляции RTSP, предоставляемый Danniu Live SDK, подходит для долгосрочной работы, а проигрыватели с открытым исходным кодом имеют плохую поддержку стабильности для долгосрочной работы;

11. Обратная связь по скорости загрузки в режиме реального времени: Daniu Live SDK обеспечивает обратные вызовы загрузки в реальном времени для аудио- и видеопотоков и может устанавливать временной интервал обратного вызова, чтобы обеспечить обратную связь по скорости загрузки в реальном времени для мониторинга состояния сети. Плееры с открытым исходным кодом не имеют такой возможности;

12. Обработка статуса исключения, обратный вызов статуса события: Если сеть прерывается во время воспроизведения, проигрыватель, предоставляемый Daniu Live SDK, может в режиме реального времени вызывать соответствующий статус, чтобы убедиться, что верхний модуль обнаруживает и обрабатывает его. Плееры с открытым исходным кодом не поддерживают это должным образом.

13. Установить режим заливки видео (отображать пропорционально): Во многих случаях некоторые сцены необходимо воспроизводить в полном представлении, а в некоторых случаях, чтобы видео не растягивалось, можно установить отображение с пропорциональным масштабированием;

14. Обнаружение D3D: Вообще говоря, большинство Windows на рынке поддерживают D3D, а некоторые нишевые поддерживают только рисование в режиме GDI, поэтому для лучшей совместимости этот интерфейс очень необходим;

15. Регулировка громкости в реальном времени: Регулировка громкости в реальном времени, особенно в сценариях многоканального воспроизведения, таких как среда с большим экраном, обеспечивает лучшее качество воспроизведения за счет более точной регулировки громкости;

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

17. Жесткая расшифровка для конкретных моделей: Жесткое декодирование определенных моделей в основном используется в сценариях многоканального воспроизведения для снижения загрузки ЦП за счет жесткого декодирования;

18. Настройки TCP-UDP: Учитывая, что некоторые серверы, аппаратные устройства или сетевые среды лучше поддерживают TCP или UDP, мы добавили интерфейс настройки;

19. Автоматическое переключение TCP-UDP: Это более подробный интерфейс. Например, по умолчанию установлен режим TCP. По истечении времени ожидания данные автоматически переключаются в режим UDP. Обычно проигрыватели с открытым исходным кодом не имеют этой функции;

20. Настройка таймаута: Например, если данные не получены в течение 10-12 секунд, соединение автоматически переподключится. Как правило, плееры с открытым исходным кодом не поддерживают это должным образом.

Судя по результатам сравнительного теста, и vlc player, и ExoPlayer больше подходят для воспроизведения по запросу. С точки зрения задержки и охвата функций поддержка SmartPlayer Daniu Live SDK — это RTSP, специально разработанный для прямой трансляции. RTMP-плеер с очень низкой задержкой и базовым охватом обычных функций, но не поддерживает воспроизведение по требованию. Вышеупомянутое является введением в тему. Заинтересованные разработчики могут связаться с нами индивидуально.

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.