天嵌 ARM开发社区

 找回密码
 注册
查看: 4306|回复: 21

关于QT2440远程摄像头的数据传输问题

[复制链接]
ricowind 发表于 2013-4-9 17:00:52 | 显示全部楼层 |阅读模式
把论坛上有关摄像头的帖子都看了一遍,还是来阐述一下我的问题。求大家帮忙。
小弟现在在做我的毕业设计,目前需要从ARM上采集摄像头数据,然后发送到PC机上的服务器中显示。
板子是QT2440,摄像头是ZC301。服务器我也是在Windows下面用QT写的。
板子上面数据采集我已经用V4L和直接read函数读取两种方法实现了。
现在得问题主要是在传输上。
目前没有太多的思路。

自己尝试用QSocket(TCP)然后直接将采集到得数据通过Write函数发送。
(我点一次发送按钮发送一帧图片,服务器接收一张)
PC机能够正常的接收到图片。
一张图片我看流量监控是在75KB(320*240)。(的确挺大的)
但是如果发送图片过快(我连续点几次)
服务器就卡死,程序报内存错误。
因为我的图片没有进行压缩,也没有把图片分块传输。
我估计是出在网络上面,数据多了堵塞了。
QT2240如果要压缩貌似也只有软件压缩,还得占用CPU。

请问大家有没有好的传输方法。谢谢大家了。


 楼主| ricowind 发表于 2013-4-17 10:58:49 | 显示全部楼层
顶,没人理我~
cepoly 发表于 2013-4-17 11:16:11 | 显示全部楼层
本帖最后由 cepoly 于 2013-4-17 11:24 编辑
ricowind 发表于 2013-4-17 10:58
顶,没人理我~


视频传输我做过!你这样传输,开发板是吃不消的!!
还有你传输过程处理的不好!
我想听听你传输过程处理的方法!
我之前也像你那样传输,但不会崩溃,只是传输过久时,开发板会很热!
后来我采用有编码的摄像头,传输到pc端再解码播放,效果很好!

我像你那样传输大文件的做法是这样的:我把QSocket(TCP)独立出来,创建线程来发送,然后在pc端也是独立出来,只是在QT里面创建线程来打开(当时用了线程池在里面,所以有的图片来不及接收会舍弃的,但不会影响视频效果的)
 楼主| ricowind 发表于 2013-4-17 15:57:03 | 显示全部楼层
cepoly 发表于 2013-4-17 11:16
视频传输我做过!你这样传输,开发板是吃不消的!!
还有你传输过程处理的不好!
我想听听你传输过程 ...

因为没有找到很好的方法,传输的时候我并没有进行处理,直接发数据发过去了。
我尝试过把数据分块传输,但是没有成功。
我想请问您的摄像头具体是哪一款。然后编码方式是什么?
我现在头都晕了。

而且这两天准备转到6410上面去,发现各种驱动问题。还不如在2440做。
先万分感谢您的回答。
 楼主| ricowind 发表于 2013-4-17 16:39:55 | 显示全部楼层
cepoly 发表于 2013-4-17 11:16
视频传输我做过!你这样传输,开发板是吃不消的!!
还有你传输过程处理的不好!
我想听听你传输过程 ...

还想请教您,如果来不及接收被舍弃这里是怎么实现的呢?
5992230 发表于 2013-4-17 17:25:57 | 显示全部楼层
我最近也在搞这个,我用wifi发的,图像大小是320*240我是分块发的,编码我不太懂,不知道怎么才能压缩,你服务器端的程序报错是不是因为你在程序里有的地方没释放内存?
 楼主| ricowind 发表于 2013-4-17 17:44:16 | 显示全部楼层
5992230 发表于 2013-4-17 17:25
我最近也在搞这个,我用wifi发的,图像大小是320*240我是分块发的,编码我不太懂,不知道怎么才能压缩,你服 ...

噢噢?那您是怎么发送的呢?
压缩一般用的是H264,但是2440没有硬件支持,所以我没有压缩。直接使用的jpeg传送的。
报错是显示图片的时候报的错
ui->label->setPixmap(QPixmap::fromImage(*image,Qt::AutoColor));
我估计还是板子发送的数据不全导致的。
因为我不知道怎么检测数据的完整性,可能这里有点问题。
朋友,有问题还要多请教您。
5992230 发表于 2013-4-18 09:23:36 | 显示全部楼层
ricowind 发表于 2013-4-17 17:44
噢噢?那您是怎么发送的呢?
压缩一般用的是H264,但是2440没有硬件支持,所以我没有压缩。直接使用的jp ...

