plug2cam怎么设置大华nvr远程监控设置

后使用快捷导航没有帐号?
积分威望贡献
[V4L2+RTP] FireWRT远程视频监控-2
&&&& 浏览:1809
&只看该作者&
本帖最后由 代祥军 于
09:13 编辑
涉及的知识
V4L2采集视频数据
YUYV转化JPEG
RTP打包JPEG图片数据
socket发送
程序调用流程:
& && &usage-&init_sock/*判断参数,初始化套接字*/
& && &/*初始化V4L2*/& && &
& && &start_engine
& && && && &--&cam_init& &/*给struct cam 分配内存,并且初始化cam结构体*/
& && && && &--& v4l2_init&&
& && && && && && & --&open_camera& &/*打开摄像头*/
& && && && && && & --&init_camera& && &/*初始化摄像头*/
& && && && && && & --&start_capturing /*开始采集图像*/
& && && && & --&create_cam_pthread
& && && && && && & --&pthread_create:capture_encode_thread 创建线程
& && && && && && && &&&--&capture_encode_thread
& && && && && && && && && &--&while:& &循环
& && && && && && && && && && & --&read_frame 读一帧数据
& && && && && && && && && && && &&&--& jpeg_rtp&&如果采集的数据时jpeg直接rtp打包发送
& && && && && && && && && && && && && &&&--&send_jpeg_rtp_for_fmt_mjpeg&&设rtp某些动态参数
& && && && && && && && && && && && && && && &&&--&SendFrame& && && && && && & rtp打包 socket发送VLC
& && && && && && && && && && & --&jpeg_encode_yuyv422_rtp& && && && && && && &&&如果采集的视频数据时yuyv先转化为jepg在rtp打包发送
& && && && && && && && && && && && &--&yuyv422torgb& && && && && && && && &&&将yuyv数据装化为RGB
& && && && && && && && && && && && && &&&--&encode_rgb_to_jpeg_mem& && & RGB转化为jpeg放到内存
& && && && && && && && && && && && && && && &--&send_jpeg_rtp& && && && && && && && && &设置rtp参数
& && && && && && && && && && && && && && && && &&&--&SendFrame& && && && && && &rtp打包数据发送
& && &当按下ctrl+c时:stop_engine()
2.V4L2采集视频数据
video_capture.c
涉及的结构体:
struct buffer{
& & void *
& & size_
};
struct camera{
& & char *device_//设备名字 /dev/videoX
& &//摄像头句柄
& &//输出的视频宽度
& &//高度
& & int display_
& & int image_//一帧数据大小
& & int frame_
& & int support_//摄像头支持的格式如果支持Jpeg就以此获得数据,如果只支持yuyv就输出yuyv在用程序转化为jpeg
& & unsigned int n_//缓冲区个数
& & struct v4l2_capability v4l2_
& & struct v4l2_cropcap v4l2_
& & struct v4l2_format v4l2_
& & struct v4l2_crop v4l2_
& & struct v4l2_fmtdesc v4l2_
& & struct v4l2_streamparm v4l2_
& & struct buffer *
};
/*上面参数fmt_select选择*/
#define FMT_JPEG& & 0x101
#define FMT_YUYV422 0x102
#define FMT_YUYV420 0x104复制代码涉及的函数:
funtions_v4l2.png (10.95 KB, 下载次数: 8)
14:36 上传
/*外界接口*/
void v4l2_init(struct camera *cam)
{
& & open_camera(cam);
& & init_camera(cam);
& & start_capturing(cam);
}复制代码2.1 open_camera 打开摄像头
/*摄像头操作函数*/
static void open_camera(struct camera *cam)
{
& &
& & if (-1 == stat(cam-&device_name, &st)) {
& && &&&fprintf(stderr, &Cannot identify '%s': %d, %s\n&, cam-&device_name,errno, strerror(errno));
& && &&&exit(EXIT_FAILURE);
& & }
& & if (!S_ISCHR(st.st_mode)) {
& && &&&fprintf(stderr, &%s is no device\n&, cam-&device_name);
& && &&&exit(EXIT_FAILURE);
& & }
& & cam-&fd = open(cam-&device_name, O_RDWR, 0); //&&| O_NONBLOCK 打开摄像头 记录fd
& & if (-1 == cam-&fd) {
& && &&&fprintf(stderr, &Cannot open '%s': %d, %s\n&, cam-&device_name, errno,strerror(errno));
& && &&&exit(EXIT_FAILURE);
& & }
}复制代码
2.2 init_camera 初始化摄像头
static void init_camera(struct camera*cam)
{
& & struct v4l2_capability&&*cap& && &&&= &(cam-&v4l2_cap);
& & struct v4l2_cropcap& &&&*cropcap& & = &(cam-&v4l2_cropcap);
& & struct v4l2_crop& && &&&*crop& && & = &(cam-&v4l2_crop);
& & struct v4l2_format& && &*fmt& && &&&= &(cam-&v4l2_fmt);
& & struct v4l2_fmtdesc& &&&*fmtdesc& & = &(cam-&v4l2_fmtdesc);
& & struct v4l2_streamparm&&*streamparm = &(cam-&v4l2_setfps);
& &
& & struct v4l2_
& &
& & int pos = -1;
& & /*1.查询设备属性*/
& & if (-1 == xioctl(cam-&fd, VIDIOC_QUERYCAP, cap)) {
& && &&&if (EINVAL == errno) {
& && && && &fprintf(stderr, &%s is no V4L2 device\n&, cam-&device_name);
& && && && &exit(EXIT_FAILURE);
& && &&&}else
& && && && &errno_exit(&VIDIOC_QUERYCAP&);
& & }
& & /*2.是否支持图像获取*/
& & if (!(cap-&capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
& && &&&fprintf(stderr, &%s is no video capture device\n&, cam-&device_name);
& && &&&exit(EXIT_FAILURE);
& & }
& & /*3.查询设备是否支持流输出*/
& & if (!(cap-&capabilities & V4L2_CAP_STREAMING)) {
& && &&&fprintf(stderr, &%s does not support streaming i/o\n&,cam-&device_name);
& && &&&exit(EXIT_FAILURE);
& & }
#ifdef OUTPUT_CAMINFO
& & printf(&VIDOOC_QUERYCAP\n&);
& & printf(&driver:\t\t%s\n&,cap-&driver);
& & printf(&card:\t\t%s\n&,cap-&card);
& & printf(&bus_info:\t%s\n&,cap-&bus_info);
& & printf(&version:\t%d\n&,cap-&version);
& & printf(&capabilities:\t%x\n&,cap-&capabilities);
#endif
& & /*打印摄像头支持的格式*/
& & fmtdesc-&index = 0;
& & fmtdesc-&type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
#ifdef OUTPUT_CAMINFO
& & printf(&support format:\n&);
#endif
& & while(ioctl(cam-&fd,VIDIOC_ENUM_FMT,fmtdesc) != -1){
#ifdef OUTPUT_CAMINFO
& && &&&printf(&\t%d,%s\n&,fmtdesc-&index+1,fmtdesc-&description);
#endif
& && &&&/*4.查看摄像头输出的 视频格式 jpeg yuyv420 yuyv422*/
& && &&&pos = find_string(fmtdesc-&description,&JPEG&);
& && &&&if(pos != -1){
& && && && &cam-&support_fmt |= FMT_JPEG;
& && && && &goto CON;
& && &&&}& &
& && &&&pos = find_string(fmtdesc-&description,&4:2:2&);
& && &&&if(pos!=-1){
& && && && &cam-&support_fmt |= FMT_YUYV422;
& && && && &goto CON;
& && &&&}& &
& && &&&pos = find_string(fmtdesc-&description,&4:2:0&);
& && &&&if(pos!=-1){
& && && && &cam-&support_fmt |= FMT_YUYV420;
& && && && &goto CON;
& && &&&}& &
CON:
& && &&&fmtdesc-&index++;
& & }
& & /*5.设置输出格式*/
& & CLEAR(*cropcap);
& & cropcap-&type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
& & /*v4l2_cropcap 结构体用来设置摄像头的捕捉能力,在捕捉上视频时应先先设置v4l2_cropcap 的 type 域,再通过 VIDIO_CROPCAP 操作命令获取设备捕捉能力的参数,保存于 v4l2_cropcap 结构体中,包括 bounds(最大捕捉方框的左上角坐标和宽高),defrect(默认捕捉方框的左上角坐标和宽高)等。v4l2_format 结构体用来设置摄像头的视频制式、帧格式等,在设置这个参数时应先填 好 v4l2_format 的各个域,如 type(传输流类型),fmt.pix.width(宽),fmt.pix.heigth(高),fmt.pix.field(采样区域,如隔行采样),fmt.pix.pixelformat(采
样类型,如 YUV4:2:2),然后通过 VIDIO_S_FMT 操作命令设置视频捕捉格式*/
& & crop-&c.width = cam-&
& & crop-&c.height = cam-&
& & crop-&c.left = 0;
& & crop-&c.top = 0;
& & crop-&type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
& &
& & CLEAR(*fmt);
& & fmt-&type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
& & fmt-&fmt.pix.width = cam-&
& & fmt-&fmt.pix.height = cam-&
& & if( (cam-&support_fmt & FMT_JPEG) == FMT_JPEG){
& && &&&fmt-&fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;
& && &&&cam-&support_fmt = FMT_JPEG;/*记录设备输出的图像格式*/
& & }
& & else if((cam-&support_fmt & FMT_YUYV422) == FMT_YUYV422){
& && &&&fmt-&fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
& && &&&cam-&support_fmt = FMT_YUYV422;
& & }
& & else if( (cam-&support_fmt & FMT_YUYV420 ) == FMT_YUYV420 ){
& && &&&fmt-&fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
& && &&&cam-&support_fmt = FMT_YUYV420;
& & }
& & else
& && &&&errno_exit(&no support fmt&);
& & fmt-&fmt.pix.field = V4L2_FIELD_INTERLACED;
& &
& & if (-1 == xioctl(cam-&fd,VIDIOC_S_FMT,fmt))
& && &&&errno_exit(&VIDIOC_S_FMT fail&);
& && &&&
#if 1
& & CLEAR(*streamparm);
& & streamparm-&type=V4L2_BUF_TYPE_VIDEO_CAPTURE;
& & streamparm-&parm.capture.timeperframe.numerator& &= 1;
& & streamparm-&parm.capture.timeperframe.denominator = 25;
& & if(-1==xioctl(cam-&fd,VIDIOC_S_PARM,streamparm))
& && &&&errno_exit(&VIDIOC_S_PARM&);
#endif
& & min = fmt-&fmt.pix.width * 2;/*YUYV 每个像素占用2个字节*/
& & if (fmt-&fmt.pix.bytesperline & min)
& && &&&fmt-&fmt.pix.bytesperline =
& &
& & min = fmt-&fmt.pix.bytesperline * fmt-&fmt.pix.
& & if (fmt-&fmt.pix.sizeimage & min)
& && &&&fmt-&fmt.pix.sizeimage =
& &
& & /*6.分配内存,映射内存*/
& & CLEAR(req);
& & req.count = 4;
& & req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
& & req.memory = V4L2_MEMORY_MMAP;
& &
& & if (-1 == xioctl(cam-&fd, VIDIOC_REQBUFS, &req)) {
& && &&&if (EINVAL == errno) {
& && && && &fprintf(stderr, &%s does not support &
& && && && && && &&&&memory mapping\n&, cam-&device_name);
& && && && &exit(EXIT_FAILURE);
& && &&&} else
& && && && &errno_exit(&VIDIOC_REQBUFS&);
& & }
& & if (req.count & 2) {
& && &&&fprintf(stderr, &Insufficient buffer memory on %s\n&, cam-&device_name);
& && &&&exit(EXIT_FAILURE);
& & }
& & cam-&buffers = calloc(req.count, sizeof(*(cam-&buffers)));
& & if (!cam-&buffers) {
& && &&&fprintf(stderr, &Out of memory\n&);
& && &&&exit(EXIT_FAILURE);
& & }
& & for(cam-&n_buffers = 0;cam-&n_buffers & req.cam-&n_buffers++){
& && &&&struct v4l2_
& && &&&CLEAR(buf);
& && &&&buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
& && &&&buf.memory = V4L2_MEMORY_MMAP;
& && &&&buf.index = cam-&n_
& && &&&if (-1 == xioctl(cam-&fd, VIDIOC_QUERYBUF, &buf))
& && && && &errno_exit(&VIDIOC_QUERYBUF&);
& && &&&
& && &&&cam-&buffers[cam-&n_buffers].length = buf.
/*映射内存*/
& && &&&cam-&buffers[cam-&n_buffers].start = mmap(NULL /* start anywhere */,buf.length, PROT_READ | PROT_WRITE /* required */,MAP_SHARED /* recommended */, cam-&fd, buf.m.offset);
& &
& && &&&if (MAP_FAILED == cam-&buffers[cam-&n_buffers].start)
& && && && &errno_exit(&mmap&);
& & }
}复制代码2.3 start_capturing 开始图像采集
static void start_capturing(struct camera *cam)
{
& &
& & enum v4l2_buf_
& & for (i = 0; i & cam-&n_ ++i) {
& && &&&struct v4l2_
& && &&&CLEAR(buf);
& && &&&/*1.将内存放入缓冲区*/
& && &&&buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
& && &&&buf.memory = V4L2_MEMORY_MMAP;
& && &&&buf.index =
& && &&&if (-1 == xioctl(cam-&fd, VIDIOC_QBUF, &buf))
& && && && &errno_exit(&VIDIOC_QBUF&);
& & }
& & type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
/*2.开始传输采集图像*/
& & if (-1 == xioctl(cam-&fd, VIDIOC_STREAMON, &type))
& && &&&errno_exit(&VIDIOC_STREAMON&);
}复制代码2.3 read_frame 读一帧数据
int read_frame(struct camera *cam,unsigned char *buffer,int *len/*数据大小*/)
{
& & fd_
& &
& &
& & struct v4l2_
& &
& & FD_ZERO(&fds);
& & FD_SET(cam-&fd,&fds);
& & tv.tv_sec&&= 2;
& & tv.tv_usec = 0;
& & r = select(cam-&fd+1,&fds,NULL,NULL,&tv);/*查询是否有数据*/
& & if(-1 == r){
& && &&&if(EINTR == errno)
& && && && &return 1;//表示应该继续读
& && &&&errno_exit(&select&);
& & }
& & if(0 == r){
& && &&&fprintf(stderr,&select timeout&);
& && &&&exit(EXIT_FAILURE);
& & }
& &
& & CLEAR(buf);
& &
& & buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
& & buf.memory = V4L2_MEMORY_MMAP;
& && &&&if (-1 == xioctl(cam-&fd, VIDIOC_DQBUF, &buf)) {/*从内核环形缓冲区取出一帧数据*/
& && && && &switch (errno) {
& && && && && & case EAGAIN:
& && && && && && &&&return -1;
& && && && && & case EIO:
& && && && && & default:
& && && && && & errno_exit(&VIDIOC_DQBUF&);
& && && && &}
& && &&&}
& & memcpy(buffer,(unsigned char *)cam-&buffers[buf.index].start,buf.bytesused);/*将采集的一帧数据放到自定义的buffer中*/
& & //printf(&cam-&n_buffers=%d\nbuf.index=%d\nbuf.bytesused=%d\n&,cam-&n_buffers,buf.index,buf.bytesused);
& & *len = buf.
& & if (-1 == xioctl(cam-&fd, VIDIOC_QBUF, &buf))/*放回环形缓冲区*/
& && &&&errno_exit(&VIDIOC_QBUF&);
& & dbug(&video QBUF&);
& & return 0;//成功
}
复制代码
积分威望贡献
技术小白, 积分 9, 距离下一级还需 191 积分
技术小白, 积分 9, 距离下一级还需 191 积分
&只看该作者&
来的挺早的,,,哈哈哈,,来了就是论坛元老了。。。。
积分威望贡献
&只看该作者&
来的挺早的,,,哈哈哈,,来了就是论坛元老了。。。。
恩,是呀,你也来几张帖子哇
积分威望贡献
技术小白, 积分 7, 距离下一级还需 193 积分
技术小白, 积分 7, 距离下一级还需 193 积分
&只看该作者&
这个只能用在FireWRT上吗?可以用到rk3288上吗?
积分威望贡献
技术小白, 积分 20, 距离下一级还需 180 积分
技术小白, 积分 20, 距离下一级还需 180 积分
&只看该作者&
完全不清楚哪些函数的头文件啊,求头文件来源。
积分威望贡献
技术小白, 积分 14, 距离下一级还需 186 积分
技术小白, 积分 14, 距离下一级还需 186 积分
&只看该作者&
请问这个板子的能支持 usb 3.0 接口的uvc 摄像头吗?
积分威望贡献
技术小白, 积分 10, 距离下一级还需 190 积分
技术小白, 积分 10, 距离下一级还需 190 积分
&只看该作者&
积分威望贡献
技术小白, 积分 9, 距离下一级还需 191 积分
技术小白, 积分 9, 距离下一级还需 191 积分
&只看该作者&
这个只能用在FireWRT上吗
积分威望贡献
技术小白, 积分 6, 距离下一级还需 194 积分
技术小白, 积分 6, 距离下一级还需 194 积分
&只看该作者&
我的编译不过啊,undefined reference to `jpeg_mem_dest'
Copyright & 2014 Firefly. All Rights Reserved.
产品分销 &: sales@
样板申请 &: apply@
行业定制 &: product@
教育用户 &: education@
联系电话 &: (+86)
FireNow &: fn.service@
FireSmart &: fs.service@
FireLink &: fl.service@
综合支持 &: service@
交流群(QQ) &:
友情链接 :法律声明:本站只提供信息交流平台,交易者自行分辨真假,如有损失,本站概不负责。
哈哈IT网-渠道平台 & Copyright 2008- 豫ICP备号 增值电信业务经营许可证 豫B2-如何设置H.264录像机远程监控_百度知道
如何设置H.264录像机远程监控
提问者采纳
设置DVR机的IP参数,如果是IE加载ACTIVEX插件来监控的话,一般远程监控有两种方式。这里有个要注意的地方,需要针对不同的方式映射不同的端口3 在远程电脑上输入DVR机的WAN口IP地址已经相应的参数就可以连接了,然后在“自定义级别”里面将“ActiveX控件及插件&#47:IE的activex插件监控和客户端软件的远程监控,有关ActiveX的选项全部设置为启用/security”---点击“internet”
c,那么建议在 aIE浏览器的internet选项ActiveX controls and plug-ins”下面,点击“安全&#47,IP地址 子网掩码 网关都要和DVR机所接的路由器的IP参数要对应2 设置路由器的端口映射
提问者评价
其他类似问题
为您推荐:
其他1条回答
给硬盘录像机设置给本地IP及端口,然后在路由内将该地址及端口号映射到花生壳域名或IP地址,然后通过该域名或IP地址就可以远程访问了。
我是菜鸟 给个图解 谢谢
您可能关注的推广
远程监控的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁君,已阅读到文档的结尾了呢~~
硬盘录像机DVR,远程监控网络设..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
硬盘录像机DVR,远程监控网络设置,花生壳,希网,3322,使
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 海康威视远程监控设置 的文章

 

随机推荐