在谷歌浏览器中,通过PHP交付MP4视频失败

在谷歌浏览器中,通过PHP交付MP4视频失败,php,html,google-chrome,video,mp4,Php,Html,Google Chrome,Video,Mp4,我目前正试图通过一个控制视频访问的PHP脚本来交付MP4视频,以便在HTML5视频中使用(使用video js)。经过一些研究后,我能够在工程师的帮助下使这项工作正常进行。如果我导航到PHP脚本,我可以通过Firefox、Safari和IE中的绝对路径(例如localhost/myvideo.mp4,而不是localhost/myscript.PHP)查看视频。我的问题是Google Chrome,它只显示一个黑屏,中间有一个小媒体播放器,什么都不做 我确实尝试过使用快速重写,比如localho

我目前正试图通过一个控制视频访问的PHP脚本来交付MP4视频,以便在HTML5视频中使用(使用video js)。经过一些研究后,我能够在工程师的帮助下使这项工作正常进行。如果我导航到PHP脚本,我可以通过Firefox、Safari和IE中的绝对路径(例如localhost/myvideo.mp4,而不是localhost/myscript.PHP)查看视频。我的问题是Google Chrome,它只显示一个黑屏,中间有一个小媒体播放器,什么都不做

我确实尝试过使用快速重写,比如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方法直接取自的附录A。

可能是URL(更具体地说,是扩展名)的问题。通常情况下,您会使用内容处置头,但我理解,在向手机交付内容时,这是不可取的

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

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

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

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

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

From()

我知道您正在使用video js,但我建议您使用(也可以查看查看以了解更多信息)。我不得不在网站上制作视频以供工作之用,我尝试了一些东西,包括视频js,但html5media是唯一一款可以在所有浏览器中使用的视频

一个可能对其他人有帮助的补充说明:其中一个要求是我们托管所有文件,这样我们就不会依赖第三方服务器来提供JavaScript文件或flash播放器,我不记得使用video js这是否容易,但我知道使用HTML5媒体,我们能够下载所有文件,并在服务器上拥有所有内容


为了生成我使用的3种推荐视频格式(mp4、WebM和Theora)

你能发布你发送的所有标题信息吗?内容类型、接受范围、内容范围、内容长度、HTTP/1.1 206部分内容。这些头在第一种情况下使用rangeDownload,这是用于Chrome的,尽管readfile_chunked使用的头较少(在Chrome中仍然不起作用)。我唯一建议的另一种是内容传输编码:二进制。使用此组合,我可以通过PHP将音频传输到所有浏览器。@ethrbunny感谢您的帮助,但遗憾的是,该标题没有任何区别。您是否使用已知的好视频进行了尝试?感谢您的回答,尽管如我在问题中所述,“我确实尝试过使用快速重写,例如localhost/avideo.mp4,它将路由到PHP脚本,但不幸的是,这没有改变任何东西。”。我不确定您建议我做什么不同的事情?差异可能在于浏览器获得的实际URL。如果您使用重定向(30x),然后浏览器最终得到最终的URL,扩展名是.php而不是.mp4,这一点非常重要。您是否尝试过比较所有请求/响应头(例如使用Fiddler?)我现在正在Chrome上查看标题信息,但我不知道该怎么做。我能说的是有明显的区别。我会在几个小时后用屏幕截图跟进这篇文章。我承认我对标题不是特别了解,所以我不确定该怎么做。你能解释一下这件事吗?屏幕截图hot仅包含请求,而不包含每个请求的标题。单击请求可以查看标题(您应该看到请求URL、请求方法、状态代码,然后是请求标题列表和响应标题。您将看到响应标题(您生成的标题和web服务器创建的标题)中的差异,否则,令人不快的区别可能是请求URL,正如我推测的(意思是,你的将是something.php和他们的something.mp4)浏览器使用扩展来启发他们应该如何处理内容。感谢这篇文章,但问题不在于视频JS,而在于chrome(视频不会在chrome上播放,视频js会显示图片,使用普通视频文件时,视频js工作正常).我对video js的体验很好;我使用手刹进行文件转换,到目前为止我还没有遇到任何问题。但是,我注意到HTML5媒体,以防我将来需要找到新的东西。干杯。没问题@Noobatron。我不想阻止人们使用video js,因为如果你能让它正常工作,那么嘿,太好了!我我只是想,如果有人听到我做了什么,他们可能会从中受益,以防他们遇到同样的问题(也许我只是不知道我在用视频js做什么).我家里有一个手刹,我用它将dvd转换成我的android手机,效果很好。我仍然会去Miro公司为这3种网络格式工作,因为它的界面非常简单。希望你的视频在Chrome上运行!