我之前编写过USB网络摄像头,其唯一目的是从摄像头获取实时帧并在窗口中显示.我为此目的使用了cvCaptureFromCAM,它适用于USB Camera(见下面的代码).
我想知道如何从千兆以太网相机中捕获帧?我想我需要使用一些API从一些默认IP地址捕获帧.有人能指出我正确的方向吗?
我将在Intel i3处理器上的Windows 7上使用C++和OpenCV.
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
// A Simple Camera Capture Framework
int main() {
CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );
if ( !capture ) {
fprintf( stderr, "ERROR: capture is NULL \n" );
getchar();
return -1;
}
// Create a window in which the captured images will be presented
cvNamedWindow( "mywindow", CV_WINDOW_AUTOSIZE );
// Show the image captured from the camera in the window and repeat
while ( 1 ) {
// Get …Run Code Online (Sandbox Code Playgroud) 我们有一台配有模拟摄像头的设备.我们有一张卡片可以对其进行采样并将其数字化.这一切都在directx中完成.此时,替换硬件不是一种选择,但我们需要编码,以便我们可以实时看到此视频源,无论将来是否发生任何硬件或底层操作系统更改.
沿着这条线,我们选择了Qt来实现一个GUI来查看这个摄像头输入.但是,如果我们将来迁移到Linux或其他嵌入式平台并更换其他硬件(包括摄像机/视频采样器所在的物理设备),我们也需要更换摄像机显示软件,这将是痛苦是因为我们需要将它集成到我们的GUI中.
我提出的是迁移到更抽象的模型,其中数据通过套接字发送到GUI,并且视频在从套接字流解析后实时显示.
首先,这是一个好主意还是一个坏主意?
其次,你会如何实现这样的事情?视频采样器通常如何提供可用的输出?如何将此输出推到套接字上?一旦我在接收端解析输出,我怎么知道如何处理输出(如何如何获得输出渲染)?我唯一能想到的是将每个样本写入文件,然后在每次新样本到达时显示文件的内容.这对我来说似乎是一个低效的解决方案,如果它可以工作的话.
你怎么建议我处理这个?有没有可用于这种事情的跨平台库?
谢谢.
编辑:我愿意接受不同的建议,而不是上面列出的内容.
我已经使用AForge库来制作这个小程序,它显示从网络摄像头到PictureBox的实时馈送.
private FilterInfoCollection VideoCaptureDevices;
private VideoCaptureDevice FinalVideoDevice;
private void Form1_Load(object sender, EventArgs e)
{
VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
try
{
foreach (FilterInfo VidCapDev in VideoCaptureDevices)
{
comboBox1.Items.Add(VidCapDev.Name);
comboBox1.SelectedIndex = 0;
}
FinalVideoDevice = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString);
FinalVideoDevice.NewFrame += new NewFrameEventHandler(FinalVideoDevice_NewFrame);
FinalVideoDevice.Start();
}
catch
{
MessageBox.Show("No camera found. Please connect your camera and click RESET.");
}
}
//////////////////////////////////////////////////////////////////////////////////////////
void FinalVideoDevice_NewFrame(object sender, NewFrameEventArgs e)
{
try
{
pictureBox1.Image = (Bitmap)e.Frame.Clone();
}
catch { }
}
Run Code Online (Sandbox Code Playgroud)
但我还需要从IP摄像头获取流.任何想法最好的方法是什么?
我试图通过Android应用程序上的IP摄像头流式传输视频.我已成功使用以下内容获取视频:
现在,所有这些情况都在起作用,但即使在本地网络上也平均滞后7-8秒.
我看到一些应用程序即使在使用移动端口(18600)的远程网络上也没有任何延迟.此端口通常与相机上的P2P模式相关联(此假设完全基于我的理解,根据我的相机设置界面上可用的以下设置,其显示:模式 - P2P,端口 - 18600,实时 - 正常).
有人可以帮我理解我们如何在P2P模式下连接到IP摄像头的移动端口?以及这种模式如何不显示RTSP的延迟?
提前致谢.
如果没有新的请求说1秒,PHP有没有办法采取一些行动(例如mysql插入)?
我想要实现的是确定从IP摄像机发送的图像序列的开始和结束.相机在检测到的移动时发送一系列图像,并在移动停止时停止发送.我知道相机每秒制作5张图像(每200毫秒).当没有超过1秒的新图像时,我想将最后一个图像标记为序列的结尾,在mysql中插入记录,将img放在适当的文件夹中(其中所有其他img来自相同的序列已经写入)并指示app在该文件夹中制作MJPEG图像剪辑.
现在我能够使用Alternative PHP cash来确定序列中的第一个图像,以节省前一个请求的参考时间,但问题是因为下一个图像序列可能在几个小时之后发生,如果有,我不能指示PHP关闭序列只有在第一次请求新序列到达时才会有一段时间没有请求.
我真的需要帮助.我的PHP几乎像我的英语一样......
我的问题的伪代码:
<?php
if(isset($headers["Content-Disposition"]))
{
$frame_time = microtime(true);
if(preg_match('/.*filename=[\'\"]([^\'\"]+)/', $headers["Content-Disposition"], $matches))
{ $filename = $matches[1]; }
else if(preg_match("/.*filename=([^ ]+)/", $headers["Content-Disposition"], $matches))
{ $filename = $matches[1]; }
}
preg_match("/(anpr[1-9])/", $filename, $anprs);
$anpr = $anprs[1];
$apc_key = $anpr."_last_time"; //there are several cameras so I have to distinguish those
$last = apc_fetch($apc_key);
if (($frame_time - $last)>1)
{
$stream = "START"; //New sequence starts
} else {
$stream = "-->"; //Streaming
};
$file = fopen('php://input', 'r');
$temp …Run Code Online (Sandbox Code Playgroud) 我有几台IP摄像机可以通过rtsp传输720 X264视频.在Android上查看时,流非常不可靠.如果超过2个连接,它们也会失败.
我有一个ubuntu服务器,我可以使用它连接和restream作为mjpeg或其他东西.有很多不同的命令,但它们似乎都涉及转码视频.
我怎样才能简单地将实时rtsp feed作为mjpeg重新播放而不对视频本身做任何事情?没有音频,所以不用担心.
我有一个应用程序,其中我正在解码来自ip camera的视频帧,但是生成bad_access时avcodec_decode_video2(m_pCodecCtx, m_pFrame, &consumed_bytes, &avpkt);出现的方法avcodec.h,我无法弄清楚出了什么问题.
这个应用程序与旧的库FFMpeg工作正常,但通过苹果政策,为了发布应用程序支持arm64,所以我更新了我的库以支持arm64,之后发生了这个问题.
这是截图
虽然bad_access应用程序正在生成以下日志:
[h264 @ 0x1071400] sps_id 12 out of range
[h264 @ 0x1071400] pps_id 417 out of range
[h264 @ 0x1071400] sps_id 3 out of range
[h264 @ 0x1071400] sps_id 32 out of range
[h264 @ 0x1071400] sps_id 6 out of range
[h264 @ 0x1071400] sps_id 0 out of range
[h264 @ 0x1071400] sps_id 32 out of range
[h264 @ 0x1071400] sps_id 1 out of range
[h264 @ 0x1071400] sps_id …Run Code Online (Sandbox Code Playgroud) 我的配置:
ubuntu 16.04
opencv 3.3.1
gcc version 5.4.0 20160609
ffmpeg version 3.4.2-1~16.04.york0
Run Code Online (Sandbox Code Playgroud)
我用以下方法构建了 opencv:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D PYTHON_EXECUTABLE=$(which python) -D OPENCV_EXTRA_MODULES_PATH=/home/xxx/opencv_contrib/modules -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_IPP=ON -D WITH_OPENNI2=ON -D WITH_V4L=ON -D WITH_FFMPEG=ON -D WITH_GSTREAMER=OFF -D WITH_OPENMP=ON -D WITH_VTK=ON -D BUILD_opencv_java=OFF -D BUILD_opencv_python3=OFF -D WITH_CUDA=ON -D ENABLE_FAST_MATH=1 -D WITH_NVCUVID=ON -D CUDA_FAST_MATH=ON -D BUILD_opencv_cnn_3dobj=OFF -D FORCE_VTK=ON -D WITH_CUBLAS=ON -D CUDA_NVCC_FLAGS="-D_FORCE_INLINES" -D WITH_GDAL=ON -D WITH_XINE=ON -D BUILD_EXAMPLES=OFF -D BUILD_DOCS=ON -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -D BUILD_opencv_dnn=OFF -D BUILD_PROTOBUF=OFF -D opencv_dnn_BUILD_TORCH_IMPORTER=OFF …Run Code Online (Sandbox Code Playgroud) 我想在使用 ReactJS 构建的网页上显示网络摄像机的实时镜头。
我在互联网上找到了一些解决方案,但提供了使用 http url 的解决方案。但是我的相机有用户名和密码,我不知道如何将用户名/密码嵌入到 http url 中。
我有一个带有用户名/密码的有效 rtsp url。
我想在 React 应用程序中有一个视频元素,如下所示:
render() {
return (
<div>
<video
....
/>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
我的功能 rtsp url 是这样的:rtsp://username:password@172.16.3.18:554
我有一台海康威视 IP 摄像机,正在对其进行安全研究。(型号DFI6257E,貌似是台湾独家型号。)
从闪存中转储固件并使用 binwalk 对其进行分析后,我发现很难理解其工作原理。几乎就像他们试图隐藏一些事情。
转储固件:https://drive.google.com/file/d/1x9JiVbnZo4zNNnX8V8JS1MGsK4wmHFM6/view ?usp=sharing
这是 binwalk 的输出:
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
36392 0x8E28 LZMA compressed data, properties: 0x5D, dictionary size: 16777216 bytes, uncompressed size: -1 bytes
10092544 0x9A0000 JFFS2 filesystem, little endian
16318544 0xF90050 Zlib compressed data, compressed
16318764 0xF9012C Zlib compressed data, compressed
16319000 0xF90218 Zlib compressed data, compressed
16319136 0xF902A0 Zlib compressed data, compressed
16319592 0xF90468 Zlib compressed data, compressed
16320424 0xF907A8 Zlib compressed data, compressed
16320864 0xF90960 Zlib compressed data, compressed
16321796 …Run Code Online (Sandbox Code Playgroud)