linux查看网络摄像头,用网络查看usb摄像头的图像
最近要把那个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摄像头的图像相关推荐
- php调用linux摄像头,Linux_Linux中开发USB摄像头驱动详解,USB摄像头以其良好的性能和低 - phpStudy...
Linux中开发USB摄像头驱动详解 USB摄像头以其良好的性能和低廉的价格得到广泛应用.同时因其灵活.方便的特性,易于集成到嵌入式系统中.但是如果使用现有的符合Video for Linux标准的驱 ...
- java usb摄像头_Android中多USB摄像头解决方案——UVCCamera源码分析(一)
前言 前段时间捣鼓多USB摄像头的方案,一阵手忙脚乱算是勉强跑起来了.整个流程主要还是依赖于网上大神们封装好的库.之前想仔细分析一下整套底层实现,然而一直拖到现在--也没有完全看完,于是想着干脆分阶段 ...
- android usb 摄像头 分辨率,Android 驱动USB摄像头
最近有个需求,要用android 来驱动外部usb摄像头.emmmmmmm...... 港真,突然听到这么个需求,有点蒙~~于是google github转有没有类似需求的文章.诶嘿 还真有. 还有 ...
- 提问:usb摄像头无输出画面 /window下能识别摄像头,无输出图像拍摄时提示0XA00F4292(PhotoCaptureStartTimeout) /linux下不能识别
硬背景:19年1月份购入两台1920x1080usb摄像头,闲置了很久,两个月前带回家以备不时之需,中途放在书包里可能有挤压置坏的可能性. 软背景:在linux下编译apriltag(计算机视觉二位合 ...
- 树莓派红外线报警c语言,【BASH SCRIPT】在树莓派上用HC-SR501红外感应器触发USB摄像头拍照...
5-1假期闲的没事继续折腾树莓派.这次是尝试模拟一个防盗报警器,用HC-SR501 被动红外动作感应器 (Passive Infrared/PIR motion sensor)来触发USB camer ...
- 自己动手做一个USB摄像头--转载
手里有一块AT32的开发板和一个OV2640摄像头模块,因为做智能车模型需要一个摄像头,就想能不能废物利用一下,用这俩做一个即插即用的USB摄像头,能够直接用在树莓派的Linux系统上,而不需要在Li ...
- 用STM32+OV2560自己做一个USB摄像头
手里有一块AT32的开发板和一个OV2640摄像头模块,因为做智能车模型需要一个摄像头,就想能不能废物利用一下,用这俩做一个即插即用的USB摄像头,能够直接用在树莓派的Linux系统上,而不需要在Li ...
- 1.gstreamer USB摄像头保存至图片及视频
目录 1.操作系统版本 2.USB摄像头驱动 3.usb摄像头预览 4.采集USB摄像头保存至图片 5.采集USB摄像头保存至mp4文件 1.操作系统版本 使用的虚拟机加ubuntu 20.04 2. ...
- android yuy2,Android使用USB摄像头拍照yuy2转jpeg
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? #说明 由于项目需要,使用通用的usb摄像头进行拍照,这样成本低且比较通用,市面上一大堆支持yuv的usb摄像头.而且l ...
- 【踩坑】Rock5B测试USB摄像头和安装OpenCV
一.环境与说明 版本 Rock5B V1.42 系统 官方Debian11(2022-10-01版本) 摄像头 UVC免驱USB摄像头 OpenCV 4.5.4.60 和树莓派使用usb摄像头有一点区 ...
最新文章
- Annotation
- 针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言477-486条如下:
- 中国首份AI落地白皮书发布!地方政府规模大,金融领域最积极,北京供给超上海深圳总和...
- HTML5的新特性----拖放功能
- macbook Pro 上安装Windows 的方法(双系统运行)
- 获取浏览器屏幕高度(js,jq) - 进击的小牛牛 - 博客园
- mysql connection是什么_记一次MySQL出现too many connection
- 刘挺 | 从知识图谱到事理图谱
- c语言小游戏 贴吧,【图片】C语言小游戏~贪吃蛇【c语言吧】_百度贴吧
- 函数嵌套和nonlocal声明
- 350网店模板一键安装模版与淘宝传统装修的对比
- WPF 背景透明文本不透明
- 计算机系统结构名词解释及简答题参考
- edp和edt哪个好_香水edt和edp的区别
- Python练习——基础练习题1
- LogLoss的公式演化
- QXlsx(访问Excel)
- 银行管理系统(使用SQL Server)-Python快速编程入门(第2版)-人民邮电出版社-阶段案例
- python中如何判断一个字符串是否可以转换为数字
- 高斯羽烟gis应用java实现模型计算
热门文章
- 通过 Colab 下载 Google Driver 上的大文件到内网服务器
- 2021-2027中国无霜翅片蒸发器市场现状及未来发展趋势
- AcWing 102. 最佳牛围栏(二分、前缀和)
- CMMI与ASPICE 在汽车产品开发上的异同
- 索引推荐神器Paw Index Advisor使用手册(2)-语法支持
- 浏览器性能对比测试方法与评价模型研究
- Unity使用Gradle打包方式接入Firebase时配置文件google-services.json遇到的坑
- 李开复写给中国大学生的七封信(7/7)
- yjk的波库在哪里_[稀有资源]盈建科YJK地震波文件
- 2021-08-02MarKdown语法