【技术应用】用QT编写的视频监控界

 

【技术应用】用QT编写的视频监控界面

http://blog.csdn.net/dongliqiang2006/article/details/4973092          1027人阅读  评论(1)  收藏  举报

本例是用QT编写的视频监控界面。由主窗口的两个按钮可以分别调用观看两个摄像头的视频内容。加主线程共3个线程。两个视频显示窗口用Qtimer 来控制。视频图片显示使用lable控件。此程序主要讲解本地图片多线程传输,暂时不用多次刷新显示连续帧。待USB冲突解决后方可实现。

Client端:

    用QT设计界面。其中包括main.cpp, mainWindow_main.cpp, video_thread1.cpp, video_thread2.cpp, video_client.cpp及其对应的*.h文件。

     1.mainWindow_main.cpp

     此为主窗口的功能实现代码。该主窗口包含两个pushButton, 点击按钮pushBtn_video1则调用video_thread1.cpp, 点击按钮pushBtn_video2则调用video_thread2.cpp.

该mainWindow_main.cpp功能实现很简单,只是实现一个窗口调用。

void mainWindow_main::on_pushBtn_video1_clicked()

{

       MainWindow_thread1 *show_video1 = new MainWindow_thread1();

       show_video1->show();

}

void mainWindow_main::on_pushBtn_video2_clicked()

{

       MainWindow_thread2 *show_video2 = new MainWindow_thread2();

       show_video2->show();

}

    2. video_thread1.cpp和 video_thread2.cpp

    此为点击主界面两个按钮时出现的两个窗口所执行的代码。这两个文件的代码很相似,只用全局变量所标识的线程号thread_Num有所不同。

程序执行伊始,设全局变量temp=0。temp为开启 / 关闭视频的全局标识变量。

update( )。便于随时刷新,它可自动调用paint事件重绘显示屏幕。

   1)编写单击开始按钮的槽on_bottonStart1_clicked( )。

    {temp=0;//如果是stop按钮的话,就设为1

    thread_Num=1;

    thread1.video_start(temp, thread_Num);}

    线程2同理。只需改动thread_Num为2即可。

   2)编写paint事件paintEvent(QPaintEvent *e)

      如果不用QT的事件机制来画图的话,图片是不能被正常显示在lable中的。

       QPainter paint(this);

       QImage image("init_thread1.jpg");//显示传送过来的图片

       paint.drawImage(QRect(0,0,640,480),image);

       QWidget::paintEvent(e);

        3.video_start( int temp, int thread_Num )的实现

        (自己定义一个新类video_client,在video_thread1.cpp和 video_thread2.cpp中分别定义一个对象,然后在video_thread1.cpp和 video_thread2.cpp中使用。)

1)先判断temp的值。为1,跳出;为0,向下执行。

       2)struct sockaddr_in sin;

       sin.sin_family = AF_INET;

       sin.sin_addr.s_addr = htonl(INADDR_ANY);//链接本机

       //sin.sin_addr.s_addr = inet_addr("192.168.47.23");//指定的服务器端地址(但服务器端不用指明客户端地址)

       if(thread_Num == 1)

       {sin.sin_port = 8000;}

       else

       {sin.sin_port = 8001;}

    3)sockfd=socket(AF_INET, SOCK_STREAM, 0);// 建立socket

    4)::connect(sockfd, (sockaddr *)&sin, sizeof(sin));//请求连接,对应server的accept( )

    5)新建init_thread1.jpg和init_thread1.jpg,用于写入接收到的图片数据。

      if(thread_Num==1)

      {fd_frame = fopen("init_thread1.jpg","wb");      }

      else

      {fd_frame = fopen("init_thread2.jpg","wb");}

开始数据传输:

    1)  接收所传图片的一共需要传送的次数times;

    2)  做times次循环;

    3)  ::memset( buff, 0, 1024 ); 不把暂存数组清零会出错误;

    4)  每次接收1024字节len1 = recv(sockfd, buff, 1024, 0);

    5)  每次接收后在传输过程中,接收一次,就顺序写入init_thread1.jpg和init_thread1.jpg

len = fwrite(buff, 1024, 1, fd_frame);

    6)给server端应答信号:len2 = send(sockfd, buf, 10,0);

    7)同理接收最后的小于1024字节的数据(即前面取余所得值)。

    关闭写入图片的指针fclose( fd_frame );

    关闭socket。即::close( sockfd );


Qt是一种跨平台应用程序框架,可以用于开发各种类型的应用程序,包括视频监控管理平台。 视频监控管理平台是一个集成了监控设备管理、视频实时预览、录像回放、报警处理等功能的系统。使用Qt编写视频监控管理平台有以下几个优点: 首先,Qt是跨平台的应用程序框架,可以在多个操作系统上运行,包括Windows、Linux和MacOS等。这意味着我们可以使用Qt开发出适用于不同操作系统的视频监控管理平台,提高了平台的兼容性和灵活性。 其次,Qt拥有丰富的图形用户面组件,可以轻松构建出直观友好的用户面。视频监控管理平台需要显示监控设备列表、视频预览窗口、录像回放面等,Qt提供了各种可定制的控件和面样式,使得用户面的开发更加便捷和美观。 另外,Qt还提供了网络编程相关的模块,可以方便地实现和管理视频监控设备间的通信。比如,使用Qt提供的网络类,我们可以轻松地与监控设备建立连接、发送数据以及接收设备状态等信息。 此外,Qt还提供了数据库访问模块,可以方便地进行监控设备信息的存储和管理。我们可以使用Qt自带的数据库模块或者第三方的数据库库,如MySQL、SQLite等,来实现监控设备信息的增删改查。 总之,使用Qt编写视频监控管理平台具备跨平台性、图形面友好性、网络通信和数据库操作方便性的优点。同时,Qt还有庞大的社区支持和丰富的文档教程,为开发者们提供了便利和支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值