ksvc / KSYMediaPlayer_iOS

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

可以获取得到视频文件的大小吗? #73

Closed carusd closed 6 years ago

carusd commented 6 years ago

我们的需求,需要显示视频文件的下载进度,player里有个readSize是指目前下载的大小,但是没有整个视频文件的大小,计算不出下载比例。 另外一个playableDuration是缓冲时间,但是这个值每次重新播放都会刷新,显示出来感觉是重新下载一样。

mayudong1 commented 6 years ago

player本身的缓冲只在本次播放有效,播放过去之后就会把缓冲的数据丢掉
也就是说如果重新播放或者播放过程中把让进度回退一部分时,都会导致重新下载,那个playableDuration就是已缓冲的时长

carusd commented 6 years ago

好,那另外还想问个问题 假如我正在分段下载一个mp4文件,文件下载到一半,还在继续下载填充。然后我可以用player来播放到这一半的视频吗?如果可以,那播放的过程中mp4下载完了,player能顺滑的继续播放到最后吗?

mayudong1 commented 6 years ago

一般的mp4不支持这种操作,因为常见的MP4文件的媒体信息数据会放在文件末尾,播放器在播放时会先找这些数据,然后才能开始播放

carusd commented 6 years ago

那这样,如果说下载好的这部分数据里,包含了媒体信息数据,是不是就可以实现我说的那种需求呢?

mayudong1 commented 6 years ago

恩,理论上是的,ts和flv封装的文件就可以这样播放,但是MP4文件的封装可能会有其他的问题出现,因为MP4不是为流式播放设计的,有可能第一秒的数据在文件前半部分保存,第二秒的数据在文件后半部分保存,如果遇到这种文件就出问题了

carusd commented 6 years ago

所以,碰到这种情况的话,分段也不能完全按照顺序下载,这样理解没错吧?

mayudong1 commented 6 years ago

是的
你可以试试拿一个播放器去播一个http的MP4,然后抓包看看它会产生哪些http请求,以及这些请求中的range字段都是多少,这个不同播放器的表现都有可能不一样的

carusd commented 6 years ago

好,谢谢大神科普