我是用UDP发的,没有用H264压缩,服务器这里我用VC++2008写的程序,图像用opencv库处理的,我觉得最好在虚拟机那里做下仿真,分块我是把要发的图片数据分成几块来发,比如采集到的数据地址为  (unsigned char *)dataaddress,数据长度为HEIGHT*WEIGHT*2(YUYV数据流),那么就分成HEIHT*WEIGHT*2/parts来发,parts是分成几部分的参数,其实这只是我的思路,我做仿真的时候是没问题的,最近在公司忙其他东西,我晚上回去试下效果看看如何再回来详细告诉你好吗?
cepoly 发表于 2013-4-18 14:21:33 | 显示全部楼层
ricowind 发表于 2013-4-17 15:57
因为没有找到很好的方法,传输的时候我并没有进行处理,直接发数据发过去了。
我尝试过把数据分块传输, ...

我之前是用:客户端板子QT2440,摄像头是ZC301。服务器我也是在Windows下面用QT写的,后来用编码方式的摄像头,服务器就在安卓手机上解码播放保存了!(我现在在公司,代码在学校)
数据分块传输问题:这个问题我也做过,但我处理的不好!!!会出现一大堆数据丢失或不全的图片
如果直接买有编码方式的摄像头,编码方式一般是标准型的H264,不过以你目前的状况,毕业设计应该是来不及了!
如果来不及接收被舍弃这里是怎么实现的呢?
re:发送端如果不采用反馈来约束,那么接收端来不及接收,就会阻塞,而且你的阻塞又没有进行处理。而线程池可以处理这个问题,池一边进水又一边放水,如果池水满,则抑制进水,等待池有容量空间(自己按板子性能设置)时,又继续进水,不断循环!所以说来不及接收的就会舍弃!
建议:你最好是把发送和接收各独立成一个模块!(我先找找,好像我U盘有,这两个tcp发送接收程序我一直在用,效果还挺好了,我也是拿别人的!明天来公司再上传)


cepoly 发表于 2013-4-18 14:32:24 | 显示全部楼层
5992230 发表于 2013-4-18 09:23
我是用UDP发的,没有用H264压缩,服务器这里我用VC++2008写的程序,图像用opencv库处理的,我觉得最好在虚 ...

你好,请问下你用opencv只是打开完整帧图片显示出来吧,如果把图片数据分成几块来发,那么是等待一帧图片数据完整了再显示吧。不知道我说的是否清楚,我之前是用opencv来处理图像的,而且图像都是一帧帧的处理。
5992230 发表于 2013-4-18 14:42:56 | 显示全部楼层
cepoly 发表于 2013-4-18 14:32
你好,请问下你用opencv只是打开完整帧图片显示出来吧,如果把图片数据分成几块来发,那么是等待一帧图片 ...

的确是等待一帧接收完再显示的,把分块的数据整成一帧再显示,请问下你的编码是怎么做的呢?我最近有些东西很赶,没时间研究编码这个
cepoly 发表于 2013-4-18 14:54:15 | 显示全部楼层
本帖最后由 cepoly 于 2013-4-18 14:55 编辑
5992230 发表于 2013-4-18 14:42
的确是等待一帧接收完再显示的,把分块的数据整成一帧再显示,请问下你的编码是怎么做的呢?我最近有些东 ...


请问下你的编码是怎么做的呢?
具体实现有点复杂,我用过两种编码和解码算法 DVC(基于Slepian-Wolf和Wyner-Ziv)和H264  这个都是我个人爱好,帮别人用这两种编码方式做了两个毕业设计。
最近有些东西很赶,没时间研究编码这个,你现在在公司做什么呢?我现在在公司做wince平台编程开发,你应该也是吧,可以交流下。
 楼主| ricowind 发表于 2013-4-18 19:20:58 | 显示全部楼层
cepoly 发表于 2013-4-18 14:21
我之前是用:客户端板子QT2440,摄像头是ZC301。服务器我也是在Windows下面用QT写的,后来用编码方式的摄 ...

坐等您的代码,线程这块我不太熟悉,我去研究一下。
夏雨 发表于 2013-4-18 19:53:01 | 显示全部楼层
坐等大神上传资料。
5992230 发表于 2013-4-18 22:10:10 | 显示全部楼层
cepoly 发表于 2013-4-18 14:54
请问下你的编码是怎么做的呢?
具体实现有点复杂,我用过两种编码和解码算法 DVC(基于Slepian-Wolf和 ...

我在弄ZigBee模块和TQ2440间串口通信,在看关于ZigBee的代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-6-29 03:09 , Processed in 1.046875 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表