问题描述:

1、同样的 url,Android 能放,iOS 不能放。后台给的 url 是这个样子(mp4文件格式):

http://192.168.80.102:28085/schcommonweb/weedfs/rdownload/2@8a54d21abc

2、用 KVO 监听 AVPlayerItem 的 status 发现报错:

Code=-11850 Code=-12939 Operation Stopped The server is not correctly configured

3、用浏览器(Safari或者Chrome)直接打开 url,发现也不能播放,而是变成下载。视频文件下载后,可以正常播放,说明 mp4 文件格式也是正确的。

4、但是换一个从网上找的视频 url,却能正常播放。

通过上述问题初步断定应该是后台的问题。于是让后台逐一排查。后来发现,iOS 和 Android 在播放此类 url 时,都会用到 HTTP 1.1 的 Range bytes 头,但二者的行为略有不同:

iOS 的 AVPlayer 在第一次请求时,会发送一个 Range: bytes=0-1 的请求头,此时服务器应该返回 206 和 content-range 及 content-length 响应消息。AVPlayer 用这两个字节的数据来判断文件类型(即 ftyp,请参考 http://www.ftyps.com/),然后后面的请求才是正常的读取视频数据。

而 Android 却不会有读取 ftyp 的过程。

而后台由于粗心的原因,在计算 Range 的时候,不知道为什么会在 iOS 的第一次请求 bytes=0-1 时将 content-length 计算错了,计算成 -1。从而导致 iOS 无法播放而 Android 能正常播放。

正确的后台代码可以参考网上的这篇博客。

更多相关文章

  1. 如何在后台运行Linux命令?
  2. android build erro, 借签文章里面 解决编译问题的方法
  3. Android(安卓)后台截图
  4. Android(安卓)一个强大实用的版本升级demo(thread+service+Notifi
  5. Android(安卓)Studio Cannot find local variable
  6. android http连接远程服务的一个问题
  7. Android(安卓)静默安装程序(在后台偷偷安装apk)
  8. 从notify中恢复Activity
  9. android ListView在数据为空的时候headView和footerview不显示

随机推荐

  1. fanfou(饭否) android客户端 代码学习1
  2. Android(安卓)OpenCV 灰度图转化
  3. Android使用HttpURLConnection显示网络图
  4. Android事件传递机制
  5. Android(安卓)Media Server - MediaPlaye
  6. Howto Build Android(安卓)KitKat (4.4)
  7. Android(安卓)一个简单的计算器APP
  8. Android与Webview交互
  9. android项目colors.xml中几个常用的颜色
  10. Android(安卓)一张图理解getWidth和getMe