2013-01-23 73 views
2

我想通过FTP和PHP流mp4文件,但只有mp3会流,mp4s将下载,但不是流有一种特殊的格式,mp4必须在流?用PHP流媒体的MP4

这是我想要的代码:

$response = ftp_raw($ftp, 'SIZE '.$_GET['path']); 
$size = floatval(str_replace('213 ', '', $response[0])); 
if(substr($_GET['path'], -4) == '.mp3') { 
    header('Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3'); 
} 
if(substr($_GET['path'], -4) == ".mp4") { 
    header('Content-Type: video/mpeg'); 
} 
header('Content-Encoding: chunked'); 
header('Connection: keep-alive'); 
header('Content-Disposition: inline; filename="'. basename($_GET["path"]). '"'); 
header('Content-Description: File Transfer'); 
header("Content-Length: $size"); 
header('Content-Transfer-Encoding: binary'); 
header('X-Pad: avoid browser bug'); 
header('Pragma: public'); 
header('Expires: -1'); 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Cache-Control: post-check=0, pre-check=0', false); 
header('Content-Range: bytes 0-'.$size); 
header('Accept-Ranges: bytes'); 
$out = fopen('php://output', 'w'); 
if (!ftp_fget($ftp, $out, $_GET['path'], FTP_BINARY)) die('Unable to get file: ' . $remote_file); 
fclose($out); 
+0

我试过内容类型:video/mp4了。 –

+0

我的猜测是它与'Content-Range'标题有关。客户端可能会要求某个文件块,但是您正在发送整个文件。另外,我不知道是否需要“Content-Encoding:chunked”。 –

+0

您的MP4文件是否允许流式传输? – datasage

回答

1

你需要某种形式的流服务器。如果你真的想用PHP来做到这一点,我强烈反对,那么你将需要打开一个套接字连接并写入你将从文件中顺序读取的数据块......在一个循环中,直到你遍历整个文件。

考虑到你也应该考虑并发性和适当的内存管理,并考虑php是如何的(开销,不是线程友好......或者我被告知......),只是不要做用PHP。

有很多开源的流媒体解决方案,他们将满足您的需求。

是的,PHP并不是真正意义上的......虽然这在理论上是可能的。

任何人都请纠正我,如果我错了。