【发布时间】:2013-07-31 17:58:42
【问题描述】:
我想通过视频标签显示一个 mp4,视频的源 URL 是 YII 应用程序的 URL。我之前使用的是 Yii:app->request->sendFile 但视频无法在 iPad/iPhone 上运行,所以现在我尝试使用下面的代码自己发送标题但仍然无法正常工作。
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$file_path = "video.mp4";
$file_mime_type = finfo_file($finfo, $file_path);
$file_size = filesize($file_path);
header("HTTP/1.1 206 Partial Content");
header("Accept-Ranges: bytes");
header("Content-Type: $file_mime_type");
header("Content-Length: $file_size");
header("Content-Range: bytes 0-".($file_size-1)."/$file_size");
readfile($file_path);
exit;
我什至尝试从 http://mobiforge.com/developing/story/content-delivery-mobile-devices 实现 rangeDownload 函数,但问题是 $_SERVER['HTTP_RANGE'] 始终为 null,即使请求来自 iPhone/iPad。
我也在这里mp4 file through php not playing as html5 video 尝试过这个解决方案,但再次无济于事..
上面的代码适用于网络浏览器。此外,如果我直接从 iPhone/iPad 访问 .mp4,它也可以正常工作,所以视频本身不是问题
有什么帮助吗?
【问题讨论】:
-
为什么不直接做一个
header('Location: video.mp4');? -
如果
$_SERVER['HTTP_RANGE']是NULL,为什么要发送部分内容响应?此外,如果您发送部分内容响应,为什么要发送整个文件?此外,您需要提供生成的响应标头,不仅是代码,还有实际响应。 HTTP 在这里顺便说一句:tools.ietf.org/html/rfc2616 -
也试着看看,像 Fiddler2 这样的工具会发生什么。首先你可以看到 mp4 在 html 中会发生什么,然后是 php 会发生什么并比较 HTTP 请求标头。
-
@cmorrissey,它不适用于受密码保护的目录。
标签: php iphone video http-headers mp4