GSYVideoPlayer icon indicating copy to clipboard operation
GSYVideoPlayer copied to clipboard

如何显示视频缓冲百分比?

Open jayleco opened this issue 7 years ago • 27 comments

如何在加载缓冲的时候显示进度百分比呢?就是在视频开始加载的时候和视频播放中需要再次缓冲而停止播放的时候怎么显示状态和缓冲百分比啊?目前就是一个进度圈一直在转,用户体验不是很好,用户不知道是目前视频处于一个什么状态下,如下图 tim 20170912111358

jayleco avatar Sep 12 '17 03:09 jayleco

没人有回答下不?我也想知道

zhiyou007 avatar May 04 '18 04:05 zhiyou007

目前ijk没找到相关的返回

CarGuo avatar May 05 '18 08:05 CarGuo

没有onInfo的callBack希望大佬可以完善一下,很多时候视频都不是秒开的或者用户拖动的时候都有一个缓冲状态

funkoss avatar May 27 '18 15:05 funkoss

同求

MaryDQ avatar Jul 17 '18 01:07 MaryDQ

确实,网络不好时,一直转圈,都不知道啥情况,体验不是很好

kyriej avatar Jul 24 '18 06:07 kyriej

可以显示个当前网速xxx KB/s类似的TextView,ijkplayer有接口返回缓冲网速的我记得,不知道作者有没有暴露出这个接口~~

XuQK avatar Sep 02 '18 15:09 XuQK

网速的接口有的,百分比没有

CarGuo avatar Sep 03 '18 01:09 CarGuo

能不能不缓冲

botele2017 avatar Sep 28 '18 08:09 botele2017

同求,文档中有个getBuffterPoint说是可以获取缓冲/缓存进度,但是好像一直是0

forever123 avatar Nov 24 '18 03:11 forever123

有人解决这个问题吗?

xhh1993 avatar Dec 26 '18 03:12 xhh1993

B站也没有 他们的这个播放器本身好像就没有这个功能

mlp1995 avatar Mar 07 '19 06:03 mlp1995

这个还有其他办法优化的吗,网速不行的情况下,一直在loading,确实体验不行

alguojian avatar Oct 12 '19 07:10 alguojian

没办法,作者之前回复了,目前暂时不支持获取缓冲百分比------------------ 原始邮件 ------------------ 发件人: "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.

xhh1993 avatar Oct 12 '19 07:10 xhh1993

这个问题是个大问题呀,同求。快放弃了

alanzyz avatar Oct 22 '19 09:10 alanzyz

确实,网络不好时,一直转圈,都不知道啥情况,体验不是很好

确实是呀,好痛苦

alanzyz avatar Oct 22 '19 09:10 alanzyz

这个还有其他办法优化的吗,网速不行的情况下,一直在loading,确实体验不行

同求

alanzyz avatar Oct 22 '19 09:10 alanzyz

在播放器的onBufferingUpdate中进行监听

StaticCoder avatar Nov 28 '19 02:11 StaticCoder

mVideoAllCallBack 重载 在onPlayError 回调里面自己实现逻辑,不用他的原生UI ,自己重新extend StandardGSYVideoPlayer 重载touchSurfaceMoveFullLogic 关掉部分参数。updateStartImage 那些很丑UI全部替换,onClick 重载 拦截事件走自己的。百分百加载根据自己的视频源用ffmpeg获取帧变化自己计算

LeeJiTing avatar Nov 28 '19 08:11 LeeJiTing

稍微看了下ijkplayer的,关于缓冲百分比进度回调是有的,

kyriej avatar Dec 31 '19 09:12 kyriej

同求啊 ijkplayer是有进度的 抱拳!

liupengandroid avatar Mar 25 '20 05:03 liupengandroid

@liupengandroid @kyriej ijkplayer 哪里有提供缓冲百分比进度回调?

CarGuo avatar Mar 25 '20 08:03 CarGuo

使用exoplayer2内核不能像原生一样调整DefaultLoadControl参数?

wolthon avatar Apr 01 '20 02:04 wolthon

@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);

wolthon avatar Apr 02 '20 04:04 wolthon

@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 avatar Apr 02 '20 05:04 wolthon

可以通过如下所示的 @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());
            }
        }
    });

CarGuo avatar Apr 02 '20 06:04 CarGuo

可以通过如下所示的 @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 avatar Apr 02 '20 08:04 wolthon

ijkplayer 内核是有缓存更新回调的

06110902002 avatar Apr 14 '23 08:04 06110902002