linux下视频传输测试
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.
在上一篇《ubuntu下基于qt+opencv控制摄像头》的基础上测试了视频传输.
环境:主机:PC + Ubuntu10.04 + OpenCV + Qt
主机有摄像头,捕捉摄像头,然后通过网络传输,从机接收数据后显示。
主要代码如下,socket编程采用linux本身提供的方法。
#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下视频传输测试相关推荐
- 性能测试入门(六)windows及Linux下做压力测试的注册表设置
windows及Linux下做压力测试的注册表设置 from: http://www.cnblogs.com/tianzhiliang/articles/2400176.html TcpTimedWa ...
- USB3.0之高速视频传输测试 双目相机(mt9p031、mt9m001)带宽高达300M测试 配合isensor测试 500万像素15fps...
USB3.0之高速视频传输测试 双目相机(mt9p031.mt9m001)带宽高达300M测试 配合isensor测试 500万像素15fps 最近完善了下USB3.0的视频开发测试,主要优化了FPG ...
- Linux下使用Speedtest测试网速教程
Linux下使用Speedtest测试网速教程 文章目录: 一.通过Speedtest官网直接测试网络速度 二.通过下载源码,在命令行中测试网速 1.下载安装 2.Speedtest的参数使用: 有时 ...
- 用Prime95来做linux下CPU压力测试
Prime95是用来做linux下CPU压力测试的,由GIMPS (Great Internet Mersenne Prime Search)所提供,主要是透过运算找出梅森质数,质数(Prime nu ...
- linux下网速测试
linux下网速测试 speedtest 是一个知名的网速测试工具,它是用 Python 写成的,可以使用 apt 或 pip 命令来安装. 安装 sudo apt install speedtest ...
- Gstreamer视频传输测试gst-launch
gst-inspect和gst-launch是两个非常使用的小工具 gst-inspect 在开发时用于查询库各个插件element的详细信息 gst-launch 用于在终端快速构建一条pipeli ...
- ZedBoard--(5)嵌入式Linux下的DMA测试(Direct Register Mode)(PS + PL)
ZedBorad–(5)嵌入式Linux下的DMA测试(PS+PL) 本文将详细介绍如何在ZedBorad上使用AXI接口的DMA IP核.(文末会给出测试代码的下载链接) DDR控制器.AXI DM ...
- Linux下网络传输测速程序小记
一.题外话 最近需要在linux下做一个网络测速的小程序,将服务端内存中缓存的一个大文件整个的从服务端发送到客户端,并缓存到客户端的内存中,以此抛开硬盘读取速度的影响,测量网络实际的传输速 ...
- linux 下视频编辑软件下载,在Linux系统中下载和安装Shotcut视频编辑工具
Shotcut是一款免费的.跨平台的非线性视频编辑工具,它使用MLT框架并利用FFMepg的功能构建,可应用在Linux操作系统下.当前Shotcut 20.02.17版本已发布下载,它增加了一些显着 ...
最新文章
- 提升tomcat服务器性能的七条经验
- EasyUI Pagination 分页的两种做法
- 关于 quick-cocos 状态机
- Jenkins结合.net平台工具之Nunit
- 大话设计模式--职责连模式 Chain of Resposibility -- C++实现实例
- Hadoop下载和源码阅读
- vi is failed with error E382: Cannot write, 'buftype' option is set in Linux
- linux安装zsh终端
- 委托BegionInvoke和窗体BegionInvoke
- java中return的作用
- mysql集成函数_mysql的内置函数
- 带时限作业排序(贪心)
- jdbc 连接 mysql 时的中文乱码问题
- Android面试问题收集总结
- Modbus PLC攻击分析:从Modbus Poll/Slave到M340
- java反序列化为空_Java序列化/反序列化,提供空对象引用
- 软件设计师历年真题常错的题加解析——上午题
- librtmp usage
- UIBezierPath+画板,签名档
- C++语言里的pow函数(初学)
热门文章
- Android系统HMDI音量无法梯度调节,只能0或者max
- Windows安装达梦数据库(Intel CPU)
- L1-079 天梯赛的善良 (20 分)python
- 关于this、getContext()、getActivity()、getApplication()、getApplicationContext()的区别
- SQLTableSource
- 计算向量相似度 ---余弦相似度
- 入职字节外包一个月,我离职了
- 用于信号处理的Xilinx FPGA XC7K325T PCIeX8 FMC处理板卡
- iOS 各种技术点网址
- 目前宽带的接入方式有哪些