1.发现问题的过程
项目已经上线了 差不多半年多了, 最近对友盟统计里面的,统计到的问题进行清扫,修复。 发现有一个问题出现了400多次了 , An AVPlayerItem cannot be associated with more than one instance of AVPlayer 这个引起了崩溃 400多次,顿时 ,我觉得自己太失职了 ,这么大的问题竟然不知道,同时也很好奇 这么多次的崩溃 ,为什么没有用户反应, 顾不了那么多 了 于是 我就开始了 对这个问题的定位 修复。
首先看下友盟收集到的错误日志
很明显这个崩溃原因是 mediaPlayer 播放视频的时候引起的。
也就是因为MPMoviePlayerController 播放视频的时候引起的,于是我也很好奇 怎么可能会呢 ,视频播放是我们项目中最常用的功能,如果说 有问题 不可能会一直没有收到 反馈啊,而且我们自己测试的时候也没有任何问题啊,现在我只知道是 MPMoviePlayerController 播放视频引起的 ,但是目前并不知道 这个问题怎么重现的,于是我在网上查找了相关的资料,发现很多人也有这个情况的出现,而且惊奇的发现有人提到这个问题是出现的iOS 8.4 上面的,咿! 我马上有去看下我的错误日志:
原来如此 真的是这样的哦, 出问题的机器 全部都是ios 8.4 系统 和 ios 8.4.1 系统的 ,嗯 至少有这点发现 。
于是我下载 ios 8.4 系统的模拟机 进行测试,测试的过程中 其实我大概能够猜想到 那些情况可能会出现问题 , 经过我的不懈努力 差不多 用了 3个小时的时间 终于 重现了崩溃的过程。 如果 你们的程序中也有这样的问题而且 你还没有测试出如果出现这个崩溃 你不妨按照我的方法测试下:
播放视频 — 切到后台 — 进入前台 — 换台 - 再切换后台 就会出现 (概率出现 但概率很高)
总结这个问题是 MPMoviePlayerController 在iOS 8.4 系统下 播放时候 中出现的问题
2.总结前辈的处理方法
当然,遇到这样的问题我也是会先去看下 前辈们是怎么解决的 ,看下他们的方法是不是 适合我,不是有那谁说过吗 ,站在的巨人的肩旁上 才能看的更远(原话是不是这个 😄)
现在我总结下其他人的处理方法 你也可以测试下看适不适合你
1.
这种方法就是在 movieSouceType上面做文章, 也就是给视频播放器的 url 之前 指定 视频资源是 什么类型的 MPMovieSourceTypeUnknown , MPMovieSourceTypeStreaming MPMovieSourceTypeFile 也就是说你要指定正确的类型,如果不知道就要用 MPMovieSourceTypeUnknown
这个方法可能适合你 (然而对我并没有什么卵用)
2.
这种方法说的就说在你设置新的 URL之前要先stop
这个方法很多人试了 都说可以 所以你也试试吧
3.
[self prepareToPlay];
有写人说的方法在你paly 之前 用这个方法
然并卵 没什么鸟关系吧😄
至于其他的回答的都比较扯的远点 就不一一细数了
这stackoverflow网站上看有很多相关的文章 感兴趣的可以自己查找下
3.最终解决我问题的方法
如果上面的 这些方法你都没有解决这个问题,不要担心,我相信解决我的问题的 方法肯定适合你,你一定会解决的(如果没有解决 就当我没说😄)
上面的 方法 就是说 在你切换视频源 的时候 也就是 换台的时候 重新创建一个播放器 把 之前的 播放器移除 保证一个URL 对应的只有一个播放器
这样至少我的问题是完美解决了 不知道我的总结有没有帮到你 !