iOS 不能播放远程视频(Android 可以)的问题

栏目: IOS · 发布时间: 7年前

内容简介:问题描述:1、同样的 url,Android 能放,iOS 不能放。后台给的 url 是这个样子(mp4文件格式):2、用 KVO 监听 AVPlayerItem 的 status 发现报错:

问题描述:

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 能正常播放。

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Form Design

Web Form Design

Luke Wroblewski / Rosenfeld Media / 2008-5-2 / GBP 25.00

Forms make or break the most crucial online interactions: checkout, registration, and any task requiring information entry. In Web Form Design, Luke Wroblewski draws on original research, his consider......一起来看看 《Web Form Design》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具