ksvc / KSYMediaPlayer_Android

金山云Android播放SDK(KSYUN Live Streaming player SDK),支持RTMP HTTP-FLV HLS 协议(supporting RTMP HTTP-FLV HLS protocol),直播延时2-3秒(Living delay 2 or 3 seconds),supporting jitter control,software&hardware decode
http://v.ksyun.com/
Apache License 2.0
853 stars 246 forks source link

播放 http 视频时 IO 错误如何重连? #204

Open xwlcn opened 6 years ago

xwlcn commented 6 years ago

播放 http 视频时 IO 错误如何重连?看到文档里有个关于重连的,不过我觉得那是对于直播而言可用的,对于点播 http 直链视频,如果播放过程中出现 IO 错误,如果进行 reload 的话,视频会重头播放,请问如何重连进行从当前观看位置进行播放?不可能在更新播放时间进度的同时用个变量实时保存当前播放位置,当出现 IO 错误后 reload 再进行 seekTo 操作吧?还有就是点播设置 setBufferSize,文档里说是缓存大小,但实际设置后好像并没起到什么作用,试过 pause 暂停播放的时候网速马上就变为 0 了,有时候暂停就是为了缓冲一下再进行观看,而这设置了 setBufferSize 暂停就停止缓存了,是不是我用错了方法还是这个方法有问题?对于常见格式(mkv、avi、mp4等这类)要是能边下边播就更好了,因为不知道为啥有些视频直链用浏览器播放没什么问题,但用 KSYPlayer 播放经常播着播着网速就为0了,这也是我想进行重连到当前播放位置的原因。

FirmianaRain commented 6 years ago
  1. 播放进度需要你自己存储,在重连之后seek到相应位置
  2. 播放器提供 时间和空间 两个维度的缓存控制,对应接口是 setBufferTimeMax和setBufferSize,任意一个条件达到阈值就会暂停缓存数据的操作
  3. 那些播放过程中网速为0的视频,请问有报错吗?或者有其他消息提示吗,比如进入缓存状态等
xwlcn commented 6 years ago

@FirmianaRain 关于第二点,暂停的时候不会进行缓存吗?setBufferSize 我设置了1024,文档里说的单位是 MB,但我一旦暂停视频,网速就马上变为0了,也就是没有进行缓存了。 第三点网速为 0 没有进入缓存状态,因为 IMediaPlayer.MEDIA_INFO_BUFFERING_START 监听中并没有消息,有时候可能是 IO 错误的原因,我在 KSYMediaPlayer.MEDIA_ERROR_IO 的时候进行了重连,但有时候重连也不执行,这个问题我还没看错误日志,因为都是在真机上运行的时候出现的,明天我先自己找下这个问题的原因。 目前主要的问题就是第二个,设置了 BufferSize,暂停的时候网速变为 0,不知道是接口本身设计就是暂停时同时暂停缓存,还是接口有问题。如果接口本身就是这样设计,我觉得应该给个参数让用户自行选择暂停时是否缓存,因为很多时候暂停就是网络较慢,想暂停缓存避免卡顿。

FirmianaRain commented 6 years ago
  1. 时间或者是空间,任意一个条件被满足就会停止缓存数据,你可以看下setBufferTimeMax和setBufferSize这两个接口设置的值是多少。只要没满足条件,即使暂停了也会继续缓存数据
  2. 网速为0时,播放是否有卡顿
xwlcn commented 6 years ago

@FirmianaRain 我只设置了 setBufferSize,应该是 BufferTimeMax 默认值太小的原因。