Как изменить декодирование плеера Exo или использовать HardwareBufferJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как изменить декодирование плеера Exo или использовать HardwareBuffer

Сообщение Anonymous »

Я разрабатываю приложение для Android, для которого требуется возможность воспроизведения видео с быстрой паузой и функцией воспроизведения.
Приложению необходимо воспроизводить определенный сегмент видео длительностью 1000 мс. p>
Однако у меня возникла проблема с ExoPlayer. Ему сложно обрабатывать видео очень короткой продолжительности: когда я пытаюсь воспроизвести такие фрагменты, видео зависает на кадре, а звук воспроизводится без проблем.
У вас есть идеи, как это исправить?
Думаю, мне нужно воспроизвести видео с аппаратным декодированием, чтобы исправить это
Но я не знаю как
Или проблема во мне код:
Способ создания плеера:
DefaultTrackSelector trackSelector = new DefaultTrackSelector(context);
trackSelector.setParameters(new DefaultTrackSelector.ParametersBuilder()
.setRendererDisabled(C.TRACK_TYPE_VIDEO, true)
.clearOverridesOfType(C.TRACK_TYPE_VIDEO)
.build()
);
player = new ExoPlayer.Builder(context)
.setTrackSelector(trackSelector)
.build();
playerView.setPlayer(player);
playerView.setUseController(false);
MediaItem mediaItem = new MediaItem.Builder()
.setUri(videoUri)
.build();
player.setMediaItem(mediaItem);
player.prepare();

Задача, которая иногда вызывает проблемы: видео зависает на кадре, а звук воспроизводится без проблем
playerView.setOnClickListener(view -> {
playCurrent();
});

playCurrent()
public void playCurrent(){
if (!player.isPlaying()) {
SubRipParserUtil.SubtitleEntry previousSubtitle = parser.getPreviousSubtitle(subtitle.countOfSubtitles,false);
if (previousSubtitle != null && subtitle.startTimeMs - previousSubtitle.endTimeMs > START_EXPAND_TIME) // if last subtitle was not close to current one, start the current play START_EXPAND_TIME Further back
player.seekTo(subtitle.startTimeMs - START_EXPAND_TIME);
else
player.seekTo(subtitle.startTimeMs);

endTimeMs = subtitle.endTimeMs;
player.play();
}
}

Прослушиватель игрока
player.addListener(new Player.Listener() {
@Override
public void onIsPlayingChanged(boolean isPlaying) {
if (isPlaying){
long duration = endTimeMs - player.getCurrentPosition();
handler.postDelayed(stopRunnable, duration);
}
Player.Listener.super.onIsPlayingChanged(isPlaying);
}
});

stopRunnable
stopRunnable = () -> {
if (player.isPlaying()) {
player.pause();
}
};

XML



Подробнее здесь: https://stackoverflow.com/questions/793 ... warebuffer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»