Google ExoPlayer指南 [英] Google ExoPlayer guide

查看:110
本文介绍了Google ExoPlayer指南的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在努力使用ExoPlayer构建基本应用.

I am struggling to build basic app with ExoPlayer.

您好,嗯,我在入门"部分遇到了问题.不知道要播放视频或流媒体需要使用什么.如何停止,播放,暂停...另一个问题是我不知道自己提供的内容,例如,在DefaultDataSourceFactory构造函数中,为什么,在没有某些参数的情况下得到的内容...我非常困惑整个用法...请帮忙!谢谢!

hello, well, i have problem with "getting started" part. don't know what need to use in order to play video or stream. how to stop,play,pause... Another problem is that I don't know what I am providing , for example, in DefaultDataSourceFactory constructor, why, what I am getting with and without some params... I am pretty confused with whole usage... please help! thanks!

推荐答案

首先,您需要在build.gradle中添加它.
编译'com.google.android.exoplayer:exoplayer:r2.1.1'

First you need to add this in your build.gradle
compile 'com.google.android.exoplayer:exoplayer:r2.1.1'

1.您的布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    >
    <com.google.android.exoplayer2.ui.SimpleExoPlayerView
        android:id="@+id/player_view"
        android:focusable="true"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</RelativeLayout>

2.您的课程文件

public class ExoPlayerActivity extends AppCompatActivity implements ExoPlayer.EventListener {
        SimpleExoPlayer player;
        String path;        // it can be url of video for online streaming or a url of local video

        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_exoplayer);

            // set your path here
            path=<your path>;

            // 1. Create a default TrackSelector
            BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
            TrackSelection.Factory videoTrackSelectionFactory =
                    new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
            TrackSelector trackSelector =
                    new DefaultTrackSelector(videoTrackSelectionFactory);

            // 2. Create a default LoadControl
            LoadControl loadControl = new DefaultLoadControl();
            // 3. Create the player
            player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);

            SimpleExoPlayerView playerView = (SimpleExoPlayerView) findViewById(R.id.player_view);
            playerView.setPlayer(player);
            playerView.setKeepScreenOn(true);
            // Produces DataSource instances through which media data is loaded.
            DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "ExoPlayer"));

            // Produces Extractor instances for parsing the media data.
            ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();

            // This is the MediaSource representing the media to be played.
            MediaSource videoSource = new ExtractorMediaSource(Uri.parse(path),
                    dataSourceFactory, extractorsFactory, null, null);
            // Prepare the player with the source.
            player.addListener(this);
            player.prepare(videoSource);
            playerView.requestFocus();
            player.setPlayWhenReady(true);      // to play video when ready. Use false to pause a video
        }


        @Override
        protected void onPause() {
            super.onPause();
            if (player != null) {
                player.setPlayWhenReady(false); //to pause a video because now our video player is not in focus
            }
        }

        @Override
        public void onTimelineChanged(Timeline timeline, Object manifest) {

        }

        @Override
        public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {

        }

        @Override
        public void onLoadingChanged(boolean isLoading) {

        }

        @Override
        public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
            switch (playbackState) {
                case ExoPlayer.STATE_BUFFERING:
                    //You can use progress dialog to show user that video is preparing or buffering so please wait
                    break;
                case ExoPlayer.STATE_IDLE:
                    //idle state
                    break;
                case ExoPlayer.STATE_READY:
                    // dismiss your dialog here because our video is ready to play now
                    break;
                case ExoPlayer.STATE_ENDED:
                    // do your processing after ending of video
                    break;
            }
        }

        @Override
        public void onPlayerError(ExoPlaybackException error) {
            // show user that something went wrong. I am showing dialog but you can use your way
            AlertDialog.Builder adb = new AlertDialog.Builder(ExoPlayerActivity.this);
            adb.setTitle("Could not able to stream video");
            adb.setMessage("It seems that something is going wrong.\nPlease try again.");
            adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    finish(); // take out user from this activity. you can skip this
                }
            });
            AlertDialog ad = adb.create();
            ad.show();
        }

        @Override
        public void onPositionDiscontinuity() {
            //Video is not streaming properly
            Log.d("Mayur", "Discontinuity");
        }

        @Override
        protected void onDestroy() {
            super.onDestroy();
            player.release();   //it is important to release a player
        }
    }

我认为这对于初学者就足够了.另外请记住,该库的标准音频和视频组件依赖于Android的MediaCodec API,该API是在Android 4.1(API级别16)中发布的.因此它不适用于android 4.0及更低版本.

I think this is enough for beginner. Also keep in mind that this library's standard audio and video components rely on Android’s MediaCodec API, which was released in Android 4.1 (API level 16). So it will not work on android 4.0 and below.

这篇关于Google ExoPlayer指南的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