本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.

在上一篇《ubuntu下基于qt+opencv控制摄像头》的基础上测试了视频传输.

环境:主机:PC + Ubuntu10.04 + OpenCV + Qt

从机:s3c6410 + linux2.6.38 + Qt

主机有摄像头,捕捉摄像头,然后通过网络传输,从机接收数据后显示。

实现流程:

主机代码:

主要代码如下,socket编程采用linux本身提供的方法。

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "public.h"namespace Ui {class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;CvCapture *capture;             //视频数据结构IplImage *frame;QTimer *timer;QImage *img;private slots:void slot_timer();protected:void paintEvent (QPaintEvent *);
};#endif // WIDGET_H

widget.c

#include "widget.h"
#include "ui_widget.h"
#include "public.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);timer = new QTimer(this);connect(timer,SIGNAL(timeout()),this,SLOT(slot_timer()));timer->start(FPS);capture = cvCreateCameraCapture(0);//cvNamedWindow("jdh",CV_WINDOW_AUTOSIZE);//初始化网络init_sockaddr_in(&Dst_Addr,Udp_Port,QString(DST_IP));//套接字初始化Socket_Send = socket(AF_INET,SOCK_DGRAM,0);//img = new QImage("test.jpg");//img->save("test_save.png","PNG",0);//img->save("test_save.jpeg","JPEG",10);
}void Widget::slot_timer()
{frame = cvQueryFrame(capture);if (!frame){return;}//img->load("test.jpg");cvCvtColor(frame,frame,CV_BGR2RGB);img = new QImage((unsigned char*)frame->imageData,frame->width,frame->height,frame->widthStep,QImage::Format_RGB888);//img = new QImage((unsigned char*)frame->imageData,frame->width,frame->height,QImage::Format_RGB888);update();//cvShowImage("jdh",frame);img->save("test_save.jpeg","JPEG",ZHILIANG);QFile file("test_save.jpeg");if (!file.open(QIODevice::ReadOnly))return;QByteArray buffer = file.readAll();if (sendto(Socket_Send,buffer.data(),buffer.size(),0,(struct sockaddr *)(&Dst_Addr),sizeof(struct sockaddr_in)) < 0){cout << "send fail" << " " << buffer.size() << endl;perror("hello");}file.close();//网络发送/*if (sendto(Socket_Send,img->data_ptr(),img->byteCount(),0,(struct sockaddr *)(&Dst_Addr),sizeof(struct sockaddr_in)) < 0){cout << "send fail" << " " << frame->width << " " << frame->height << " " << img->byteCount() << endl;perror("hello");}*/
}void Widget::paintEvent(QPaintEvent * event)
{//painter->drawImage(0,0,mm);QPainter *pp = new QPainter(this);pp->drawImage(0,0,*img);
}Widget::~Widget()
{delete ui;cvReleaseImage(&frame);//cvDestroyWindow("jdh");
}

从机主要代码如下,socket编程采用qt里机制

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "public.h"namespace Ui {class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;QImage *img;QUdpSocket *receiver;
protected:void paintEvent(QPaintEvent *);private slots:void processPendingDatagram();
};#endif // WIDGET_H

widget.c

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);receiver = new QUdpSocket(this);receiver->bind(Udp_Port,QUdpSocket::ShareAddress);connect(receiver,SIGNAL(readyRead()),this,SLOT(processPendingDatagram()));
}void Widget::paintEvent(QPaintEvent *)
{QPainter *pp = new QPainter(this);pp->drawImage(0,0,*img);
}void Widget::processPendingDatagram()
{qint64 num = receiver->pendingDatagramSize();cout << "receive size = " << num << endl;QByteArray buffer;buffer.resize(num);receiver->readDatagram((char *)buffer.data(),num);QFile file("test_save.jpeg");if (!file.open(QIODevice::WriteOnly))return;file.write(buffer);file.close();img = new QImage("test_save.jpeg");update();}Widget::~Widget()
{delete ui;
}

从机端显示:

