我在线有一个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文件。
答案 0 :(得分:1)
您在PHP脚本中缺少Content-Type
标头。
找出原始内容类型标头来自您的服务器(可能是video/mp4
)并使用您的代理脚本发送,如下所示:
header('Content-Type: video/mp4');
这将允许浏览器检测内容类型并直接播放(如果支持),而无需下载。
另外,我会考虑使用真正的代理服务器,例如Nginx,而不是重新发明轮子。这将更容易,更可靠。
答案 1 :(得分:0)
您可以使用带有Media Element标签的接收器,然后将其源指向服务器上的mp4文件。如果您不想编写自己的接收器,可以使用default或Styled Media Receiver。您需要一个非常简单的发件人来发送网址,请查看github repo以获取示例