Исследование нескольких решений для воспроизведения потоков 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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
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