linux下视频传输测试
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.
在上一篇《ubuntu下基于qt+OpenCV控制摄像头》的基础上测试了视频传输.
环境:主机:PC + Ubuntu10.04 + OpenCV + Qt
从机:s3c6410 + linux2.6.38 + Qt
主机有摄像头,捕捉摄像头,然后通过网络传输,从机接收数据后显示。
实现流程:
主机代码:
主要代码如下,socket编程采用Linux本身提供的方法。
widget.h
- <span style="font-family:'Arial Black';">#ifndef WIDGET_H
- #define WIDGET_H
- #include <QWidget>
- #include "public.h"
- namespace Ui {
- class Widget;
- }
- class Widget : public QWidget
- {
- Q_OBJECT
- public:
- 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
- </span>
widget.c
- <span style="font-family:'Arial Black';">#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");
- }
- </span>
从机主要代码如下,socket编程采用qt里机制
widget.h
- <span style="font-family:'Arial Black';">#ifndef WIDGET_H
- #define WIDGET_H
- #include <QWidget>
- #include "public.h"
- namespace Ui {
- class Widget;
- }
- class Widget : public QWidget
- {
- Q_OBJECT
- public:
- 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
- </span>
widget.c
- <span style="font-family:'Arial Black';">#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;
- }
- </span>
从机端显示:

http://blog.csdn.net/jdh99/article/details/6672481
linux下视频传输测试的更多相关文章
- RedHat Linux 下安装、测试摄像头
RedHat Linux 下安装.测试摄像头(全文见附件) 随着视频电话的迅速发展我相信大家一定有过在Windows 下安装摄像头的经历,然而大多数 都不支持Linux .我现以罗技摄像头为例 ...
- linux下视频转gif
title: linux下视频转gif date: 2017-11-23 16:55:26 tags: linux categories: linux 安装ffmpeg ffmpeg是一套非常强大的音 ...
- linux 下网站压力测试工具webbench
一直在用webbench ,这个linux下的网站压力测试工具.整理下. 笔记本装的ubuntu,其他linux系统也差不多. webbench 需要先安装 ctags,一个vim的阅读插件,可以直接 ...
- Linux下的压力测试工具:ab、http_load、webbench、siege
一.ab 1.1 介绍 ab是apache自带的一款功能强大的测试工具. 安装了apache一般就自带了. 1.2 下载 同apache. 1.3 安装 同apache. 1.4 安装结果 ...
- USB3.0之高速视频传输测试 双目相机(mt9p031、mt9m001)带宽高达300M测试 配合isensor测试 500万像素15fps
最近完善了下USB3.0的视频开发测试,主要优化了FPGA程序和固件,及其同步方式.对带宽和图像效果进行了仔细的测试 开发板架构(2CMOS+FPGA+2DDR2+USB3.0) 评估板底板配合2个M ...
- linux下web压力测试工具ab使用及详解
APACHE自带的测试工具AB(apache benchmark).在APACHE的bin目录下.格式: ./ab [options] [http://]hostname[:port]/path参数: ...
- Linux下视频转换工具:转换,切割,连接,
首先当然是需要安装ffmpeg软件包,可以直接从源中进行安装!但我安装后并不能成功执行后面所需要执行的转换命令,所以我只能重新从源码编译安装ffmpeg: (1)下载ffmpeg源码包,注意版本不能太 ...
- linux下libreoffice安装测试
一.Linux安装 wget http://download.documentfoundation.org/libreoffice/stable/4.4.6/rpm/x86_64/LibreOffic ...
- linux下文件传输一些方法整理.
ftp类 ftp 命令已经不推荐使用了. #基本用法 lftp sftp://[domain name] lftp sftp://theURL.org #使用不同用户名 lftp sftp://[us ...
随机推荐
- 深入浅出MFC:对话框消息路由
[appmodul.cpp] extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstanc ...
- Java实现多文件压缩打包的方法
package com.biao.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutpu ...
- 一个2013届毕业生(踏上IT行业)的迷茫(2)
初中的时光是一段艰辛,但幸福的时光,在这一段时光中同样我遇到了我人生中第二个贵人.记得在小学毕业的那个暑假里,我知道上了初中会开一门叫做英语的课程,那时候在我们那里有好多上过初中.高中的在我们小学开英 ...
- javascript 获取上一周的时间
<script type="text/javascript" language="javascript"> //获取系统时间 var LSTR_nd ...
- 真的懂了:TCP协议中的三次握手和四次挥手(关闭连接时, 当收到对方的FIN报文时, 仅仅表示对方不在发送数据了, 但是还能接收数据, 己方也未必全部数据都发送对方了。相当于一开始还没接上话不要紧,后来接上话以后得让人把话讲完)
一.TCP报文格式 下面是TCP报文格式图: (1) 序号, Seq(Sequence number), 占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2) 确 ...
- jxl导出Excel
首先先在自己工程中导入jxl的jar包: 疯狂google后找到一段别人的导出excel方法,先备份于下面: import java.io.File; import java.io.FileOutpu ...
- 微信小程序之购物车
这里演示从商品列表中添加到购物车 下面先做商品列表页.如下图: 布局分析: 首先一个list的主盒子,接着是item盒子,这是必须的.然后把item分成左侧的图片部分,和右侧的说明部分(item盒子使 ...
- SEO分享:为什么我的资源外链这么多的高品质?
在小浪前制成的制品" [完整版]我怎么3的月800单词索引厨师主页!".之后,很多人都表示了极大的钦佩观看.顽强的运行力,真SEO它是运行顽强的力量.也有人说是吹牛吧,一天500外 ...
- Kivy A to Z -- Kivy 示例演示自带名单
所有的样品已经在Android 4.04 手机正常进行 1.demo/kivycatalog 这个例子说明了如何使用主控件,例如Layout,Button,MediaPlayer,Progress B ...
- 1-5-vim编辑器的使用
第1章 vim主要模式介绍,vim命令模式. 1.1 确保系统已经安装了VIM工具 [root@panda ~]# rpm -qf `which vim` [root@panda ~]# rpm ...