首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExoPlayer 2迁移

ExoPlayer 2迁移
EN

Stack Overflow用户
提问于 2016-09-16 09:04:28
回答 1查看 2.1K关注 0票数 2

下面是我们使用ExoPlayer1从url播放ExoPlayer1视频的代码片段,我在升级到ExoPlayer2之后。我不知道升级后该更新什么,因为我对ExoPlayer本身并不太熟悉,也不太了解它。如果有人能遮挡一些光线,任何帮助都会受到感谢。谢堆

代码语言:javascript
复制
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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-16 10:12:26

代码语言:javascript
复制
    Handler handler = new Handler();
DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(handler, null);
MediaSource sampleSource = new ExtractorMediaSource(
    uri,
    new DefaultDataSourceFactory(getContext(), "Android-ExoPlayer", bandwidthMeter),
    new DefaultExtractorsFactory(), null, null);

if (videoPlayer == null) {
  Handler mainHandler = new Handler();
  TrackSelection.Factory videoTrackSelectionFactory =
      new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
  TrackSelector trackSelector =
      new DefaultTrackSelector(mainHandler, videoTrackSelectionFactory);
  LoadControl loadControl = new DefaultLoadControl();
  videoPlayer = ExoPlayerFactory.newSimpleInstance(getContext(), trackSelector, loadControl);
}

videoPlayer.prepare(sampleSource);
videoPlayer.setVideoTextureView(textureView);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39527561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档