ExoPlayer的使用介绍

电脑杂谈  发布时间:2019-12-25 04:02:18  来源:网络整理

android exoplayer_exoplayer是什么_exoplayer jar

推荐:

欢迎关注我创建的Android TV 简书专题,会定期给你们分享一些AndroidTV相关的内容:Android TV

前言:ExoPlayer是google推出的一个应用级的播放框架。接下来我来对它做一个简单的介绍。

1.支持更多的格式

我们知道Android 提供的mediaPlayer只支持有限的格式,比如视频,它支持MP4,3GP。想要播放其它格式的视频需要进行相应的转化。ExoPlayer提供了强大的格式支持。

exoplayer是什么_android exoplayer_exoplayer jar

ExoPlayer支持的外媒格是在多个级别定义的。 从最低层至最高层exoplayer jar,分别是:

2.ExoPlayer是java语言编写的,相比与MediaPlayer用Native Code来说,可以很明白的获取一些异常源跟进行个别代码调试。

3.ExoPlayer是开源的,github上地址ExoPlayer遇到问题后可以提交Issues,最近遭遇关于SimpleExoPlayer setVideoListener去OnVideoSizeChanged()时黑屏有声音,然后提交了一个Issues:The surface show nothing after mSimpleExoPlayer.setVideoListener(mVideoListener),他们随后帮了回复exoplayer jar,另外开源的代码经过大家的验证,也会变得的健壮。

4.ExoPlayer有强大的开发文档developer guide ,读者也可以按照文档更好的知道它。

这里演示一个播放器的简单使用。

exoplayer jar_android exoplayer_exoplayer是什么

<LinearLayout
    android:id="@+id/activity_main"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.songwenju.useexoplayer.MainActivity">
    <com.google.android.exoplayer2.ui.SimpleExoPlayerView
        android:id="@+id/exoView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ProgressBar
            android:id="@+id/progressBar"
            android:visibility="gone"
            style="?android:attr/progressBarStyleLarge"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"/>
    </com.google.android.exoplayer2.ui.SimpleExoPlayerView>
</LinearLayout>

这里使用了SimpleExoPlayerView,在其外部添加了一个ProgressBar。

初始化播放器:

   /**
     * 初始化player
     */
    private void initPlayer() {
        //1. 创建一个默认的 TrackSelector
        BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
        TrackSelection.Factory videoTackSelectionFactory =
                new AdaptiveTrackSelection.Factory(bandwidthMeter);
        TrackSelector trackSelector =
                new DefaultTrackSelector(videoTackSelectionFactory);
        LoadControl loadControl = new DefaultLoadControl();
        //2.创建ExoPlayer
        mSimpleExoPlayer = ExoPlayerFactory.newSimpleInstance(this,trackSelector,loadControl);
        //3.创建SimpleExoPlayerView
        mExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.exoView);
        //4.为SimpleExoPlayer设置播放器
        mExoPlayerView.setPlayer(mSimpleExoPlayer);
    }

开始播放:

android exoplayer_exoplayer jar_exoplayer是什么

 private void playVideo() {
        //测量播放过程中的带宽。 如果不需要,可以为null。
        DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
        // 生成加载媒体数据的DataSource实例。
        DataSource.Factory dataSourceFactory
                = new DefaultDataSourceFactory(MainActivity.this,
                Util.getUserAgent(MainActivity.this,"useExoplayer"),bandwidthMeter);
        // 生成用于解析媒体数据的Extractor实例。
        ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
        // MediaSource代表要播放的媒体。
        MediaSource videoSource = new ExtractorMediaSource(playerUri,dataSourceFactory,extractorsFactory,
                null,null);
        //Prepare the player with the source.
        mSimpleExoPlayer.prepare(videoSource);
        //添加的listener
//        mSimpleExoPlayer.setVideoListener(mVideoListener);
        mSimpleExoPlayer.addListener(eventListener);
//        mSimpleExoPlayer.setTextOutput(mOutput);
        mSimpleExoPlayer.setPlayWhenReady(true);
    }

播放器的状态:

 private ExoPlayer.EventListener eventListener = new ExoPlayer.EventListener() {
        @Override
        public void onTimelineChanged(Timeline timeline, Object manifest) {
            LogUtil.i(this,"onTimelineChanged");
        }
        @Override
        public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
            LogUtil.i(this,"onTracksChanged");
        }
        @Override
        public void onLoadingChanged(boolean isLoading) {
            LogUtil.i(this,"onLoadingChanged");
        }
        @Override
        public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
            LogUtil.i(this,"onPlayerStateChanged: playWhenReady = "+String.valueOf(playWhenReady)
                    +" playbackState = "+playbackState);
            switch (playbackState){
                case ExoPlayer.STATE_ENDED:
                    LogUtil.i(this,"Playback ended!");
                    //Stop playback and return to start position
                    setPlayPause(false);
                    mSimpleExoPlayer.seekTo(0);
                    break;
                case ExoPlayer.STATE_READY:
                    mProgressBar.setVisibility(View.GONE);
                    LogUtil.i(this,"ExoPlayer ready! pos: "+mSimpleExoPlayer.getCurrentPosition()
                            +" max: "+stringForTime((int)mSimpleExoPlayer.getDuration()));
                    setProgress(0);
                    break;
                case ExoPlayer.STATE_BUFFERING:
                    LogUtil.i(this,"Playback buffering!");
                    mProgressBar.setVisibility(View.VISIBLE);
                    break;
                case ExoPlayer.STATE_IDLE:
                    LogUtil.i(this,"ExoPlayer idle!");
                    break;
            }
        }
        @Override
        public void onPlayerError(ExoPlaybackException error) {
            LogUtil.i(this,"onPlaybackError: "+error.getMessage());
        }
        @Override
        public void onPositionDiscontinuity() {
            LogUtil.i(this,"onPositionDiscontinuity");
        }
        @Override
        public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
            LogUtil.i(this,"MainActivity.onPlaybackParametersChanged."+playbackParameters.toString());
        }
    };


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-134562-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 王四洋
      王四洋

      来真格的让你有来无回

    • 赵茂羽
      赵茂羽

      果断把今天刚买的芝麻糊扔掉

    热点图片
    拼命载入中...