php – 从IP摄像机录制直播流(MJPEG压缩)
发布时间:2020-12-13 22:49:48 所属栏目:PHP教程 来源:网络整理
导读:我有一个来自Tenvis IP摄像机的直播,通过http直播和mjpeg压缩. 我正在尝试将其保存到文件中,我尝试使用php来执行此操作.我的代码看起来像这样: ?php$input = fopen("http://xxx.xxx.xxx.xxx:81/videostream.cgi?user=userpwd=adminresolution=8");$output =
我有一个来自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>"; ?> 我创建的代码但不写任何东西.任何建议将不胜感激 解决方法
根据关于MJPEG(
http://en.wikipedia.org/wiki/Motion_JPEG#M-JPEG_over_HTTP)的维基百科页面,基于HTTP的MJPEG流基本上是一系列JPEG帧,伴随着一种特殊的mime类型.为了捕获它们并将它们保存到视频文件中,我不确定您是否可以简单地将传入的数据写入.mpg文件并拥有可用的视频.
说实话,我不太清楚为什么你的脚本根本不写任何内容,但我遇到了以下页面,虽然它是针对特定软件编写的,但它提供了有关如何捕获MJPEG流并将其传递的示例到浏览器: 您可以尝试其中一个示例,而不是将其传递给浏览器,将其保存到文件中.您可以看到他们一次读取一个图像: 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 更新 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |