Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
jayleco opened this issue Sep 12, 2017 · 27 comments
Open

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

jayleco opened this issue Sep 12, 2017 · 27 comments

Comments

@jayleco
Copy link

jayleco commented Sep 12, 2017

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

@zhiyou007
Copy link

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

@CarGuo
Copy link
Owner

CarGuo commented May 5, 2018

目前ijk没找到相关的返回

@funkoss
Copy link

funkoss commented May 27, 2018

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

@MaryDQ
Copy link

MaryDQ commented Jul 17, 2018

同求

@kyriej
Copy link

kyriej commented Jul 24, 2018

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

@XuQK
Copy link

XuQK commented Sep 2, 2018

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

@CarGuo
Copy link
Owner

CarGuo commented Sep 3, 2018

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

@botele2017
Copy link

能不能不缓冲

@forever123
Copy link

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

@xhh1993
Copy link

xhh1993 commented Dec 26, 2018

有人解决这个问题吗?

@mlp1995
Copy link

mlp1995 commented Mar 7, 2019

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

@alguojian
Copy link

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

@xhh1993
Copy link

xhh1993 commented Oct 12, 2019 via email

@alanzyz
Copy link

alanzyz commented Oct 22, 2019

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

@alanzyz
Copy link

alanzyz commented Oct 22, 2019

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

确实是呀,好痛苦

@alanzyz
Copy link

alanzyz commented Oct 22, 2019

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

同求

@StaticCoder
Copy link

StaticCoder commented Nov 28, 2019

在播放器的onBufferingUpdate中进行监听

@LeeJiTing
Copy link

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

@kyriej
Copy link

kyriej commented Dec 31, 2019

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

@liupengandroid
Copy link

liupengandroid commented Mar 25, 2020

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

@CarGuo
Copy link
Owner

CarGuo commented Mar 25, 2020

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

@wolthon
Copy link

wolthon commented Apr 1, 2020

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

@wolthon
Copy link

wolthon commented Apr 2, 2020

@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
Copy link

wolthon commented Apr 2, 2020

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

以此实现视频初始化网络不好的问题下增加播放器缓冲,以缓解网速不够,造成的视频加载问题卡顿的问题。

@CarGuo
Copy link
Owner

CarGuo commented Apr 2, 2020

可以通过如下所示的 @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
Copy link

wolthon commented Apr 2, 2020

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

感谢,解决了大问题!!

@06110902002
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests