PHP media streamer


PHP media streamer

这个想法是我想为我的网站创建一个简单的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标头