linux下视频传输测试相关推荐

  1. 性能测试入门(六)windows及Linux下做压力测试的注册表设置

    windows及Linux下做压力测试的注册表设置 from: http://www.cnblogs.com/tianzhiliang/articles/2400176.html TcpTimedWa ...

  2. USB3.0之高速视频传输测试 双目相机(mt9p031、mt9m001)带宽高达300M测试 配合isensor测试 500万像素15fps...

    USB3.0之高速视频传输测试 双目相机(mt9p031.mt9m001)带宽高达300M测试 配合isensor测试 500万像素15fps 最近完善了下USB3.0的视频开发测试,主要优化了FPG ...

  3. Linux下使用Speedtest测试网速教程

    Linux下使用Speedtest测试网速教程 文章目录: 一.通过Speedtest官网直接测试网络速度 二.通过下载源码,在命令行中测试网速 1.下载安装 2.Speedtest的参数使用: 有时 ...

  4. 用Prime95来做linux下CPU压力测试

    Prime95是用来做linux下CPU压力测试的,由GIMPS (Great Internet Mersenne Prime Search)所提供,主要是透过运算找出梅森质数,质数(Prime nu ...

  5. linux下网速测试

    linux下网速测试 speedtest 是一个知名的网速测试工具,它是用 Python 写成的,可以使用 apt 或 pip 命令来安装. 安装 sudo apt install speedtest ...

  6. Gstreamer视频传输测试gst-launch

    gst-inspect和gst-launch是两个非常使用的小工具 gst-inspect 在开发时用于查询库各个插件element的详细信息 gst-launch 用于在终端快速构建一条pipeli ...

  7. ZedBoard--(5)嵌入式Linux下的DMA测试(Direct Register Mode)(PS + PL)

    ZedBorad–(5)嵌入式Linux下的DMA测试(PS+PL) 本文将详细介绍如何在ZedBorad上使用AXI接口的DMA IP核.(文末会给出测试代码的下载链接) DDR控制器.AXI DM ...

  8. Linux下网络传输测速程序小记

    一.题外话       最近需要在linux下做一个网络测速的小程序,将服务端内存中缓存的一个大文件整个的从服务端发送到客户端,并缓存到客户端的内存中,以此抛开硬盘读取速度的影响,测量网络实际的传输速 ...

  9. linux 下视频编辑软件下载,在Linux系统中下载和安装Shotcut视频编辑工具

    Shotcut是一款免费的.跨平台的非线性视频编辑工具,它使用MLT框架并利用FFMepg的功能构建,可应用在Linux操作系统下.当前Shotcut 20.02.17版本已发布下载,它增加了一些显着 ...

最新文章

  1. 提升tomcat服务器性能的七条经验
  2. EasyUI Pagination 分页的两种做法
  3. 关于 quick-cocos 状态机
  4. Jenkins结合.net平台工具之Nunit
  5. 大话设计模式--职责连模式 Chain of Resposibility -- C++实现实例
  6. Hadoop下载和源码阅读
  7. vi is failed with error E382: Cannot write, 'buftype' option is set in Linux
  8. linux安装zsh终端
  9. 委托BegionInvoke和窗体BegionInvoke
  10. java中return的作用
  11. mysql集成函数_mysql的内置函数
  12. 带时限作业排序(贪心)
  13. jdbc 连接 mysql 时的中文乱码问题
  14. Android面试问题收集总结
  15. Modbus PLC攻击分析:从Modbus Poll/Slave到M340
  16. java反序列化为空_Java序列化/反序列化,提供空对象引用
  17. 软件设计师历年真题常错的题加解析——上午题
  18. librtmp usage
  19. UIBezierPath+画板,签名档
  20. C++语言里的pow函数(初学)

热门文章

  1. Android系统HMDI音量无法梯度调节,只能0或者max
  2. Windows安装达梦数据库(Intel CPU)
  3. L1-079 天梯赛的善良 (20 分)python
  4. 关于this、getContext()、getActivity()、getApplication()、getApplicationContext()的区别
  5. SQLTableSource
  6. 计算向量相似度 ---余弦相似度
  7. 入职字节外包一个月,我离职了
  8. 用于信号处理的Xilinx FPGA XC7K325T PCIeX8 FMC处理板卡
  9. iOS 各种技术点网址
  10. 目前宽带的接入方式有哪些