GSYVideoPlayer
GSYVideoPlayer copied to clipboard
如何显示视频缓冲百分比?
如何在加载缓冲的时候显示进度百分比呢?就是在视频开始加载的时候和视频播放中需要再次缓冲而停止播放的时候怎么显示状态和缓冲百分比啊?目前就是一个进度圈一直在转,用户体验不是很好,用户不知道是目前视频处于一个什么状态下,如下图
没人有回答下不?我也想知道
目前ijk没找到相关的返回
没有onInfo的callBack希望大佬可以完善一下,很多时候视频都不是秒开的或者用户拖动的时候都有一个缓冲状态
同求
确实,网络不好时,一直转圈,都不知道啥情况,体验不是很好
可以显示个当前网速xxx KB/s类似的TextView,ijkplayer有接口返回缓冲网速的我记得,不知道作者有没有暴露出这个接口~~
网速的接口有的,百分比没有
能不能不缓冲
同求,文档中有个getBuffterPoint说是可以获取缓冲/缓存进度,但是好像一直是0
有人解决这个问题吗?
B站也没有 他们的这个播放器本身好像就没有这个功能
这个还有其他办法优化的吗,网速不行的情况下,一直在loading,确实体验不行
没办法,作者之前回复了,目前暂时不支持获取缓冲百分比------------------ 原始邮件 ------------------ 发件人: "alguojian"[email protected] 发送时间: 2019年10月12日(星期六) 下午3:20 收件人: "CarGuo/GSYVideoPlayer"[email protected]; 抄送: "XHH"[email protected];"Comment"[email protected]; 主题: Re: [CarGuo/GSYVideoPlayer] 如何显示视频缓冲百分比? (#443)
这个还有其他办法优化的吗,网速不行的情况下,一直在loading,确实体验不行
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.
这个问题是个大问题呀,同求。快放弃了
确实,网络不好时,一直转圈,都不知道啥情况,体验不是很好
确实是呀,好痛苦
这个还有其他办法优化的吗,网速不行的情况下,一直在loading,确实体验不行
同求
在播放器的onBufferingUpdate中进行监听
mVideoAllCallBack 重载 在onPlayError 回调里面自己实现逻辑,不用他的原生UI ,自己重新extend StandardGSYVideoPlayer 重载touchSurfaceMoveFullLogic 关掉部分参数。updateStartImage 那些很丑UI全部替换,onClick 重载 拦截事件走自己的。百分百加载根据自己的视频源用ffmpeg获取帧变化自己计算
稍微看了下ijkplayer的,关于缓冲百分比进度回调是有的,
同求啊 ijkplayer是有进度的 抱拳!
@liupengandroid @kyriej ijkplayer 哪里有提供缓冲百分比进度回调?
使用exoplayer2内核不能像原生一样调整DefaultLoadControl参数?
@alanzyz @kyriej
网络不好时,总是转圈圈的问题可以通过调整IjkPlayer内核的缓冲策略来解决 在初始化时调整参数。
List<VideoOptionModel> list = new ArrayList<>();
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"max-buffer-size",2048);//最大缓冲大小,单位kb
list.add(videoOptionModel);
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "buffer_size", 1024);
list.add(videoOptionModel);
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"max_cached_duration", 3000); //最大缓存时长
list.add(videoOptionModel);
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzemaxduration", 600); //设置播放前的最大探测时间
list.add(videoOptionModel);
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT,"analyzeduration",60); //设置播放前的探测时间 1,达到首屏秒开效果
list.add(videoOptionModel);
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "probesize", 10240);//播放前的探测Size,默认是1M, 改小一点会出画面更快
list.add(videoOptionModel);
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "flush_packets", 1);//每处理一个packet之后刷新io上下文
list.add(videoOptionModel);
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"reconnect",5);//播放重连次数
list.add(videoOptionModel);
FFP_MSG_BUFFERING_START
videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 1);//是否开启预缓冲,一般直播项目会开启,达到秒开的效果,不过带来了播放丢帧卡顿的体验
list.add(videoOptionModel);
GSYVideoManager.instance().setOptionModelList(list);
@CarGuo 网络不好时,总是转圈圈的问题,如果使用ExoPlayer2内核可以通过调整LoadControl的初始化参数来解决
我看了IjkExo2MediaPlayer 中关于ExoPlayer2内核的 LoadControl;的初始化代码,现在googleExoPlayer2 已经弃用了原来的初始化方法
if (mLoadControl == null) {
mLoadControl = new DefaultLoadControl();
}
建议采用
DefaultLoadControl loadControl =new DefaultLoadControl
.Builder()
.setBufferDurationsMs(
DefaultLoadControl.DEFAULT_MIN_BUFFER_MS * BUFFER_SCALE_UP_FACTOR,
DefaultLoadControl.DEFAULT_MAX_BUFFER_MS * BUFFER_SCALE_UP_FACTOR,
DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS ,
DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS * (BUFFER_SCALE_UP_FACTOR / 3))
//.setBackBuffer(60000*10, false)
.createDefaultLoadControl();
以此实现视频初始化网络不好的问题下增加播放器缓冲,以缓解网速不够,造成的视频加载问题卡顿的问题。
可以通过如下所示的 @wolthon
GSYVideoManager
.instance()
.setPlayerInitSuccessListener(new IPlayerInitSuccessListener() {
///播放器初始化成果回调,可用于播放前的自定义设置
@Override
public void onPlayerInitSuccess(IMediaPlayer player, GSYModel model) {
if (player instanceof IjkExo2MediaPlayer) {
((IjkExo2MediaPlayer) player).setTrackSelector(new DefaultTrackSelector());
((IjkExo2MediaPlayer) player).setLoadControl(new DefaultLoadControl());
}
}
});
可以通过如下所示的 @wolthon
GSYVideoManager .instance() .setPlayerInitSuccessListener(new IPlayerInitSuccessListener() { ///播放器初始化成果回调,可用于播放前的自定义设置 @Override public void onPlayerInitSuccess(IMediaPlayer player, GSYModel model) { if (player instanceof IjkExo2MediaPlayer) { ((IjkExo2MediaPlayer) player).setTrackSelector(new DefaultTrackSelector()); ((IjkExo2MediaPlayer) player).setLoadControl(new DefaultLoadControl()); } } });
感谢,解决了大问题!!
ijkplayer 内核是有缓存更新回调的