4

私は、Tenvis IP カメラから http ライブ ストリーミングと mjpeg 圧縮によるライブ ストリームを取得しています。

ファイルに保存しようとしていますが、これを行うためにphpを使用しようとしました。私のコードは次のようになります。

<?php
$input = fopen("http://xxx.xxx.xxx.xxx:81/videostream.cgi?user=user&pwd=admin&resolution=8");
$output = fopen("video.mpg", "c+");
$end = time() + 60;
do {
    fwrite($output, (fread($input, 30000)), 30000);
} while (time() <= $end);
fclose($output);
fclose($input);
echo "<h1>Recording</h1>";
?>

私が持っているコードはファイルを作成しますが、何も書き込みません。任意の提案をいただければ幸いです

4

2 に答える 2

1

MJPEG に関するウィキペディアのページ ( http://en.wikipedia.org/wiki/Motion_JPEG#M-JPEG_over_HTTP ) によると、HTTP を介した MJPEG ストリームは基本的に、特別な MIME タイプを伴う一連の JPEG フレームです。これらをキャプチャしてビデオ ファイルに保存するために、受信データを .mpg ファイルに単純に書き込んでビデオを動作させることができるかどうかはわかりません。

正直なところ、なぜあなたのスクリプトが何も書かないのかよくわかりませんが、特定のソフトウェア向けに書かれていますが、MJPEG ストリームをキャプチャして渡す方法の例を提供している次のページに出くわしました。ブラウザへ: http://www.lavrsen.dk/foswiki/bin/view/Motion/MjpegFrameGrabPHP

それらの例の 1 つを試して、それをブラウザーに渡す代わりに、ファイルに保存することができます。一度に 1 つのイメージを読み取ることがわかります。

while (substr_count($r,"Content-Length") != 2) $r.=fread($input,512);
$start = strpos($r,'ÿ');
$end   = strpos($r,$boundary,$start)-1;
$frame = substr("$r",$start,$end - $start);

これでストリーム キャプチャ部分が修正されてもビデオとして保存されない場合は、別のオプションとして、すべてのフレームを個別に JPEG ファイルとして保存し、後で ffmpeg などのツールを使用してそれらをつなぎ合わせてビデオを作成します。品質

更新 ffmpeg の道を選ぶ場合は、ffmpeg のみを使用してストリームをキャプチャすることもできます。例については、この質問を参照してください。

お役に立てれば。

于 2013-10-04T15:29:15.243 に答える