我有一个实况流从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>";
?>
我的代码创建了这个文件,但没有向其中写入任何内容。如有任何建议,我们将不胜感激
发布于 2013-10-04 15:29:15
根据维基百科关于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之类的工具将它们缝合在一起以创建视频:Image sequence to video quality
更新如果您决定采用ffmpeg方法,也可以仅使用ffmpeg来捕获流。有关示例,请参阅this问题。
希望这能有所帮助。
发布于 2017-11-30 17:52:27
大多数情况下,当相机支持mjpeg时,它也支持rtsp,因此您可能希望将其作为您正在尝试实现的解决方案。这样,使用像VLC这样的应用程序进行记录就相当简单了。
https://stackoverflow.com/questions/18432478
复制