2
Unten sehen Sie den Codeausschnitt, den wir für die Wiedergabe von mp4-Video von einer URL mit ExoPlayer1 verwenden, und ich bin nach dem Upgrade auf ExoPlayer2. Ich bin nicht sicher, was ich aktualisieren soll, damit es nach dem Upgrade funktioniert, da ich den ExoPlayer selbst nicht sehr gut kenne und nicht viele nützliche Dokumentationen dazu. Jede geschätzte Hilfe .. Dank etwas Licht, wenn eine Dose Schatten häuftExoPlayer 2 Migration
private static final int BUFFER_SEGMENT_SIZE = 64 * 1024;
private static final int BUFFER_SEGMENT_COUNT = 256;
private ExoPlayer videoPlayer;
private Allocator allocator = new DefaultAllocator(BUFFER_SEGMENT_SIZE);
private void playVideo(Uri uri) {
Handler handler = new Handler();
DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(handler, null);
DataSource dataSource = new DefaultUriDataSource(getContext(), bandwidthMeter, "Android-ExoPlayer");
SampleSource sampleSource = new ExtractorSampleSource(
uri,
dataSource,
allocator,
BUFFER_SEGMENT_COUNT * BUFFER_SEGMENT_SIZE);
TrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(
sampleSource,
MediaCodecSelector.DEFAULT);
// 2. Construct renderers.
TrackRenderer videoRenderer = new MediaCodecVideoTrackRenderer(
getContext(),
sampleSource,
MediaCodecSelector.DEFAULT,
MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT);
// 1. Instantiate the player.
if (videoPlayer == null) {
videoPlayer = ExoPlayer.Factory.newInstance(4);
}
// 3. Inject the renderers through prepare.
videoPlayer.prepare(videoRenderer, audioRenderer);
// 4. Pass the surface to the video renderer.
SurfaceTexture surfaceTexture = textureView.getSurfaceTexture();
Surface surface = new Surface(surfaceTexture);
videoPlayer.sendMessage(videoRenderer, MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, surface);
videoPlayer.addListener(new ExoPlayer.Listener() {
@Override
public void onPlayerStateChanged(boolean b, int i) {
if (i == ExoPlayer.STATE_READY) {
mediaControl.setMedia(new MediaControl.Media() {
@Override
public void setCurrentPosition(long positionMs) {
if (videoPlayer != null) {
videoPlayer.seekTo(positionMs);
}
}
@Override
public long getCurrentPosition() {
if (videoPlayer != null) {
return videoPlayer.getCurrentPosition();
}
return 0;
}
@Override
public long getDuration() {
if (videoPlayer != null) {
return videoPlayer.getDuration();
}
return 0;
}
@Override
public void start() {
if (videoPlayer != null) {
videoPlayer.setPlayWhenReady(true);
}
}
@Override
public void pause() {
if (videoPlayer != null) {
videoPlayer.setPlayWhenReady(false);
}
}
@Override
public int getBufferedPercentage() {
if (videoPlayer != null) {
return videoPlayer.getBufferedPercentage();
}
return 0;
}
});
mediaControl.start();
videoPlayer.removeListener(this);
}
}
@Override
public void onPlayWhenReadyCommitted() {
}
@Override
public void onPlayerError(ExoPlaybackException e) {
mediaControl.pause();
}
});
// 5. Start playback.
mediaControl.start();
}