2013-01-23 98 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並不是真正意義上的......雖然這在理論上是可能的。

任何人都請糾正我,如果我錯了。