13

我目前正在尝试通过用于控制视频访问的 PHP 脚本提供用于 HTML5 视频(使用 video-js)的 MP4 视频。经过一些研究,我能够在此处找到的 stackoverflow 文章的帮助下完成这项工作。如果我导航到 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
}

rangeDownload 方法直接取自此链接的附录 A,如前面提到的 stackoverflow 文章中所建议的那样。

4

2 回答 2

2

也许问题出在 URL 上(更具体地说,是扩展名)。通常,您会使用 Content-Disposition 标头,但我知道在将内容传送到手机时这是不可取的。

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

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

现在,当您将下载 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

于 2012-07-16T18:22:22.290 回答
2

我了解您使用的是 video-js,但我建议使用html5media(也可以查看github 页面了解更多信息)。我必须在工作网站上提供视频,我尝试了一些东西,包括 video-js,但 html5media 是唯一一个我可以在所有浏览器中工作的东西。

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

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

于 2012-07-17T06:43:04.977 回答