最近要把那个usb摄像头简单做成一个网络摄像头

板子里的服务端暂时用的c,客户端用的qt

现在的传输方式是:

两个线程,一个负责采集图像数据,然后转换格式压缩成jpeg文件,一个320*240的图片平均4k,如果图像鲜明会多一点。另一个线程负责建立

socket然后传输图像数据,图像数据首先传输这帧图像的大小,blocksize,然后传输图像数据,在这个连接上不停地循环发送

客户端就进行接受显示就行了,没什么问题

采集图像的处理大致如下:

convmap = malloc ( 320 * 240 * bytes );

v4l_yuv420p2rgb (convmap, map + grab_buf.offsets[frame], 320, 240, bytes * 8);

//map + grab_buf.offsets[frame]为usb摄像头采集的一帧图像地址,convmap为处理后的格式地址

out = fopen ("grab.jpeg", "wb");

if (!out) {

perror ("grab.jpeg");

return 1;

}

put_image_jpeg (out, convmap, 320, 240, 50, 4);//用libjpeg处理后压缩存为grab.jpeg文件

free(convmap);

fclose(out);

在数据发送线程程序如下:

while(1)

{

//判断grab.jpeg是否存在,存在则用rename改名然后传输,防止在传输过程中图片数据被采集线程修改

while( stat("grab.jpeg", &buf) < 0)

{

// perror("stat");

usleep(40000);

}

if( (fd = rename("grab.jpeg","temp.jpeg")) < 0)

perror( "rename" );

if( (fd = stat("temp.jpeg",&buf)) < 0 )

perror("stat temp.jpeg");

printf("buf.size=%d\n",buf.st_size);

//发送此帧图片的blocksize,new_fd为socket文件描述符

if( (fd = send( new_fd, &buf.st_size, sizeof(off_t), 0 )) < 0 )

perror("send blocksize");

//发送图片数据

if( (fd = open( "temp.jpeg", O_RDONLY )) < 0 )

perror("open img");

while( ( nread = read( fd, buff, MAXDATASIZE ) ) > 0 )

{

if( send( new_fd, buff, nread, 0 ) == -1 )

perror( "send\n" );

}

close( fd );

}//不关闭socket继续发送数据

这段程序在我的pc机上测试没有问题,昨天测试了一夜数据传输都没有错,只不过在有时候blocksize为0,我估计原因是在采集线程

fopen之后还没来得及写数据就被我rename了,还没时间测试,今天早上出来的路上想起的这个原因,晚上回去看看,将while(

stat("grab.jpeg", &buf) < 0)改为while( (stat("grab.jpeg",

&buf) < 0) && (buf.st_size == 0) )

但在我的板子上采集问题就大了,传输的blocksize总为0或者4096,也就是当temp.jpeg的大小不为4096的时候stat得

到的值为0,如果大小为4096又正确。我在板子上采集的同时写了个小程序每隔一秒钟stat

temp.jpeg然后输出大小的值又正确不总是4096是正常值,所以就迷惑了

我不知道4096是个什么特殊的值,并且有个问题就是用libjpeg库压缩的时候如果得到的size为4096时是一帧不完整的图像,其他都是好的,也还没有时间去分析

用rename是为了文件互斥,用信号量应该好一些不过我暂时不会,所以昨天找到rename这个函数作为权宜之计,有时间再来研究信号量什么的

还有几个问题想问一下

1.在一般的网络条件下,我先发送的数据应该会先到基本不会数据错误吧。因为我没有加任何校验位什么的,这个如果有必要再来研究。我们校园网网络条件好,昨天测试了一夜没有出问题

2.有没有什么提高效率的方式?我在这个版本之前写的是一个socket传送一帧图像然后在client显示,在板子上采集时可以看到图像就是比

较慢,大约只有3fps,现在一个socket上一直不停地传送就是为了试验效率的,结果遇到了这个问题。现在我感觉是在图像压缩和转换上花费的时间多,

准备找时间去买一个支持RGB格式的摄像头,然后可以省掉v4l_yuv420p2rgb这步,不过需要移植驱动了,所以一直没有去做。由于编程经验很有

限,也刚涉及编程领域,所以请大家多多指教

多谢

--------------------

最光荣的牺牲,是英雄的宿命。

文章选项:

linux查看网络摄像头,用网络查看usb摄像头的图像相关推荐

  1. php调用linux摄像头,Linux_Linux中开发USB摄像头驱动详解,USB摄像头以其良好的性能和低 - phpStudy...

    Linux中开发USB摄像头驱动详解 USB摄像头以其良好的性能和低廉的价格得到广泛应用.同时因其灵活.方便的特性,易于集成到嵌入式系统中.但是如果使用现有的符合Video for Linux标准的驱 ...

  2. java usb摄像头_Android中多USB摄像头解决方案——UVCCamera源码分析(一)

    前言 前段时间捣鼓多USB摄像头的方案,一阵手忙脚乱算是勉强跑起来了.整个流程主要还是依赖于网上大神们封装好的库.之前想仔细分析一下整套底层实现,然而一直拖到现在--也没有完全看完,于是想着干脆分阶段 ...

  3. android usb 摄像头 分辨率,Android 驱动USB摄像头

    最近有个需求,要用android 来驱动外部usb摄像头.emmmmmmm......  港真,突然听到这么个需求,有点蒙~~于是google github转有没有类似需求的文章.诶嘿 还真有. 还有 ...

  4. 提问:usb摄像头无输出画面 /window下能识别摄像头,无输出图像拍摄时提示0XA00F4292(PhotoCaptureStartTimeout) /linux下不能识别

    硬背景:19年1月份购入两台1920x1080usb摄像头,闲置了很久,两个月前带回家以备不时之需,中途放在书包里可能有挤压置坏的可能性. 软背景:在linux下编译apriltag(计算机视觉二位合 ...

  5. 树莓派红外线报警c语言,【BASH SCRIPT】在树莓派上用HC-SR501红外感应器触发USB摄像头拍照...

    5-1假期闲的没事继续折腾树莓派.这次是尝试模拟一个防盗报警器,用HC-SR501 被动红外动作感应器 (Passive Infrared/PIR motion sensor)来触发USB camer ...

  6. 自己动手做一个USB摄像头--转载

    手里有一块AT32的开发板和一个OV2640摄像头模块,因为做智能车模型需要一个摄像头,就想能不能废物利用一下,用这俩做一个即插即用的USB摄像头,能够直接用在树莓派的Linux系统上,而不需要在Li ...

  7. 用STM32+OV2560自己做一个USB摄像头

    手里有一块AT32的开发板和一个OV2640摄像头模块,因为做智能车模型需要一个摄像头,就想能不能废物利用一下,用这俩做一个即插即用的USB摄像头,能够直接用在树莓派的Linux系统上,而不需要在Li ...

  8. 1.gstreamer USB摄像头保存至图片及视频

    目录 1.操作系统版本 2.USB摄像头驱动 3.usb摄像头预览 4.采集USB摄像头保存至图片 5.采集USB摄像头保存至mp4文件 1.操作系统版本 使用的虚拟机加ubuntu 20.04 2. ...

  9. android yuy2,Android使用USB摄像头拍照yuy2转jpeg

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? #说明 由于项目需要,使用通用的usb摄像头进行拍照,这样成本低且比较通用,市面上一大堆支持yuv的usb摄像头.而且l ...

  10. 【踩坑】Rock5B测试USB摄像头和安装OpenCV

    一.环境与说明 版本 Rock5B V1.42 系统 官方Debian11(2022-10-01版本) 摄像头 UVC免驱USB摄像头 OpenCV 4.5.4.60 和树莓派使用usb摄像头有一点区 ...

最新文章

  1. Annotation
  2. 针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言477-486条如下:
  3. 中国首份AI落地白皮书发布!地方政府规模大,金融领域最积极,北京供给超上海深圳总和...
  4. HTML5的新特性----拖放功能
  5. macbook Pro 上安装Windows 的方法(双系统运行)
  6. 获取浏览器屏幕高度(js,jq) - 进击的小牛牛 - 博客园
  7. mysql connection是什么_记一次MySQL出现too many connection
  8. 刘挺 | 从知识图谱到事理图谱
  9. c语言小游戏 贴吧,【图片】C语言小游戏~贪吃蛇【c语言吧】_百度贴吧
  10. 函数嵌套和nonlocal声明
  11. 350网店模板一键安装模版与淘宝传统装修的对比
  12. WPF 背景透明文本不透明
  13. 计算机系统结构名词解释及简答题参考
  14. edp和edt哪个好_香水edt和edp的区别
  15. Python练习——基础练习题1
  16. LogLoss的公式演化
  17. QXlsx(访问Excel)
  18. 银行管理系统(使用SQL Server)-Python快速编程入门(第2版)-人民邮电出版社-阶段案例
  19. python中如何判断一个字符串是否可以转换为数字
  20. 高斯羽烟gis应用java实现模型计算

热门文章

  1. 通过 Colab 下载 Google Driver 上的大文件到内网服务器
  2. 2021-2027中国无霜翅片蒸发器市场现状及未来发展趋势
  3. AcWing 102. 最佳牛围栏(二分、前缀和)
  4. CMMI与ASPICE 在汽车产品开发上的异同
  5. 索引推荐神器Paw Index Advisor使用手册(2)-语法支持
  6. 浏览器性能对比测试方法与评价模型研究
  7. Unity使用Gradle打包方式接入Firebase时配置文件google-services.json遇到的坑
  8. 李开复写给中国大学生的七封信(7/7)
  9. yjk的波库在哪里_[稀有资源]盈建科YJK地震波文件
  10. 2021-08-02MarKdown语法