H5流媒体播放器EasyPlayer.js安卓播放器如何实现视频源快速切换?

随着流媒体技术的迅速发展,H5流媒体播放器已成为现代网络视频播放的重要工具。其中,EasyPlayer.js视频流媒体播放器作为一款功能强大的H5播放器,凭借其全面的协议支持、多种解码方式以及跨平台兼容性,赢得了广泛的关注和应用。

那么EasyPlayer.js安卓播放器应如何实现视频源快速切换呢?

由于EasyPlayer的播放端已经放在Fragment了,这使得SDK层可以对好多应用层的代码做以封装,这样尽可能给开发者带来方便。比如,两个视频源切换的时候,只需要创建两个PlayFragment,然后对这两个Fragment进行显示切换,如代码显示:

public void onSwitchPlayer(View view) {
  PlayFragment f = (PlayFragment) getSupportFragmentManager().findFragmentByTag("first");
  PlayFragment s = (PlayFragment) getSupportFragmentManager().findFragmentByTag("second");

  if (!s.isHidden()){
    getSupportFragmentManager().beginTransaction().show(f).commit();
    getSupportFragmentManager().beginTransaction().hide(s).commit();
    mRenderFragment = f;
  }else{
    getSupportFragmentManager().beginTransaction().show(s).commit();
    getSupportFragmentManager().beginTransaction().hide(f).commit();
    mRenderFragment = s;
  }
}

实际上只是切换了当前显示的View,实际上视频还是会在后台播放。为了最快地进行视频切换,不至于在切换过程中导致视频延迟、黑屏、卡顿,我们保留了后台一个视频没有释放。

在一个Fragment被hidden时,播放状态实际上会暂停。而当它又显示时,播放会继续。

  if (Looper.myLooper() != Looper.getMainLooper()){
    throw new IllegalThreadStateException("call resume in Main thread!");
  }
  synchronized (_channelPause) {
    _channelPause.remove(_channel);
  }
  h.removeCallbacks(closeTask);
  if (paused == 2){
    Log.i(TAG,"resume:=" + 0);
    openStream();
  }
  Log.i(TAG,"resume:=" + 0);
  paused = 0;
}

继续播放时,我们会将标志位设置为false,同时将task取消掉。这样,如果在10秒内快速进行暂停和恢复,实际上流并没有断开,这样切换时,用户体验是最好的。而当长时间没有恢复的时候,也会在暂停10秒后把链接关闭,不至于消耗额外的流量。

当前流媒体发展如此迅速,我们也应该对它有更深入的了解。EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,无须安装任何插件,起播快、延迟低、兼容性强,使用非常便捷。

总之,随着5G技术的普及和互联网技术的进一步发展,H5流媒体播放器将迎来更加广阔的发展前景。未来的EasyPlayer.js网页直播/点播播放器将更加智能、安全和个性化,为用户提供更加丰富和互动的观看体验。

posted on 2025-01-06 14:39  EasyPlayer  阅读(71)  评论(0)    收藏  举报