Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果exoplayer中的第一个媒体源出错,是否可以播放第二个媒体源?_Android_Exoplayer - Fatal编程技术网

Android 如果exoplayer中的第一个媒体源出错,是否可以播放第二个媒体源?

Android 如果exoplayer中的第一个媒体源出错,是否可以播放第二个媒体源?,android,exoplayer,Android,Exoplayer,我是初学者。有谁能帮我简要介绍一下这个问题吗。我得到两个链接动态 网址 交替 如果第一个媒体(url)出现错误,我想播放第二个媒体(备用)源。 我正在寻找这一个星期,一个好的答案将不胜感激。如果你不能解决问题,请把它投给更多的人。。提前谢谢 这是我的全部代码 ImageButton playPause,lockScreen,unLock; SeekBar seekBar; TextView start,end; boolean isPlaying = false; boolean isLock

我是初学者。有谁能帮我简要介绍一下这个问题吗。我得到两个链接动态

  • 网址
  • 交替
  • 如果第一个媒体(url)出现错误,我想播放第二个媒体(备用)源。 我正在寻找这一个星期,一个好的答案将不胜感激。如果你不能解决问题,请把它投给更多的人。。提前谢谢

    这是我的全部代码

    ImageButton playPause,lockScreen,unLock;
    SeekBar seekBar;
    TextView start,end;
    boolean isPlaying = false;
    boolean isLock = false;
    RelativeLayout controller;
    FrameLayout root;
    
    boolean isControllerShowing = true;
    private Handler mHandler;
    
    
    SimpleExoPlayerView simpleExoPlayerView;
    private SimpleExoPlayer player;
    
    SessionManagement management;
    String url, alternate;
    Uri mp4VideoUri;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_live_tv);
    
        checkConnection();
    
    
        Sensey.getInstance().init(this);
    
        Sensey.getInstance().startOrientationDetection(15,this);
    
        management = new SessionManagement(this);
    
        HashMap<String,String> hashMap = management.getUserDetails();
    
        url = hashMap.get(SessionManagement.LIVE_URL);
        alternate = hashMap.get(SessionManagement.ALTERNATE_URL);
    
    
        playPause = findViewById(R.id.btnPlayPause);
        lockScreen = findViewById(R.id.btnLock);
        unLock = findViewById(R.id.btnOpenLock);
    
        seekBar = findViewById(R.id.seeker);
    
        end = findViewById(R.id.duration);
        start = findViewById(R.id.position);
    
        controller = findViewById(R.id.layout_controller);
        root = findViewById(R.id.activity_live);
    
        try {
            BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
            TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
            TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
    
            LoadControl loadControl = new DefaultLoadControl();
    
            player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);
            simpleExoPlayerView = findViewById(R.id.video_view);
    
            simpleExoPlayerView.setUseController(false);
            simpleExoPlayerView.requestFocus();
    
            simpleExoPlayerView.setPlayer(player);
    
    
                mp4VideoUri = Uri.parse(url); //Radnom 540p indian channel
    
    
    
            mHandler = new Handler();
    
    
            DefaultBandwidthMeter bandwidthMeterA = new DefaultBandwidthMeter();
            DefaultDataSourceFactory dataSourceFactory = new 
            DefaultDataSourceFactory(this, Util.getUserAgent(this, "Madha TV"), bandwidthMeterA);
    
            DefaultExtractorsFactory();
    
            dataSourceFactory, extractorsFactory, null, null);
    
            MediaSource videoSource = new HlsMediaSource(mp4VideoUri, dataSourceFactory, 1, null, null);
            final LoopingMediaSource loopingSource = new LoopingMediaSource(videoSource);
            player.prepare(loopingSource);
    
            player.addListener(new ExoPlayer.EventListener() {
    
                @Override
                public void onTimelineChanged(Timeline timeline, Object manifest, int reason) {
    
                }
    
                @Override
                public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
                }
    
                @Override
                public void onLoadingChanged(boolean isLoading) {
                }
    
                @Override
                public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
    
                }
    
                @Override
                public void onRepeatModeChanged(int repeatMode) {
                }
    
                @Override
                public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
    
                }
    
                @Override
                public void onPlayerError(ExoPlaybackException error) {
                    switch (error.type) {
                        case ExoPlaybackException.TYPE_SOURCE:
                            Log.e("Error", "TYPE_SOURCE: " + error.getSourceException().getMessage());
                            Intent intent1 = new Intent(LiveTVActivity.this, MainActivity.class);
                            startActivity(intent1);
                            finish();
                            Toast.makeText(LiveTVActivity.this, error.getSourceException().getMessage(), Toast.LENGTH_SHORT).show();
                            break;
    
                        case ExoPlaybackException.TYPE_RENDERER:
                            break;
    
                        case ExoPlaybackException.TYPE_UNEXPECTED:
                            Log.e("Error", "TYPE_UNEXPECTED: " + error.getUnexpectedException().getMessage());
                            break;
                    }
    
                    player.stop();
                    player.prepare(loopingSource);
                    player.setPlayWhenReady(true);
    
                }
    
                @Override
                public void onPositionDiscontinuity(int reason) {
    
                }
    
                @Override
                public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
                }
    
                @Override
                public void onSeekProcessed() {
    
                }
            });
    
            player.setPlayWhenReady(true); //run file/link when ready to play.
            player.setVideoDebugListener(this); //for listening to resolution change and  outputing the resolution
    
            if (player.getPlayWhenReady())
            {
                playPause.setImageResource(R.drawable.cvp_action_pause);
                isPlaying = true;
            }
            else
            {
                playPause.setImageResource(R.drawable.cvp_action_play);
                isPlaying = false;
            }
    
    
            root.setOnClickListener(this);
            playPause.setOnClickListener(this);
            lockScreen.setOnClickListener(this);
            unLock.setOnClickListener(this);
        }
        catch (Exception e)
        {
    
            Log.e("Error",e.toString());
        }
    
    }
    
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
            }
            updateMetadata();
    
        } else {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
            getWindow().clearFlags(
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
            }
            updateMetadata();
        }
    
    }
    
    
    @Override
    public void onTopSideUp() {
        updateMetadata();
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
    
    @Override
    public void onBottomSideUp() {
    
    }
    
    @Override
    public void onRightSideUp() {
        updateMetadata();
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
    
    @Override
    public void onLeftSideUp() {
        updateMetadata();
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
    }
    
    @SuppressWarnings("ConstantConditions")
    private void updateMetadata() {
        Point displaySize;
        displaySize = Utils.getDisplaySize(this);
    
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(displaySize.x,displaySize.y);
        lp.gravity = Gravity.CENTER;
        simpleExoPlayerView.setLayoutParams(lp);
        simpleExoPlayerView.invalidate();
    
    }
    private void checkConnection()
    {
        boolean isConnected = ConnectivityReceiver.isConnected();
        showSnack(isConnected);
    }
    
    // Showing the status in Snackbar
    private void showSnack(boolean isConnected) {
    
        if (!isConnected) {
            Config.noConnection(LiveTVActivity.this);
        }
    }
    
    
    @Override
    public void onClick(View view) {
    
        if (view.getId() == R.id.btnPlayPause) {
            setPlayPause();
        }else if (view.getId() == R.id.btnLock) {
            if (!isLock)
            {
                unLock.setVisibility(View.VISIBLE);
                isLock = true;
                controller.setVisibility(View.GONE);
                root.setClickable(false);
            }
        }else if (view.getId() == R.id.btnOpenLock)
        {
            if (isLock)
            {
                root.setClickable(true);
                isLock = false;
                unLock.setVisibility(View.GONE);
                controller.setVisibility(View.VISIBLE);
            }
        } else if (view.getId() == R.id.activity_live)
        {
            showController();
        }
    }
    
    public void showController()
    {
        if (!isControllerShowing)
        {
            isControllerShowing = true;
            controller.setVisibility(View.VISIBLE);
        }
        else
        {
            isControllerShowing = false;
            controller.setVisibility(View.GONE);
        }
    }
    
    private void setPlayPause() {
    
        if (isPlaying)
        {
            player.setPlayWhenReady(false);
            isPlaying = false;
            playPause.setImageResource(R.drawable.cvp_action_play);
        }
        else
        {
            player.setPlayWhenReady(true);
            isPlaying = true;
            playPause.setImageResource(R.drawable.cvp_action_pause);
        }
    
    }
    
    @Override
    public void onNetworkConnectionChanged(boolean isConnected) {
        showSnack(isConnected);
    }
    
    @Override
    public void onVideoEnabled(DecoderCounters counters) {
    
    }
    
    @Override
    public void onVideoDecoderInitialized(String decoderName, long initializedTimestampMs, long initializationDurationMs) {
    
    }
    
    @Override
    public void onVideoInputFormatChanged(Format format) {
    
    }
    
    @Override
    public void onDroppedFrames(int count, long elapsedMs) {
    
    }
    
    @Override
    public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
    }
    
    @Override
    public void onRenderedFirstFrame(Surface surface) {
    
    }
    
    @Override
    public void onVideoDisabled(DecoderCounters counters) {
    
    }
    
    ImageButton播放暂停、锁屏、解锁;
    SeekBar-SeekBar;
    文本视图开始,结束;
    布尔isplay=false;
    布尔值isLock=false;
    相对延迟控制器;
    框架布局根;
    布尔值iscontrollershow=true;
    私人经理人;
    SimpleXoplayerView SimpleXoplayerView;
    私人SimpleExoPlayer;
    会话管理;
    字符串url,可选;
    urimp4videouri;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity\u live\u tv);
    检查连接();
    Sensey.getInstance().init(this);
    Sensey.getInstance();
    管理=新的会话管理(本);
    HashMap HashMap=management.getUserDetails();
    url=hashMap.get(SessionManagement.LIVE_url);
    alternate=hashMap.get(SessionManagement.alternate_URL);
    playPause=findviewbyd(R.id.btnPlayPause);
    锁屏=findViewById(R.id.btnLock);
    解锁=findViewById(R.id.btnOpenLock);
    seekBar=findViewById(R.id.seeker);
    结束=findViewById(R.id.持续时间);
    开始=findViewById(R.id.position);
    控制器=findViewById(R.id.layout\U控制器);
    root=findviewbyd(R.id.activity\u live);
    试一试{
    带宽计带宽计=新的默认带宽计();
    TrackSelection.Factory videoTrackSelectionFactory=新的AdaptiveTrackSelection.Factory(带宽计);
    TrackSelector TrackSelector=新的默认TrackSelector(videoTrackSelectionFactory);
    LoadControl LoadControl=新的DefaultLoadControl();
    player=ExoPlayerFactory.newImpleInstance(此、轨迹选择器、加载控件);
    simpleExoPlayerView=findviewbyd(R.id.video\u视图);
    simpleExoPlayerView.setUseController(false);
    SimpleXoPlayerView.requestFocus();
    simpleExoPlayerView.setPlayer(播放器);
    mp4VideoUri=Uri.parse(url);//Radnom 540p印度频道
    mHandler=新处理程序();
    DefaultBandwidthMeterA=新的DefaultBandwidthMeter();
    DefaultDataSourceFactory dataSourceFactory=新建
    DefaultDataSourceFactory(这是Util.getUserAgent(这是“Madha TV”),bandwidthMeterA);
    DefaultExtractorFactory();
    数据源工厂,提取器工厂,null,null);
    MediaSource videoSource=新的HlsMediaSource(mp4VideoUri,dataSourceFactory,1,null,null);
    最终LoopingMediaSource loopingSource=新的LoopingMediaSource(视频源);
    player.prepare(循环源);
    player.addListener(新的ExoPlayer.EventListener(){
    @凌驾
    公共void onTimelineChanged(时间线、对象清单、整数原因){
    }
    @凌驾
    公共无效onTracksChanged(TrackGroupArray轨迹组、TrackSelectionArray轨迹选择){
    }
    @凌驾
    public void onload已更改(boolean isload){
    }
    @凌驾
    PlayerStateChanged上的公共无效(布尔playWhenReady,int playbackState){
    }
    @凌驾
    公共无效onRepeatModeChanged(int repeatMode){
    }
    @凌驾
    OnShuffleMemodeEnabledChanged(布尔ShuffleMemodeEnabled)上的公共无效{
    }
    @凌驾
    public void onPlayerError(ExoPlaybackException错误){
    开关(错误类型){
    案例ExoPlaybackException.TYPE_来源:
    Log.e(“Error”,“TYPE_SOURCE:”+Error.getSourceException().getMessage());
    Intent intent1=新的Intent(LiveTVActivity.this、MainActivity.class);
    星触觉(intent1);
    完成();
    Toast.makeText(LiveTVActivity.this,error.getSourceException().getMessage(),Toast.LENGTH_SHORT.show();
    打破
    case ExoPlaybackException.TYPE_渲染器:
    打破
    case ExoPlaybackException.TYPE_意外:
    Log.e(“Error”,“TYPE_UNEXPECTED:”+Error.getUnexpectedException().getMessage());
    打破
    }
    player.stop();
    player.prepare(循环源);
    player.setplaywhenrady(true);
    }
    @凌驾
    公共位置不连续(内部原因){
    }
    @凌驾
    public void OnPlaybackParameters更改(PlaybackParameters PlaybackParameters){
    }
    @凌驾
    seekProcessed()上的公共void{
    }
    });
    player.setplaywhenredy(true);//准备好播放时运行文件/链接。
    player.setVideoDebugListener(this);//用于侦听分辨率更改并输出分辨率
    if(player.getplaywhenrady())
    {
    playPause.setImageResource(R.drawable.cvp\u action\u pause);
    isplay=true;
    }
    其他的
    {
    playPause.setImageResource(R.drawable.cvp_action_play);
    isplay=false;
    }
    root.setOnClickListener(this);
    playPause.setOnClickListener(此);
    lockScreen.setOnClickListener(此);
    unLock.setOnClickListener(此);
    }
    捕获(例外e)
    {
    Log.e(“Error”,e.toString());
    }
    }
    @凌驾
    公共无效OnConfiguration已更改(配置newConfig){
    超级配置已更改(新公司
    
    public class VideoPlayerActivity extends AppCompatActivity implements ExoPlayer.EventListener {
    
    private SimpleExoPlayer mSimpleExoPlayer;
    
    private SimpleExoPlayerView mSimpleExoPlayerView;
    
    private Handler mMainHandler;
    private AdaptiveTrackSelection.Factory mAdaptiveTrackSelectionFactory;
    private TrackSelector mTrackSelector;
    private LoadControl mLoadControl;
    private DefaultBandwidthMeter mBandwidthMeter;
    private DataSource.Factory mDataSourceFactory;
    private SimpleCache mSimpleCache;
    private DataSource.Factory mFactory;
    private MediaSource mVideoSource;
    private LoopingMediaSource mLoopingMediaSource;
    private ProgressBar mProgressBar;
    private String videoUrl="http://sample.vodobox.net/skate_phantom_flex_4k/skate_phantom_flex_4k.m3u8";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);
        mSimpleExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.videoPlayer);
        mProgressBar = (ProgressBar) findViewById(R.id.amPrgbrLoading);
    }
    
    /**
     * this method play audio and video with hls streaming.
     */
    private void playMedia() {
        mMainHandler = new Handler();
        mBandwidthMeter = new DefaultBandwidthMeter();
        mAdaptiveTrackSelectionFactory = new AdaptiveTrackSelection.Factory(mBandwidthMeter);
        mTrackSelector = new DefaultTrackSelector(mAdaptiveTrackSelectionFactory);
    
        mLoadControl = new DefaultLoadControl();
        mSimpleExoPlayer = ExoPlayerFactory.newSimpleInstance(this, mTrackSelector, mLoadControl);
    
        mSimpleExoPlayerView.setPlayer(mSimpleExoPlayer);
        mSimpleExoPlayerView.setControllerVisibilityListener(new PlaybackControlView.VisibilityListener() {
            @Override
            public void onVisibilityChange(int visibility) {
                mSimpleExoPlayerView.showController();
            }
        });
        mDataSourceFactory = new DefaultDataSourceFactory(this,Util.getUserAgent(this, "com.exoplayerdemo"), mBandwidthMeter);
        mSimpleCache = new SimpleCache(this.getCacheDir(), new LeastRecentlyUsedCacheEvictor(1024 * 1024 * 10));
        mFactory = new CacheDataSourceFactory(mSimpleCache, mDataSourceFactory,0);
        mVideoSource = new HlsMediaSource(Uri.parse(videoUrl),
                mFactory, mMainHandler, new AdaptiveMediaSourceEventListener() {
            @Override
            public void onLoadStarted(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs) {
                //Toast.makeText(VideoPlayerActivity.this, "Load Started", Toast.LENGTH_SHORT).show();
            }
    
            @Override
            public void onLoadCompleted(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs, long bytesLoaded) {
                //Toast.makeText(VideoPlayerActivity.this, "Load Completed", Toast.LENGTH_SHORT).show();
            }
    
            @Override
            public void onLoadCanceled(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs, long bytesLoaded) {
    
            }
    
            @Override
            public void onLoadError(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs, long bytesLoaded, IOException error, boolean wasCanceled) {
                videoUrl=""; // define second url
            }
    
            @Override
            public void onUpstreamDiscarded(int trackType, long mediaStartTimeMs, long mediaEndTimeMs) {
               // Toast.makeText(VideoPlayerActivity.this, "Up stream", Toast.LENGTH_SHORT).show();
            }
    
            @Override
            public void onDownstreamFormatChanged(int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaTimeMs) {
               // Toast.makeText(VideoPlayerActivity.this, "Down Stream", Toast.LENGTH_SHORT).show();
            }
        });
    
        mLoopingMediaSource = new LoopingMediaSource(mVideoSource);
        mSimpleExoPlayer.prepare(mLoopingMediaSource);
        mSimpleExoPlayer.setPlayWhenReady(true);
        mSimpleExoPlayer.addListener(new ExoPlayer.EventListener() {
            @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) {
    
                if (playbackState == ExoPlayer.STATE_BUFFERING) {
                    mProgressBar.setVisibility(View.VISIBLE);
                } else {
                    mProgressBar.setVisibility(View.GONE);
                }
    
            }
    
            @Override
            public void onPlayerError(ExoPlaybackException error) {
    
            }
    
            @Override
            public void onPositionDiscontinuity() {
    
            }
        });
    
    
    
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        playMedia();
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        stopMedia();
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        stopMedia();
    }
    
    private void stopMedia() {
        mSimpleExoPlayer.stop();
        mSimpleExoPlayer.release();
    }
    
    
    
    @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) {
    
    }
    
    @Override
    public void onPlayerError(ExoPlaybackException error) {
    
    }
    
    @Override
    public void onPositionDiscontinuity() {
    
    }
    }
    
    simpleExoPlayerView.requestFocus();
                    TrackSelection.Factory videoTrackSelectionFactory =
                            new AdaptiveTrackSelection.Factory(BANDWIDTH_METER);
                    trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
    
                player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
    
                simpleExoPlayerView.setPlayer(player);
                //player.setPlayWhenReady(shouldAutoPlay);
    
                player.addListener(this);
    
                DefaultExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
    
                MediaSource mediaSource = new ExtractorMediaSource(videoUri,
                        mediaDataSourceFactory, extractorsFactory, null, null);
                player.prepare(mediaSource);
                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
                    // Call some material design APIs here
                    // player.setPlayWhenReady(true);
                }
    
                inErrorState = false;
            } catch (Exception e) {
                e.printStackTrace();
                Log.e("Please try again", "download again");
            }
        }
    
      private void errorinitializePlayer() {
      videoUri = Uri.parse(VIDEOS_URL);
                    simpleExoPlayerView.requestFocus();
                    TrackSelection.Factory videoTrackSelectionFactory =
                            new AdaptiveTrackSelection.Factory(BANDWIDTH_METER);
    
                    trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
    
                    player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
    
                    simpleExoPlayerView.setPlayer(player);
                    //player.setPlayWhenReady(shouldAutoPlay);
                    player.addListener(this);
                    DefaultExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
                    MediaSource mediaSource = new ExtractorMediaSource(videoUri,
                            mediaDataSourceFactory, extractorsFactory, null, null);
                    player.prepare(mediaSource);
                    inErrorState = false;}