Замечания по разработке FFmpeg (56) Использование Exoplayer Media3 для воспроизведения онлайн-видео
Замечания по разработке FFmpeg (56) Использование Exoplayer Media3 для воспроизведения онлайн-видео

Ранний элемент управления MediaPlayer в Android имел плохую совместимость с онлайн-видео, поэтому позже отдельно была запущена библиотека Exoplayer для улучшения поддержки онлайн-видео, как описано в 14-й главе книги «Практика разработки Android Studio: от нулевых основ к App Online (3-я глава). Edition)» Глава «14.3.3 Новый проигрыватель ExoPlayer» подробно описывает использование библиотеки Exoplayer.

Теперь официальные лица Android снова обновили Exoplayer и включили его в медиатеку третьего поколения Jetpack Media3 в качестве унифицированного механизма обработки для операций, связанных с аудио и видео. Модернизированный Exoplayer станет унифицированным механизмом воспроизведения мультимедиа Media3, предоставляющим компоненты прикладного уровня для воспроизведения аудио и видео, стремясь объединить мир в направлении рендеринга аудио и видео. Согласно официальному сайту Android, ExoPlayer также решает проблему фрагментации устройства и операционной системы, позволяя коду приложения работать во всей экосистеме Android согласованным образом. Поскольку Media3 — это совершенно новая библиотека Jetpack, к ней предъявляются относительно высокие требования к среде разработки. Прежде чем Media3 можно будет нормально внедрить, необходимо выполнить следующие условия. 1. Инструмент разработки должен быть Android Studio Jellyfish (версия Jellyfish) или выше. 2. Версия Gradle должна быть не ниже 8.6. 3. CompileSdk и targetSdk в build.gradle модуля приложения должны быть обновлены до версии 34 или выше. Подготовьте среду разработки в соответствии с вышеуказанными условиями, а затем внедрите библиотеку ExoPlayer Media3, как описано ниже. Подробные шаги описаны ниже.

1. Измените build.gradle модуля.

Добавьте следующий оператор пакета импорта в узел зависимостей build.gradle и добавьте все связанные библиотеки, используемые ExoPlayer.

Язык кода:javascript
копировать
implementation "androidx.media3:media3-exoplayer:1.4.0"
implementation "androidx.media3:media3-exoplayer-hls:1.4.0"
implementation "androidx.media3:media3-exoplayer-rtsp:1.4.0"
implementation "androidx.media3:media3-ui:1.4.0"
implementation "androidx.media3:media3-common:1.4.0"
implementation "androidx.media3:media3-session:1.4.0"
implementation "androidx.media3:media3-datasource:1.4.0"
implementation "androidx.media3:media3-datasource-rtmp:1.4.0"

2. Отредактируйте файл макета интерфейса воспроизведения.

Откройте XML-файл макета интерфейса воспроизведения и добавьте следующую конфигурацию атрибутов в корневой макет:

Язык кода:javascript
копировать
xmlns:app="http://schemas.android.com/apk/res-auto"

Затем добавьте внутрь макета узел управления PlayerView из библиотеки ExoPlayer, например:

Язык кода:javascript
копировать
<!-- Отображает ли use_controller панель управления, show_timeout — интервал исчезновения панели управления, отображает ли show_buffering буфер, режим регулировки размера resize_mode -->
<androidx.media3.ui.PlayerView
    android:id="@+id/pv_content"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:show_buffering="always"
    app:show_timeout="5000"
    app:use_controller="true"
    app:resize_mode="fit"/>

3. Добавьте код обработки ExoPlayer в код страницы активности.

Сначала добавьте следующую строку кода для объявления объекта PlayerView:

Язык кода:javascript
копировать
private ExoPlayer mPlayer; // Объявите новый тип объекта игрока

Затем добавьте следующий код в метод onCreate, чтобы получить объект PlayerView и установить на него объект проигрывателя ExoPlayer:

Язык кода:javascript
копировать
    PlayerView pv_content = findViewById(R.id.pv_content);
    mPlayer = new ExoPlayer.Builder(this).build();
    pv_content.setPlayer(mPlayer); // Установите объект игрока в представлении игрока

Затем добавьте следующий метод воспроизведения, чтобы начать воспроизведение онлайн-видео по указанной ссылке.

Язык кода:javascript
копировать
// Воспроизвести видео
private void playVideo(Uri uri) {
    DataSource.Factory factory = new DefaultDataSource.Factory(this);
    // Создать медиа-объект по указанному адресу
    MediaItem videoItem = new MediaItem.Builder().setUri(uri).build();
    // Создание медиа-источников на основе фабричных объектов и медиа-объектов.
    MediaSource videoSource;
    if (uri.getPath().endsWith("m3u8")) { // ссылка на хлс
        videoSource = new HlsMediaSource.Factory(factory)
                .createMediaSource(videoItem);
    } else if (uri.getPath().startsWith("rtsp")) { // rtsp-ссылка
        videoSource = new RtspMediaSource.Factory()
                .createMediaSource(videoItem);
    } else if (uri.getPath().startsWith("rtmp")) { // rtmp-ссылка
        videoSource = new ProgressiveMediaSource.Factory(new RtmpDataSource.Factory())
                .createMediaSource(videoItem);
    } else { // Другие ссылки (обычные ссылки на видео, начинающиеся с http или https)
        videoSource = new ProgressiveMediaSource.Factory(factory)
                .createMediaSource(videoItem);
    }
    mPlayer.setMediaSource(videoSource); // Установите источник мультимедиа плеера
    mPlayer.prepare(); // Игрок готов
    mPlayer.play(); // Игрок начинает играть
}

Из приведенного выше кода воспроизведения мы видим, что здесь используются четыре режима воспроизведения ExoPlayer, а именно: воспроизведение ссылки HLS, воспроизведение ссылки RTMP, воспроизведение ссылки RTSP и воспроизведение обычного сетевого видео.

4. Добавьте разрешения на доступ в Интернет в AndroidManifest.xml.

Откройте AndroidManifest.xml и добавьте следующую конфигурацию разрешений Интернета:

Язык кода:javascript
копировать
<uses-permission android:name="android.permission.INTERNET" />

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

Видно, что библиотека ExoPlayer Media3 успешно запущена и онлайн-видео можно воспроизводить нормально.

Более подробную информацию о разработке FFmpeg можно найти в книге «Практика разработки FFmpeg: от нулевых основ до короткого онлайн-видео».

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода