下面是我们使用 ExoPlayer1 从 url 播放 mp4 视频的代码片段,我在升级到 ExoPlayer2 之后。我不确定升级后要更新什么以使其正常工作,因为我对 ExoPlayer 本身不太熟悉,并且没有太多有用的文档。如果有人可以遮住一些光线,任何帮助表示赞赏..谢谢堆
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();
}