So ändern Sie die Dekodierung des Exo-Players oder verwenden HardwareBufferJava

Java-Forum
Guest
 So ändern Sie die Dekodierung des Exo-Players oder verwenden HardwareBuffer

Post by Guest »

Ich entwickle eine Android-App, die die Fähigkeit zum Abspielen von Videos mit schneller Pause- und Wiedergabefunktion erfordert.
Die App muss ein bestimmtes 1000-ms-Segment des Videos abspielen.
Ich habe jedoch ein Problem mit ExoPlayer. Es ist schwierig, Videos mit sehr kurzer Dauer zu verarbeiten – wenn ich versuche, solche Segmente abzuspielen, friert das Video auf einem Frame ein, während der Ton ohne Probleme abgespielt wird.
Haben Sie eine Idee, wie man das Problem beheben kann?
Ich glaube, ich muss mein Video mit Hardware-Dekodierung abspielen, um das Problem zu beheben
Aber ich weiß nicht wie
Oder das Problem liegt bei mir Code:
Die Art und Weise, wie ich den Player erstellt habe:

Code: Select all

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();
Die Aufgabe, bei der es manchmal zu Problemen kommt: Das Video friert bei einem Frame ein, während der Ton ohne Probleme abgespielt wird

Code: Select all

playerView.setOnClickListener(view -> {
playCurrent();
});
playCurrent()

Code: Select all

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-Listener

Code: Select all

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

Code: Select all

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post