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网页直播/点播播放器将更加智能、安全和个性化,为用户提供更加丰富和互动的观看体验。