
在linux下所有设备都是文件。所以对摄像头的 *** 作其实就是对文件的 *** 作。USB摄像头的设备文件就是在/dev目录下的video0(假如只有一个摄像头)。在linux下 *** 作摄像头就是使用v4l2对摄像头进行视频的 *** 作, *** 作步骤如下
1. 打开设备文件。
int fd=open(”/dev/video0″,O_RDWR)
2. 取得设备的capability,看看设备具有什么功能,比如是否具有视频输入,或者音频输入输出等。VIDIOC_QUERYCAP,struct v4l2_capability
v4l2_std_id stddo {
ret= ioctl(fd, VIDIOC_QUERYSTD, &std)
} while (ret == -1 && errno == EAGAIN)
switch (std) {
case V4L2_STD_NTSC:
//……
case V4L2_STD_PAL:
//……
}
3. 选择视频输入,一个视频设备可以有多个视频输入。VIDIOC_S_INPUT,struct v4l2_input(可不要)
4. 设置视频的制式和帧格式,制式包括PAL,NTSC,帧的格式个包括宽度和高度等。
VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format
struct v4l2_format fmtmemset ( &fmt, 0, sizeof(fmt) )
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE
fmt.fmt.pix.width = 320
fmt.fmt.pix.height = 240
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_JPEG
if (ioctl(fd, VIDIOC_S_FMT, &fmt) < 0)
{
printf("set format failed\n")
//return 0
}
5. 向驱动申请帧缓冲,一般不超过5个。struct v4l2_requestbuffers
struct v4l2_requestbuffers reqmemset(&req, 0, sizeof (req))
req.count = 4
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE
req.memory = V4L2_MEMORY_MMAP
if (ioctl(fd,VIDIOC_REQBUFS,&req) == -1)
{
perror("VIDIOC_REQBUFS error \n")
//return -1
}
6.申请物理内存
将申请到的帧缓冲映射到用户空间,这样就可以直接 *** 作采集到的帧了,而不必去复制。将申请到的帧缓冲全部入队列,以便存放采集到的数据.VIDIOC_QBUF,struct v4l2_buffer
VideoBuffer* buffers = calloc( req.count, sizeof(VideoBuffer) )printf("sizeof(VideoBuffer) is %d\n",sizeof(VideoBuffer))
struct v4l2_buffer buf
for (numBufs = 0 numBufs < req.count numBufs++)
{
memset( &buf, 0, sizeof(buf) )
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE
buf.memory = V4L2_MEMORY_MMAP
buf.index = numBufs
if (ioctl(fd, VIDIOC_QUERYBUF, &buf) < 0)
{
printf("VIDIOC_QUERYBUF error\n")
//return -1
}
printf("buf len is %d\n",sizeof(buf))
//内存映射
buffers[numBufs].length = buf.length
buffers[numBufs].offset = (size_t) buf.m.offset
buffers[numBufs].start = mmap (NULL, buf.length,PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset)
printf("buffers.length = %d,buffers.offset = %d ,buffers.start[0] = %d\n",buffers[numBufs].length,buffers[numBufs].offset,buffers[numBufs].start[0])
printf("buf2 len is %d\n",sizeof(buffers[numBufs].start))
if (buffers[numBufs].start == MAP_FAILED)
{
perror("buffers error\n")
//return -1
}
if (ioctl (fd, VIDIOC_QBUF, &buf) < 0)
{
printf("VIDIOC_QBUF error\n")
//return -1
}
}
7. 开始视频的采集。
enum v4l2_buf_type typetype = V4L2_BUF_TYPE_VIDEO_CAPTURE
if (ioctl (fd, VIDIOC_STREAMON, &type) < 0)
{
printf("VIDIOC_STREAMON error\n")
// return -1
}
8. 出队列以取得已采集数据的帧缓冲,取得原始采集数据。VIDIOC_DQBUF, 将缓冲重新入队列尾,这样可以循环采集。VIDIOC_QBUF
if (ioctl(fd, VIDIOC_DQBUF, &buf) < 0){
perror("VIDIOC_DQBUF failed.\n")
//return -1
}
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE
buf.memory = V4L2_MEMORY_MMAP
unsigned char *ptcur = buffers[numBufs].start
DEBUG("buf.bytesused = %d \n",buf.bytesused)
int i1
for(i1=0 i1<buf.bytesused i1++)
{
if((buffers[numBufs].start[i1] == 0x000000FF) && (buffers[numBufs].start[i1+1] == 0x000000C4))
{
DEBUG("huffman table finded! \nbuf.bytesused = %d\nFFC4 = %d \n",buf.bytesused,i1)
break
}
}
if(i1 == buf.bytesused)printf("huffman table don't exist! \n")
int i
for(i=0 i<buf.bytesused i++)
{
if((buffers[numBufs].start[i] == 0x000000FF) && (buffers[numBufs].start[i+1] == 0x000000D8)) break
ptcur++
}
DEBUG("i=%d,FF=%02x,D8=%02x\n",i,buffers[numBufs].start[i],buffers[numBufs].start[i+1])
int imagesize =buf.bytesused - i
DEBUG("buf.bytesused = %d \n",buf.bytesused)
DEBUG ("imagesize = %d \n",imagesize)
9. 停止视频的采集。VIDIOC_STREAMOFF
10. 关闭视频设备。close(fd)
1、安装samba服务:
新建用户,用于账号密码、
useradd share //添加前系统里必须有这个用户,要不会提示错误
smbpasswd -a 用户名 //建立用户名 //-a = 添加,-d=禁用,-e=启用,-x=删除。
smbpasswd *** //修改***密码
上面是基本方法,由linux基础的都会
apt-get install samba -y //安装 samba
cp /etc/samba/smb.conf /etc/samba/bak-smb.conf //备份配置文件mkdir /media/
vim /etc/samba/smb.conf //调整设置//编辑器出现问题时,请执行rm ~/.viminfo
/etc/init.d/samba restart //重启Samba生效
2、安装samba服务后,配置共享:
linux samba :设置:
[nvr]
comment = ipc share
path = /media
browseable = yes
writable = yes
public = yes
valid users = nvr
admin users = nvr
上面是配置文件。完成后 /etc/init.d/samba restart //重启Samba生效
samba部分也属于一节课目,不会的话需要学习哦。
3、在 摄像头配置→储存→储存管理→网络硬盘 :
4、然后进入硬盘管理,格式化即可。
热门频道首页
博客
研修院
VIP
APP
问答
下载
社区
推荐频道
活动
招聘
专题
打开CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved
打开APP
海康摄像头 NET_DVR_ALLOC_RESOURCE_ERROR 41 SDK资源分配错误 原创
2019-07-17 09:50:11
1点赞
lzzdflg
码龄6年
关注
海康摄像头可通过NET_DVR_Init()初始化,在NET_DVR_Login_V40时报错
出现错误为 NET_DVR_ALLOC_RESOURCE_ERROR 41 SDK资源分配错误
解决方案:
将海康SDK中库目录与头文件目录中所有内容,拷贝到项目的程序运行目录下(就是debug目录下有程序的exe)
打开CSDN APP,看更多技术内容
Android聚合SDK母包反编译出包教程_apk反编译合并_潇曜的博客
SDK2 的sdk2_strings.xml中包含<string name="app_name">xx2</string> 那么,就算两个SDK的资源文件名是不一样的,但是由于xml中包含相同的节点,到回编译时候还是会报错,所以,需要在资源合并时候把相同的节点处理掉,一种解决方...
继续访问
C++中的那些坑_CurtainXT的博客_c++ struct 的坑
void*buffer=malloc(-1)// 实际会分配0xFFFFFFFF... bytes 1 11.除0,浮点溢出,算0的平方根等算数错误会导致未定义行为(NaN计算结果),或者导致代码被意外优化掉,导致代码在Release下崩溃。
继续访问
最新发布 海康威视错误代码文档大全【完整版】
海康威视错误代码文档大全
继续访问
海康威视错误代码说明(三)(错误代码:31~46)
海康威视错误代码说明 3 错误代码及说明 网络通讯库错误码 (31~46) 这里有错误代码 31 、 32 、 33 、34 、 35 、 36 、37 、38 、 39 、40 、 41 、 42 、 43 、 44 、 45 、46 错误名称 错误值 说明 NET_DVR_DVRVOICEOPENED 31 设备语音对讲被占用。 NET_DVR_TIMEINPUTERRO...
继续访问
春季总结(二)_迷之程序员的博客
14、sdk 现在可以谈谈API和SDK的区别了。 15、_stdcall dllexport与dllimport 1、智能指针 【C++】智能指针详解_Billy12138的博客-CSDN博客_智能指针 深入实践C++11智能指针_code_peak的博客-CSDN博客 ...
继续访问
海康威视同步登陆预览控制及源码.rar
海康威视java二次开发,HCNetSDK线程安全初始化,NET_DVR_Login_V30同步登陆及预览云台控制,NET_DVR_Login_V40同步异步登录预览及控制,官放demo并未给出java如何使用NET_DVR_Login_V40方法登录,这里实现了NET_DVR_Login_V40登录,项目可直接导入eclipse运行,包含官方32及64位最新demo,如果能程序正常运行切能学到知识,请给五星好评
海康威视sdk错误码大全
技术交流QQ群933925017 /全局错误码 begin***/ public static final int NET_DVR_NOERROR = 0//没有错误 public static final int NET_DVR_PASSWORD_ERROR = 1//用户名密码错误 public static final int NET_DVR_NOENOUGHPRI = 2//权限不足 public static final int NET_DVR_NOINIT = 3//没有初始化 .
继续访问
4、Android SDK命令行工具AAPT2
AAPT2(Android 资源打包工具)是一个Android SDK构建工具,Android Studio 和 Android Gradle 插件使用它来编译和打包应用的资源。AAPT2 会解析资源、为资源编制索引,并将资源编译为针对 Android 平台进行过优化的二进制格式。 Android Gradle 插件 3.0.0 及更高版本默认情况下会启用 AAPT2,因此您通常不需要自行调用 aapt2。不过,如果您更愿意使用自己的终端和构建系统而不是 Android Studio,则可以从命令行使用
继续访问
海康威视(HIKVISION) JAVA SDK Demo成功运行
海康威视(HIKVISION) JAVA SDK Demo成功运行引子下载说明代码编译添加文件问题排查总结 引子 调海康的JAVA SDK花费时间较长,所以记录下,为其他小伙伴填填坑,提高一下效率。官方文档确实少,而且demo中的说明各种坑。 下载 官方SDK下载地址:https://www.hikvision.com/cn/download_more_570.html(64位SDK) 注意:官方...
继续访问
海康威视SDK接口调用的主要流程及预览模块
其中虚线框的流程是可选部分,不会影响其他流程和模块的功能使用。 初始化SDK(NET_DVR_Init):对整个网络SDK系统的初始化,内存预分配等 *** 作。 用户注册设备(NET_DVR_Login_V40):实现用户的注册功能,注册成功后,返回的用户ID作为其他功能 *** 作的唯一标识,SDK允许最大注册个数为2048个。就设备而言,V3.0以上版本支持的设备允许有32个注册用户名,而且同时最多...
继续访问
参数配置模块流程
一.配置压缩参数(NET_DVR_COMPRESSIONCFG_V30) #include <stdio.h>#include <iostream>#include "Windows.h" #include "HCNetSDK.h" using namespace stdvoid main() { //--------------------------------------- // 初始化 NET_DVR_Init()//设置连接时间与重连
继续访问
海康工业相机SDK错误码常见场景解析
海康工业相机SDK错误码常见场景解析
继续访问
Windows系统错误代码-----故障检测用
Microsoft Windows 系统错误代码 0000 *** 作已成功完成。 0001 错误的函数。 0002 系统找不到指定的文件。 0003 系统找不到指定的路径。 0004 系统无法打开文件。 0005 拒绝访问。 000...
继续访问
使用 Docker Client 和 Go SDK 为容器分配 GPU 资源
❝本文转自博客园,原文:https://www.cnblogs.com/joexu01/p/16539619.html,版权归原作者所有。欢迎投稿,投稿请添加微信好友:cloud-native-yang背景深度学习的环境配置通常是一项比较麻烦的工作,尤其是在多个用户共享的服务器上。虽然 conda 集成了 virtualenv 这样的工具用来隔离不同的依赖环境,但这种解决方案仍然没办法统一地分配计...
继续访问
记海康sdk linux下的使用
由于需要用到海康的测温摄像头,所以应用海康的sdk时,踩了不少坑,上一篇的linux下调用so就是由于海康而踩坑的,这篇详细介绍Linux下海康sdk的调用。方便以后遇到相似问题,也防止更多的人踩坑。 海康sdk的调用在windows下很简单。去官网找它的demo就好。 https://www.hikvision.com/cn/download_more_570.html 根据你自己的系统 *** 作位数下载相应demo就好。然后运行后,可以通过断点形式找到你想要的代码。复制到你的项目中即可,而这里我主要使用的.
继续访问
多路解码器模块流程
主动解码(包括动态解码和轮巡解码) #include <stdio.h>#include <string.h>#include <iostream>#include "Windows.h" #include "HCNetSDK.h" using namespace stdvoid main() { int i=0,j=0BYTE byDispMode//初始化SDK NET_DVR_Init()/
继续访问
海康威视SDK:NET_DVR_GetDVRConfig failed Device does not support this function
sdk开发
继续访问
【无标题】关于摄像头的学习
[DllImport(@"PlayCtrl.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "printHello")] public extern unsafe static void printHello()[DllImport(@"PlayCtrl.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint ...
继续访问
热门推荐 海康摄像SDK开发笔记(一):海康威视网络摄像头SDK介绍与模块功能
视频监控、人脸识别等应用中经常使用到摄像头,当前占据主流视频监控摄像头就是海康和大华两家,都可通过自家的sdk或者是onvif方式使用和控制摄像头。本文章讲解海康的sdk方式。
继续访问
海康设备注册一直失败的问题
今天用JAVA对接海康设备,但是注册一直失败,ip、端口、用户名、密码都是正确的,一直百思不得其解,后来一番查询与排错,终于找到了原因,是因为没有初始化设备 初始化设备的代码(红框里的部分): if (!hCNetSDK.NET_DVR_Init()) { System.out.println(MachineName + ":初始化失败")...
继续访问
海康威视(Hikvision)基于设备SDK中链接错误error LNK2019和error LNK2001
背景:公司要开发海康基于设备的视频模块,看到官网64和32两个版本SDK,在这个64位PC当道的年代,没思考直接下载64版本。按照提示全部安装完毕。 问题出现:所有代码写完后,编译发现报一下错误: error LNK2001:无法解析的外部符号,__imp__NET_DVR_StopRealPlay等等全部是海康的API函数接口 问题分析:所有的lib和dll路径和目录都是正确的,lib引用
继续访问
sdk资源分配错误
海康
写评论
1
3
1
踩
分享
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)