公司iOS端的APP莫名出现了视频无法播放的问题,而Android和PC端加载相同视频却没有问题,而且奇怪的是首次访问存在问题,第二次访问可正常播放,这点着实让人费解。
测试时发现的报错如下:
于是在网络上看到了熟悉的报错
1 2 3 |
Domain=AVFoundationErrorDomain Code=-11850 "Operation Stopped" UserInfo={NSUnderlyingError=0x7f927ede4210 {Error Domain=NSOSStatusErrorDomain Code=-12939 "(null)"} , NSLocalizedFailureReason=The server is not correctly configured., NSLocalizedDescription=Operation Stopped}) |
看到和返回的状态码有关,在返回码是200时会报11850的报错,而返回206时才会正常播放。于是通过如下命令测试了拖管在七牛云上的视频:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
curl -voa http://mydomain.com/video.mp4 -H "Range:bytes=0-1" # 首次访问返回信息 ... < HTTP/1.1 200 OK < Server: marco/1.8 < Date: Fri, 22 Sep 2017 05:48:39 GMT < Content-Type: video/mp4 < Content-Length: 34633502 < Connection: keep-alive < X-Source: C/200 ... #第二次访问返回信息 ... < HTTP/1.1 206 Partial Content < Server: marco/1.8 < Date: Fri, 22 Sep 2017 05:48:47 GMT < Content-Type: video/mp4 < Content-Length: 2 < Connection: keep-alive .... |
果然第二次访问时才返回206的状态码,于是联系服务商进行了解决,如果自己处理视频的请自行联系服务端人员解决。
后记:虽然前面写的很短,但实际上用了一天的时间才解决问题,一开始被引到了一些不相关的问题上(也因为APP是第三方开发的,虽然他们也很负责):
比如码率(七牛黑科技:在视频地址后加上?avinfo可查看各种视频相关信息)超过了建议的1024
比如https,事实证明苹果并没有强制https
比如多余的e和token参数,虽然确实多余但并未产生无法访问的影响
比如HappyDNS,引入后也没有解决问题
最诡异的要属Mac端Safari切换到480P时可正常访问,而720P和1080P则需多次反复切换方可访问,到现在我也没有搞懂原因
小技巧:iPhone, iPad的调试
- Settings>Safari>Advanced开启Web Inspector
- 通过数据线连接Mac,并打开Safari在Develop菜单下找到设备来进行调试