VIMediaCache
VIMediaCache copied to clipboard
请问播着播着声音没了的问题怎么解决?
我在抓回来的短视频上播放,会经常出现播着没声音,循环播放,第二次就有声音了...
@callmewenxi 我也遇到这个问题,而且有时候第一次不会自动播放
我把AVPlayer 的 automaticallyWaitsToMinimizeStalling 属性设置为YES之后,没有声音或者是有声音但是视频画面卡住的问题都解决了
@callmewenxi 看来这个问题并不好解决。。。
readme 里面的中文说明:
播到一半声音停了,视频正常播
比较低概率,在美拍上测试时有短视频会出现
弱网下一直loading到超时,但是文件都是已经下载好了
没有调用 AVPlayer 的 play 在弱网下会造成,AVPlayerLayer 一直无法达到 readyForDisplay 的情况
以上问题暂时没有很好的解决方案,因为 ResourceLoader 的实现只能做到控制缓存,但 AVPlayer 内的具体实现机制并不清楚,在缓存没有问题的情况下出现问题,很难去追根溯源寻找问题的根本原因。
@callmewenxi 可以把 kBufferSize 设大一些,比如 100kb ,情况会有所好转,但是这个问题无法从根本上解决,更像是 AVPlayer 的内部 bug。
@callmewenxi 播着播着声音没了的问题确认是代码导致的,具体原因未知,我们重新撸了一个简单粗暴的方案,没有断点功能,下完整了再写文件,然后就没这个问题了。。。
@crespoxiao 能提供一下demo吗?
@callmewenxi 我做的也还没上线,没有经过大流量考验,等稳定了可能考虑开源
思路:所有的请求共同一个session,delegatequeue设置为nil,直接在nsurlsession 的 didreveivedata这个代理方法里塞数据给resourceloader的request,不要切到任何异步线程,不用buffer,写文件放到异步串行队列,可以设置低一点的优先级,我的思路就是这样。
视频文件的 moov 信息应该位于头部,比 Metadata 还要优先才可以做到最快速度播放,如果放在文件尾部,resourceloader会发起n多请求,我遇到过70次。。。正常情况下10次以内,理想情况下3次左右,否则就会出现卡顿,因为串行的请求太多了
@crespoxiao 我仿照 JPVideoPlayer 写了套,但是我跟她都存在 moov 在尾部,不能边下边播,请教下,细节问题出在哪里
最终我放弃了这个方案,边下边播遇到的坑太多了。我改了解决方案,用avplayer播放,待缓存完了把avplayer里面的流缓存下来。播放速度和bug比这个方案少太多了。希望可以帮到后面的人
在 2017年8月4日,下午5:29,bazingaQBS [email protected] 写道:
最终我放弃了这个方案,边下边播遇到的坑太多了。我改了解决方案,用avplayer播放,待缓存完了把avplayer里面的流缓存下来。播放速度和bug比这个方案少太多了。希望可以帮到后面的人
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/vitoziv/VIMediaCache/issues/21#issuecomment-320203547, or mute the thread https://github.com/notifications/unsubscribe-auth/APkzXbqH_JcnOX9456aY3izB2dYC80MXks5sUuRygaJpZM4NaH6j.
视频文件的 moov 信息应该位于头部 ,在 Metadata前,边下边播就没有问题了。
@Leon-OS 如果moov在前,非常简单。要考虑历史原因,服务器上存着几十亿部moov在后的视频。。。
我们用的七牛云,在上传的时候,就有一份压缩处理的
在 2017年8月5日,上午10:51,Chengfei Xiao [email protected] 写道:
@Leon-OS https://github.com/leon-os 如果moov在前,非常简单。要考虑历史原因,服务器上存着几十亿部moov在后的视频。。。
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/vitoziv/VIMediaCache/issues/21#issuecomment-320390515, or mute the thread https://github.com/notifications/unsubscribe-auth/APkzXeQcDaEBx8zAp_znoF7LHBOve1xIks5sU9ilgaJpZM4NaH6j.
@bazingaQBS 请问"待缓存完了把avplayer里面的流缓存下来",这个是怎么实现的?能说说大概的思路吗?
@callmewenxi 我讲一下大致思路 没找到那篇文章了 你可以搜索一下 剥离AVURLAsset 用AVMutableComposition获取视频流 然后AVAssetExportSession输出视频流(大致和合并视频的流程一致) 这些都在缓存获取完成之后操作
@Leon-OS 视频信息位于头部 不会产生第一轮播放无声音的情况吗?我测试了很多视频了,正常播放都没问题了,只有这个无声音的情况是几乎每个视频在多次播放会产生并且和设置的缓存有关。
@bazingaQBS 不会,app 已经迭代几版了,都正常
@bazingaQBS AVMutableComposition + AVAssetExportSession 这个方法测试可行,谢谢了
@callmewenxi 能提供下demo 让学习下么
@callmewenxi 貌似 AVMutableComposition + AVAssetExportSession 不是好办法,请看这个链接 http://sky-weihao.github.io/2015/10/06/Video-streaming-and-caching-in-iOS/
@Jack-Rain 用的就是crespoxiao链接上的方法,确实会有文章上的问题,自己权衡一下吧,如果只是用于本地重播短视频的话,我觉得文章说的问题都不是问题. LocalServer的坑也很多,网上也很少这方面的资料 =.=
@callmewenxi 我用文章上的方法 怎么总是导出视频失败啊 报cannot creat file错误
没有声音的问题,大家用这个 commit 试试 21926ff
@callmewenxi 貌似 AVMutableComposition + AVAssetExportSession 不是好办法,请看这个链接 http://sky-weihao.github.io/2015/10/06/Video-streaming-and-caching-in-iOS/
问题解决了吗?有好的解决方案吗?
我在抓回来的短视频上播放,会经常出现播着没声音,循环播放,第二次就有声音了...
可以试试KTVHTTPCache https://github.com/ChangbaDevs/KTVHTTPCache