我有来自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>";
?>
我创建的代码文件但不写任何内容。任何建议将不胜感激
答案 0 :(得分:1)
根据关于MJPEG(http://en.wikipedia.org/wiki/Motion_JPEG#M-JPEG_over_HTTP)的维基百科页面,基于HTTP的MJPEG流基本上是一系列JPEG帧,并伴有特殊的mime类型。为了捕获这些并将它们保存到视频文件中,我不确定您是否可以简单地将传入数据写入.mpg文件并拥有可用的视频。
老实说,我不太清楚为什么你的脚本根本不会写任何内容,但我遇到了以下页面,虽然它是针对特定软件编写的,但它提供了有关如何捕获MJPEG流和将其传递给浏览器: http://www.lavrsen.dk/foswiki/bin/view/Motion/MjpegFrameGrabPHP
您可以尝试其中一个示例,而不是将其传递给浏览器,将其保存到文件中。您可以看到他们一次读取一张图片:
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等工具将它们拼接在一起以创建视频:{ {3}}
<强>更新强> 如果您决定采用ffmpeg道路,也可以仅使用ffmpeg捕获流。有关示例,请参阅Image sequence to video quality问题。
希望这有帮助。
答案 1 :(得分:0)
大多数情况下,当相机支持mjpeg时,它也支持rtsp,因此您可能希望将其作为解决方案来实现您想要实现的目标。有了它,使用像VLC这样的应用程序录制相当简单。