Arhn - архитектура программирования

ExoPlayer - воспроизводить 10 файлов один за другим

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

Я использую ExoPlayer от Google, я использую пример в DEMO @ GitHub. Я могу воспроизвести 1 видео, но если я попытаюсь воспроизвести следующее, оно не запустится.

Если я попытаюсь перезагрузить плеер и снова начать играть, он вылетает.

private void loadvideo() {
    Uri uri = Uri.parse(VIDEO_LIBRARY_URL + currentVideo + ".mp4");
    sampleSource = new FrameworkSampleSource(this, uri, null, 2);

    // 1. Instantiate the player.
    // 2. Construct renderers.
    videoRenderer = new MediaCodecVideoTrackRenderer(sampleSource, MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
    audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource);
    // 3. Inject the renderers through prepare.
    player.prepare(videoRenderer, audioRenderer);
    // 4. Pass the surface to the video renderer.
    surface = surfaceView.getHolder().getSurface();

    player.sendMessage(videoRenderer, MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, surface);
    // 5. Start playback.
    player.setPlayWhenReady(true);
    player.addListener(new ExoPlayer.Listener() {
        @Override
        public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
            Log.d(TAG, "onPlayerStateChanged + " + playbackState);
            if (playbackState == ExoPlayer.STATE_ENDED) {
                currentVideo++;
                loadNextVideo();
            }
        }

        @Override
        public void onPlayWhenReadyCommitted() {

        }

        @Override
        public void onPlayerError(ExoPlaybackException error) {

        }
    });

}

Что я делаю не так? Как я могу воспроизвести непрерывность видео?

Спасибо.

02.02.2015

  • какую ошибку вы получаете в аварии? 02.02.2015
  • также, как выглядит ваш код loadNextVideo(). 05.02.2015

Ответы:


1

Вы можете повторно использовать ExoPlayer до момента, когда вы вызываете release(), после чего его больше не следует использовать.

Чтобы изменить воспроизводимый в данный момент носитель, вам необходимо выполнить следующие шаги:

// ...enable autoplay...
player.stop();
player.seekTo(0L);
player.prepare(renderers);

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

05.02.2015
  • У меня была такая же проблема, и это решение сработало для меня 29.04.2015
  • Для меня вовсе не было очевидным, что нужно стремиться к 0 перед повторной подготовкой рендерера. Спасибо. 09.03.2016

  • 2

    Я использую Exoplayer для изменения видео в формате mp4. Я использую пример в DEMO. 1.Демо-проект в DemoPlayer.java:

     private final RendererBuilder rendererBuilder;
     //remove final,then modify that:
    
     private RendererBuilder rendererBuilder;
    
     //and add the set method:
     public void setRendererBuilder(RendererBuilder rendererBuilder){
          this.rendererBuilder = rendererBuilder;
      }
    
     //finally,add stop method
     public void stop(){
          player.stop();
      }
    

    2.Демонстрационный проект в PlayerActivity.java: добавить метод:

    private void changeVideo(){
            player.stop();
            player.seekTo(0L);
            //you must change your contentUri before invoke getRendererBuilder();
            player.setRendererBuilder(getRendererBuilder());
            player.prepare();
            playerNeedsPrepare = false;
        }
    

    не забудьте изменить параметр contentUri перед вызовом метода changeVideo.

    13.08.2015

    3

    Хорошо, отвечая на мой собственный вопрос. например, Google инициализирует ExoPlayer в OnResume(). я должен был повторно инициализировать для каждого видео, как это:

    player = ExoPlayer.Factory.newInstance(2, 1000, 5000);
    

    если у кого-то есть идея получше, пожалуйста, дайте мне знать.

    02.02.2015
  • Это не решает проблему для меня :( 10.04.2015
  • @Marky17 Marky17 Перед созданием нового экземпляра вызовите метод releasePlayer(). 24.06.2015
  • @Shahar Привет, я пытаюсь создать простую программу видеоплеера с помощью ExoPlayer, но еще не сделал, я проверил ваши репозитории Github, но не нашел там ваш образец ExoPlayer ... пожалуйста, опубликуйте свой образец и поделитесь со мной ссылкой .. поэтому я у того научится.. 31.12.2015

  • 4

    Есть еще одно решение, вы можете обратиться к ConcatenatingMediaSource для автоматического воспроизведения следующего носителя.

    В примере демонстрационного приложения: 1. Запустите ExoPlayer 2. Выберите плейлисты 3. Выберите Кошки->Собаки

    13.03.2017

    5

    Используйте ConcatenatingMediaSource для последовательного воспроизведения файлов. Например, для воспроизведения 2 медиа Uris (firstVideoUri и secondVideoUri) используйте этот код:

    MediaSource firstSource =
        new ExtractorMediaSource.Factory(...).createMediaSource(firstVideoUri);
    MediaSource secondSource =
        new ExtractorMediaSource.Factory(...).createMediaSource(secondVideoUri);
    
    ConcatenatingMediaSource concatenatedSource =
        new ConcatenatingMediaSource(firstSourceTwice, secondSource);
    

    А затем используйте concatenatedSource для последовательного воспроизведения медиафайлов.

    30.04.2019
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..