![当我在 Amazon EC2 实例中托管视频时,MP4 视频(h.264 格式)无法在 iPhone 中播放](https://linux22.com/image/1340194/%E5%BD%93%E6%88%91%E5%9C%A8%20Amazon%20EC2%20%E5%AE%9E%E4%BE%8B%E4%B8%AD%E6%89%98%E7%AE%A1%E8%A7%86%E9%A2%91%E6%97%B6%EF%BC%8CMP4%20%E8%A7%86%E9%A2%91%EF%BC%88h.264%20%E6%A0%BC%E5%BC%8F%EF%BC%89%E6%97%A0%E6%B3%95%E5%9C%A8%20iPhone%20%E4%B8%AD%E6%92%AD%E6%94%BE.png)
我使用以下命令将视频转换source.flv
为(h.264 格式):target.mp4
ffmpeg -i source.flv -r 25 -b:a 128k -strict -2 -c:v libx264 -preset slow -s 320x240 -b:v 768k -ar 44100 -c:a aac target.mp4;
当我在 Amazon EC2 实例上托管视频时,视频target.mp4
正在我的计算机浏览器中播放,但无法在 iPhone/iPad 上播放。
当我将视频托管到其他地方时,相同的target.mp4
视频会在我的计算机浏览器以及 iPhone/iPad 上播放。
当我尝试从 EC2 实例打开视频时,QuickTime 显示以下错误:
QuickTime
BYTE_RANGE_ERROR_MESSAGE
答案1
最后我们得到了‘为什么我们的 mp4(h.264)’视频无法在 iPhone 上播放的真正解决方案。 解决方案是:从 httpd.conf(apache 服务器配置文件)中删除或注释 compress.conf 文件。
Compress.conf 文件用于在将输出发送到客户端之前对其进行压缩,如果您不想删除 compress.conf,则可以在 compress.conf 中注释几行。注释
# 加载过滤模块
SetEnv 过滤器错误文档 true
FilterDeclare comp-resp
# 压缩除图像、音频和视频之外的所有内容
#FilterProvider comp-resp DEFLATE resp=Content-Type !/^(图像|音频|视频)//
#FilterProtocol comp-resp 更改=是
答案2
为了将视频流式传输到这些 QuickTime / Apple 设备,服务器会发送一个Accept-Ranges: bytes
标头。这向播放器表明它可以通过发送字节偏移量来请求视频的某些部分,例如,这允许您从视频中间开始流式传输,而无需下载整个文件。
通常默认情况下此方法有效。但是,字节范围请求也可能被视为安全风险,例如当对服务器发起拒绝服务攻击时。因此,字节范围请求可能会在途中被阻止,无论是通过路由器或防火墙,还是由 EC2 服务器本身阻止,这会导致您看到的错误消息。
因此,请检查连接是否存在可能的阻止请求,或考虑联系 EC2 支持。
也可以看看: