这个想法是我想为我的网站创建一个简单的PHP媒体流。
我设法在web浏览器和Android上的VideoView
上流式传输视频。
我想做什么
- 立即流式传输此视频给
multiple
用户 在android上缓存
HTML5
视频到sdcard
- 我可以流视频,但只有
one
用户 - 我无法获得缓存在存储卡上的视频
streamer.php
<?php
$file = './'.$_GET["file"];
$pos = (isset($_GET["pos"])) ? intval($_GET["pos"]): 0;
header("Content-Type: video/x-flv");
header('Content-Length: ' . filesize($file));
$fh = fopen($file,"rb");
fseek($fh, $pos);
fpassthru($fh);
fclose($fh);
?>
page.html
<HTML manifest="./cache.appcache">
<video id="vid" controls>
<source src="http://example.com/streamer.php?file=video.mp4" type="video/mp4">
</video>
</HTML>
cache.appcache
CACHE MANIFEST
# 2014-03-08 v1.0.0
/video.mp4
android端
...
String appCachePath = Environment.getExternalStorageDirectory().getAbsolutePath();
wv.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
wv.getSettings().setAppCachePath(appCachePath);
wv.getSettings().setAppCacheEnabled(true);
wv.getSettings().setAllowFileAccess(true);
wv.getSettings().setDomStorageEnabled(true);
...
我猜,缓存问题是由于头不发送/设置。试试吧:
header('Pragma: private');
header('Expires: '.date('D, d M Y H:i:s 'G'M'T', time() + 7200));
header('Cache-control: private, max-age=7200, must-revalidate');
header('Content-Length: '.filesize($file));
header('Content-Disposition: filename='.md5($file));
也:你设置header('Content-Type: video/x-flv');
,但使用type="video/mp4"
。我猜应该是header('Content-Type: video/mp4');
下一步:为了使$_GET["pos"]
工作,您需要相应地计算和设置accept range
标头