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 之前 用这个方法
然并卵 没什么鸟关系吧?
至于其他的回答的都比较扯的远点 就不一一细数了
http://stackoverflow.com/questions/31210859/iOS-8-4-avfoundation-attachtoplayer-or-attachtofigplayer-crash-an-avplayerit
这stackoverflow网站上看有很多相关的文章 感兴趣的可以自己查找下
3.最终解决我问题的方法
如果上面的 这些方法你都没有解决这个问题,不要担心,我相信解决我的问题的 方法肯定适合你,你一定会解决的(如果没有解决 就当我没说?)
上面的 方法 就是说 在你切换视频源 的时候 也就是 换台的时候 重新创建一个播放器 把 之前的 播放器移除 保证一个URL 对应的只有一个播放器
这样至少我的问题是完美解决了 不知道我的总结有没有帮到你 !