资源描述:
《视频监控开发文档》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、视频监控开发文档作者:杰洲村的木棉学校:广东工业大学QQ:568109894本文档是自己所整理的一份文档,部分是原创,还转贴了网上的一此资料(已经标明了),(难点是多线程的编写),是有源代码的,大家可以作为参考,用到的知识是视频采集,压缩解压(xvid),实时传输(jrtp),基于qt库所写的,由于本人对qt下的多线程还不很了解,只做了单线程的(采集-->压缩-->解压-->发送-->接收--显示),用timer来刷新视频播放窗口,现在正在研究多线程(代码还在整理中),以后再换成多线程(用qt4的多线程,因为qt4
2、的线程继承于QObject的,线程间可以使用signal-slot机制通信),建设先看看“linux下的tv播放器.doc(网上的资料)”一.把视频显示到界面的方法(1)针对qt4的(视频格式为rgb32)v4l_grab_movie(&v4l_dev);unsignedchar*pBuffer=v4l_dev.buffer;QImageimage(pBuffer,320,240,QImage::Format_RGB32);QPixmappixmap;pixmap=pixmap.fromImage(image);l
3、abel->setPixmap(pixmap);label->setFixedSize(pixmap.width(),pixmap.height());(2)针对qt3的1)格式为rgb32的QImage*img;unsignedchar*bit=image;setWFlags(getWFlags()
4、Qt::WRepaintNoErase);img=newQImage((uchar*)bit,MAX_WIDTH,MAX_HEIGHT,32,NULL,0,QImage::IgnoreEndian);bitBlt(t
5、his,0,0,img);2)格式为rgb24的intx,y;inti=0;#if0QLabel*label_time;QTimetime=QTime::currentTime();label_time=newQLabel(time.toString(),this,"label_time");label_time->setGeometry(5,250,160,31);label_time->setAlignment(QLabel::AlignCenter);#endifv4l_grab_movie(&v4l_dev
6、);QStringa;QStringd;QImageimg;unsignedchar*bit=v4l_dev.buffer;QRgb*point;intr,g,b;QPainterpaint;//该步很重要,设置标志//让QWidget在更新窗体时,不擦除原来的窗体//这样可以避免闪屏setWFlags(getWFlags()
7、Qt::WRepaintNoErase);if(img.create(MAX_WIDTH,MAX_HEIGHT,32,0,QImage::IgnoreEndian)){for(y=0;y8、AX_HEIGHT;y++){for(x=0;x9、metime=QTime::currentTime();a=time.toString();paint.drawImage(5,5,(img));paint.drawText(20,20,a,-1);paint.drawText(20,30,d,-1);paint.end();二.qt的多线程问题(qt4与qt3有线程是很大不同的)1)如果不用多线程,一般是通过QApplication的消息循环来处理的2)QThread本身是继承于QObject的,为线程间的signal-slot机制打下了基础(Qt4),而qt3
10、的线程不是继承于QObject,不能在线程间使用signal-slot机制(如QObject::connect(Thread,SIGNAL(Log(QString)),this,SLOT(Logslots(QString)))不能应用在qt3中,只能应用在qt4中)3)QObject本身和线程是没关系的,提供signal-slot机制相关信息三.事件和信号的