Chromecast PHP缓冲区MP4

时间:2014-02-07 20:01:32

标签: php video buffer google-cast

我在线有一个Chromecast和一个mp4文件的URL。我也有一个2Mbps的下载连接,这是可悲的,并使得对Chromecast的直接缓冲太慢。这就是我到目前为止所做的:

通过开发者控制台,我只需将location.href设置为mp4的在线URL。 Chromecast将缓冲20秒,播放10秒的视频,然后再次缓冲。所以,通过控制台,我暂停了视频并让它缓冲了5分钟。当我让它再次播放时,它播放约15秒,然后失去所有进度,不得不返回主屏幕。

由于我不想等待mp4的整个下载完成,我现在正在尝试这个:我将mp4缓冲到我的htdocs目录中的本地文件,然后我将Chromecast指向文件的位置。但是,当通过Chrome(浏览器)打开mp4文件时,它会显示下载提示,而不是播放,Chromecast将返回主屏幕。

我已经在PHP中实现了缓冲,它看起来如此:

$bufferSource = 'http://example.com/path/to/file.mp4';

$bufferedReader = fopen($bufferSource, 'r');

while(!($finished = feof($bufferedReader))){

    if($finished !== false){ break; }

    //get onle line
    $buffer = fgets($bufferedReader);


    file_put_contents('buffer.mp4', $buffer, FILE_APPEND);

}

fclose($bufferedReader);

我知道PHP可以正常工作,因为我可以在计算机上看到文件大小增长,我可以用VLC打开文件。我是否可以使用另一个PHP脚本来访问模拟“可缓冲性”的本地缓冲mp4文件,因此Chrome不会显示下载对话框但会缓存文件,Chromecast也应如此?

编辑:还有一件事。我没有将Chromecast指向PHP脚本。我实际上直接将它指向buffer.mp4文件。

2 个答案:

答案 0 :(得分:1)

您在PHP脚本中缺少Content-Type标头。

找出原始内容类型标头来自您的服务器(可能是video/mp4)并使用您的代理脚本发送,如下所示:

header('Content-Type: video/mp4');

这将允许浏览器检测内容类型并直接播放(如果支持),而无需下载。

另外,我会考虑使用真正的代理服务器,例如Nginx,而不是重新发明轮子。这将更容易,更可靠。

答案 1 :(得分:0)

您可以使用带有Media Element标签的接收器,然后将其源指向服务器上的mp4文件。如果您不想编写自己的接收器,可以使用defaultStyled Media Receiver。您需要一个非常简单的发件人来发送网址,请查看github repo以获取示例