Интеграция RTSP|RTMP-плеера платформы Android (SmartPlayer) должна быть прочитана
Интеграция RTSP|RTMP-плеера платформы Android (SmartPlayer) должна быть прочитана

Технический бэкграунд

Многие разработчики получили Даниэля напрямую Модули воспроизведения RTSP и RTMP платформы Android трансляционного SDK практически не читают инструкции. После тестирования они напрямую интегрируются в вашу собственную систему. Я должен сказать, что, хотя у нас много модулей, Поддержка функцийвсесторонний,Но логика разработки верхней демо-версии действительно проста.,Некоторые основы разработки под Android,Со всем можно легко справиться.

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

В этой статье не рассматриваются детали вызовов интеграции интерфейса. В основном она описывает некоторые предварительные условия и меры предосторожности для интеграции проигрывателя.

Предварительные условия

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

Если вам нужно изменить имя приложения, просто измените strings.xml:

Язык кода:javascript
копировать
<string name="app_name">SmartPlayerSDKDemo</string>

Каталог SmartPlayer

имя файла

эффект

SmartPlayerV2

Плеер прямых трансляций RTSP|RTMP Исходный код демо-проекта

SmartPlayerV2\app\src\main\jniLibs

smartavengine.jar и libSmartPlayer.so

SmartPlayerV2\app\src\main\java\com\daniulive\ smartplayer\SmartPlayerJniV2.java

Заголовочный файл проигрывателя

SmartPlayerV2\app\src\main\java\com\daniulive\ smartplayer\SmartPlayer.java

Пример вызова интерфейса

Подготовка

  • Убедитесь, что файл SmartPlayerJniV2.java находится под именем пакета com.daniulive.smartplayer.(Доступно в других названиях пакетов Внизвызов);
  • В проект добавляется Smartavengine.jar;
  • Скопируйте SmartPlayerV2\app\src\main\jniLibs\armeabi-v7a, SmartPlayerV2\app\src\main\jniLibs\arm64-v8a, SmartPlayerV2\app\src\main\jniLibs\x86 и SmartPlayerV2\app\src\main\jniLibs \x86_64 Далее libSmartPlayer.so для проекта;
  • AndroidManifast.xml добавляет соответствующие разрешения:
Язык кода:java
копировать
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
  • Связано с нагрузкой так:
Язык кода:java
копировать
static {  
    System.loadLibrary("SmartPlayer");
}
  • build.gradle настраивает 32/64-битные библиотеки:
Язык кода:java
копировать
splits {
    abi {
        enable true
        reset()
        // Specifies a list of ABIs that Gradle should create APKs for
        include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' //select ABIs to build APKs for
        // Specify that we do not want to also generate a universal APK that includes all ABIs
        universalApk true
    }
}

Дизайн интерфейса

Подробное объяснение интерфейса SDK плеера Android RTSP | RTMP.

описание звонка

интерфейс

интерфейсописывать

Вызывается первым, в случае успеха будет возвращен экземпляр воспроизведения.

SmartPlayerOpen

Инициализировать проигрыватель, установить контекстную информацию, вернуть дескриптор проигрывателя

Обратный вызов события

SetSmartPlayerEventCallbackV2

Установить обратный вызов события

Настройки жесткого декодирования (H.264)

SetSmartPlayerVideoHWDecoder

Установите, использовать ли жесткое декодирование H.264 для воспроизведения. Если жесткое декодирование не поддерживается, оно автоматически адаптируется к мягкому декодированию.

Настройки жесткого декодирования (H.265)

SetSmartPlayerVideoHevcHWDecoder

Установите, использовать ли жесткое декодирование H.265 для воспроизведения. Если жесткое декодирование не поддерживается, оно автоматически адаптируется к мягкому декодированию.

видеоэкран Режим заполнения

SmartPlayerSetRenderScaleMode

Установите режим заполнения видеоэкрана, например, заполнение всего изображения или пропорциональное заполнение изображения. Если этот параметр не установлен, по умолчанию будет заполнено все изображение.

Установите тип рендеринга в режиме SurfaceView

SmartPlayerSetSurfaceRenderFormat

Установите тип рендеринга в режиме SurfaceView (когда второй параметр NTRenderer.CreateRenderer передает значение false) 0: формат RGB565, если не установлен, этот режим используется по умолчанию 1: формат ARGB8888;

Установите эффект сглаживания в режиме SurfaceView.

SmartPlayerSetSurfaceAntiAlias

Установите эффект сглаживания в режиме SurfaceView (если второй параметр NTRenderer.CreateRenderer имеет значение false. Примечание. После включения режима сглаживания производительность изображения может снизиться, используйте с осторожностью).

Установите поверхность воспроизведения

SmartPlayerSetSurface

Установите поверхность воспроизведения,если ноль,затем воспроизведи чистый звук

Установите режим самостоятельного рисования Mediacodec при жестком декодировании видео.

SmartPlayerSetHWRenderMode

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

Обновить поверхность жесткого декодирования

SmartPlayerUpdateHWRenderSurface

настраивать Обновить поверхность жесткого декодирования

Аудио обратный вызов

YUV/RGB

SmartPlayerSetExternalRender

Обеспечить декодированный интерфейс данных YUV/RGB,Для пользователей для рендеринга или дальнейшей обработки (например, анализа видео)

Audio

SmartPlayerSetExternalAudioOutput

Обратный вызов аудиоданных на верхний уровень (для вторичной обработки)

тип аудиовыхода

SmartPlayerSetAudioOutputType

Если для параметра use_audiotrack установлено значение 0, устройство вывода будет выбрано автоматически. Если для него установлено значение 1, будет использоваться режим аудиодорожки. В режиме эхоподавления «один к одному» выберите режим аудиодорожки.

