通过PHP的MP4视频传输在Google Chrome中失败

时间:2012-07-11 11:35:06

标签: php html5 google-chrome video mp4

我目前正在尝试通过PHP脚本提供用于HTML5视频(使用video-js)的MP4视频,以控制视频访问。经过一些研究,我得到了stackoverflow article found here的帮助。如果我导航到PHP脚本,我可以在Firefox,Safari和IE中查看视频,就像我通过其绝对路径(例如localhost / myvideo.mp4而不是localhost / myscript.php)查看它一样。我的问题在于谷歌浏览器,它只是显示一个黑屏,中间有一个小型媒体播放器,并且什么都不做。

我尝试使用快速重写,例如localhost / avideo.mp4,它会路由到PHP脚本,但不幸的是,这并没有改变任何内容。

这是我的剧本:

if (is_file($uri)) {
    header('Content-Type: video/mp4');
    if (isset($_SERVER['HTTP_RANGE'])) {
        $this->rangeDownload($uri);
        exit;
    } else {
        header("Content-Length: ".filesize($uri));
        $this->readfile_chunked($uri);
        exit;
    }
} else {
    //error
}

如上述stackoverflow文章所述,rangeDownload方法直接来自this link的附录A.

2 个答案:

答案 0 :(得分:2)

问题可能在于URL(更具体地说,扩展名)。通常情况下,您会使用Content-Disposition标头,但我知道在向移动设备提供内容时这是不可取的。

尝试使用localhost/myscript.php/myvideo.mp4

  

重要的是不要使用“Content-Disposition”HTTP标头,因为有些手机在使用时拒绝接受内容。   通过在URL上包含文件名,您将欺骗手机认为它是一个真实的文件并接受它。

     

现在,当您将下载URL发送给客户时,您通常不知道客户拥有什么设备,因此您不知道该设备将支持哪些文件格式。因此,您不能在该URL上包含文件名,您需要再次使用中间下载页面。再一次,我们将使用如下的网址:

http://wap.mydomain.tld/get.php/123456abcdef
     

这次,当客户连接下载内容时,get.php脚本不会创建临时文件,而是指向另一个流式传输文件内容的脚本。   假设要下载的结果内容为“image.jpg”,中间下载页面可以将客户指向以下URL:

http://wap.mydomain.tld/download.php/123456abcdef/image.jpg

从(http://mobiforge.com/developing/story/content-delivery-mobile-devices

答案 1 :(得分:2)

我了解您使用的是视频j,但我建议使用html5media(另请查看github page了解详情)。我不得不在网站上制作视频用于工作,我尝试了一些东西,包括video-js,但html5media是我能在所有浏览器中使用的唯一一个。

可能有助于其他人的旁注:其中一个要求是我们托管了所有文件,以便我们不会依赖第三方服务器来提供JavaScript文件或Flash播放器,我不记得是否有视频-js这很简单但我知道使用html5media我们可以下载flowplayer并在我们的服务器上安装所有内容。

为了生成3种推荐视频格式(mp4,WebM和Theora),我使用了Miro Video Converter