2

FTP と PHP を介して mp4 ファイルをストリーミングしようとしていますが、mp3 のみがストリーミングされ、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);
4

1 に答える 1

1

ある種のストリーム サーバーが必要です。PHP で本当にそれを行いたい場合は、ソケット接続を開き、ファイルから順番に読み取るデータのチャンクを書き込む必要があります...全体を処理するまでループします。ファイル。

同時実行性と適切なメモリ管理も考慮する必要があるという事実を考慮し、php がどのように機能するか (オーバーヘッド、スレッドフレンドリーではない... またはそう言われました...) を考慮すると、PHP でそれを行わないでください。

オープンソースのストリーミング ソリューションはたくさんあり、それらはニーズを満たします。

はい、PHP は実際にはそのためのものではありません...理論的には可能ですが。

私が間違っていたら、誰でも私を修正してください。

于 2013-03-03T22:05:44.830 に答える