Тип видеовыхода

NTRenderer.CreateRenderer (в верхней демо)

Второй параметр, если он равен true, использует openGLES для рисования, если false, используется SurfaceView по умолчанию.

режим воспроизведения

Настройка времени буфера

SmartPlayerSetBuffer

Установите буфер данных кэша завершения воспроизведения, единица измерения: миллисекунды. Если буфер не требуется, установите его на 0.

Открыть мгновенно на первом экране

SmartPlayerSetFastStartup

После настройки быстрого запуска,Если CDN кэширует GOP,выполнить Открыть мгновенно на первом экране

режим с низкой задержкой

SmartPlayerSetLowLatencyMode

Цель аналогична прямой трансляция Крановые машины и другие сценарии использования, где ожидается сверхнизкая задержка, режим сверхнизкой задержки переключатель Вниз, задержка может достигать 200~400мс

Быстрое переключение URL-адресов

SmartPlayerSwitchPlaybackUrl

Быстрое переключение URL-адреса воспроизведения. При быстром переключении изменяется только часть источника воспроизведения. Он подходит для быстрого переключения между различными потоками данных (например, переключения между двумя камерами кукольной машины или переключения между потоками высокого и низкого разрешения).

Настройки режима RTSP TCP/UDP

SmartPlayerSetRTSPTcpMode

Установить режим RTSP TCP/UDP. Если этот параметр не установлен, будет использоваться режим UDP по умолчанию.

Настройка тайм-аута RTSP

SmartPlayerSetRTSPTimeout

Установите тайм-аут RTSP, единица измерения — секунды, должно быть больше 0.

Установите автоматическое переключение RTSP TCP/UDP

SmartPlayerSetRTSPAutoSwitchTcpUdp

Что касается RTSP, некоторые могут поддерживать rtp через udp, а некоторые могут поддерживать rtp через TCP. Для удобства использования в некоторых сценариях можно включить переключатель автоматической попытки. Если после включения udp невозможно воспроизвести, SDK автоматически попытается использовать TCP. Если tcp не может быть воспроизведен, SDK автоматически попытается использовать udp.

Установите имя пользователя и пароль RTSP

SetRTSPAuthenticationInfo

Если РТСП URL-адрес уже содержит имя пользователя и пароль, Имя пользователя и пароль, установленные для этого интерфейса, будут недействительны. То есть вам необходимо использовать имя пользователя и пароль, установленные этим интерфейсом, для аутентификации. RTSP URL-адрес не может содержать имя пользователя и пароль.

Отключение звука в реальном времени

SmartPlayerSetMute

Отключение звука в реальном времени

Установить громкость воспроизведения

SmartPlayerSetAudioVolume

Громкость окончания воспроизведения регулируется в реальном времени, диапазон: [0,100], 0 — звук без звука, 100 — максимальная громкость исходных потоковых данных.

Установите, отключать ли расширенный RTMP

DisableEnhancedRTMP

отключить расширенный RTMP, SDK включает расширенный RTMP по умолчанию

Скриншот в реальном времени

CaptureImage

Поддерживает форматы JPEG и PNG.

Видео поворот зеркала

вращать

SmartPlayerSetRotation

настраивать顺时针вращать, Обратите внимание, что помимо 0 градусов, Другие углы потребуют дополнительной производительности и в настоящее время поддерживаются. 0 градусов, 90 градусов, 180 градусов, 270 градусов вращать

горизонтальный разворот

SmartPlayerSetFlipHorizontal

настраивать视频горизонтальный разворот

вертикальная инверсия

SmartPlayerSetFlipVertical

настраивать视频вертикальная инверсия

Установить URL

SmartPlayerSetUrl

Установите URL-адрес RTMP/RTSP, который необходимо воспроизвести или записать.

Начать играть

SmartPlayerStartPlay

Начать игратьRTSP/RTMPпоток

Хватит играть

SmartPlayerStopPlay

Хватит игратьRTSP/RTMPпоток

Закрыть экземпляр воспроизведения

SmartPlayerClose

В конце необходимо вызвать closeinterface для освобождения ресурсов.

Поддержка функций

  • Аудио: AAC/Speex(RTMP)/PCMA/PCMU;
  • Видео: H.264, H.265;
  • Протокол воспроизведения: RTSP|RTMP;
  • Поддержка чистого звука, чистого видео, воспроизведения аудио и видео;
  • Поддержка воспроизведения нескольких экземпляров;
  • Поддержка мягкого и жесткого декодирования для конкретных моделей;
  • Поддержка RTSP TCP, настроек режима UDP;
  • Поддерживает автоматическое переключение режимов RTSP TCP и UDP;
  • поддерживать Настройка тайм-аута RTSP,единица:Второй;
  • Поддержка настройки времени буфера, единица измерения: миллисекунды;
  • поддерживать超режим с низкой задержкой;
  • Поддерживает автоматическое переподключение при отключении, перехват видео и обратные вызовы, такие как состояние буфера;
  • Поддержка просмотра видео в режиме реального времени (0° 90° 180° 270°);
  • поддерживать视频viewгоризонтальный разворот、вертикальная инверсия;
  • Поддержка рисования Surfaceview/OpenGL ES/TextureView;
  • Поддержка настройки режима заполнения видеоэкрана;
  • Аудио поддерживает режимы AudioTrack и OpenSL ES;
  • поддерживатьjpeg、pngСкриншот в реальном времени;
  • Поддержка регулировки громкости в режиме реального времени;
  • Поддержка обратного вызова аудио и видео данных перед декодированием;
  • Поддерживает обратный вызов данных YUV/RGB после декодирования;
  • Поддержка расширенного RTMP;
  • Поддержка расширенной функции записи видео;
  • Поддерживает Android 5.1 и выше.
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