当前位置:网站首页>QT视频传输
QT视频传输
2022-07-07 15:32:00 【God港】
前言
我们经常会进行视频的传输,这篇文章我们将讲解QT下的视频传输。
客户端
udp客户端,我们主要获取某个视频的文件,采用opencv读取后,分帧传输。我们将图片解码成base-64格式
参考代码
#include "ImageClient.h"
#include<QDebug>
#include<QBuffer>
#include<QFileDialog>
#include <opencv2/opencv.hpp>
ImageClient::ImageClient(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
counter = 0;
time = new QTimer(this);
time->start(180);
connect(time, SIGNAL(timeout()), this, SLOT(readFrame()));
cap.open("F:/1.avi");
if (!cap.isOpened())
{
qDebug() << " ===> Failed";
}
else
{
qDebug() << " ===> Succeed";
}
receiver = new QUdpSocket(this);
}
QByteArray ImageClient::getImageData2( QImage &image)
{
QByteArray imageData;
QBuffer buffer(&imageData);
image.save(&buffer, "jpg");
imageData = imageData.toBase64();
return imageData;
}
QImage ImageClient::mat2QImage(cv::Mat cvImg)
{
QImage qImg;
if (cvImg.channels() == 3) //3 channels color image
{
cv::cvtColor(cvImg, cvImg, COLOR_BGR2RGB);
qImg = QImage((const unsigned char*)(cvImg.data),
cvImg.cols, cvImg.rows,
cvImg.cols*cvImg.channels(),
QImage::Format_RGB888);
}
else if (cvImg.channels() == 1) //grayscale image
{
qImg = QImage((const unsigned char*)(cvImg.data),
cvImg.cols, cvImg.rows,
cvImg.cols*cvImg.channels(),
QImage::Format_Indexed8);
}
else
{
qImg = QImage((const unsigned char*)(cvImg.data),
cvImg.cols, cvImg.rows,
cvImg.cols*cvImg.channels(),
QImage::Format_RGB888);
}
return qImg;
}
void ImageClient::readFrame()
{
counter++;
Mat source, result;
qDebug() << counter;
cap.read(source);
if (source.empty())//如果视频已经读取完成则停止发送timeout()信号
{
time->stop();
qDebug() << "End";
return;
}
auto image = mat2QImage(source) ;
ui.label->setPixmap(QPixmap::fromImage(image));
auto data = getImageData2(image);
receiver->writeDatagram(data.data(),
data.size(),
QHostAddress::Broadcast, //udp广播地址
7777);
}
服务端
获取客户端数据然后展现。代码如下:
#include "Server.h"
#include<QMutexLocker>
#pragma execution_character_set("utf-8")
Server::Server(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
udpSocket = new QUdpSocket(this);
udpSocket->bind(QHostAddress::AnyIPv4, 7777);
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(Run()), Qt::QueuedConnection);//udp数据接收
}
QImage Server::getImage(const QString &data)
{
QByteArray imageData = QByteArray::fromBase64(data.toLatin1());
QImage image;
image.loadFromData(imageData);
return image;
}
void Server::Run()
{
try
{
QMutexLocker locker(&mutexImage);
datagram.resize(udpSocket->pendingDatagramSize());
auto len = udpSocket->readDatagram(datagram.data(), datagram.size());
auto image = Server::getImage(datagram);
ui.label->setPixmap(QPixmap::fromImage(image));
this_thread::sleep_for(std::chrono::milliseconds(180));
}
catch (const std::exception& e)
{
}
}
效果

总结
一个简单的测试效果完成了,效果还不错。
边栏推荐
- Asyncio concept and usage
- LeetCode 1986. 完成任务的最少工作时间段 每日一题
- Temperature sensor chip used in temperature detector
- Laravel5.1 Routing - routing packets
- [hcsd celebrity live broadcast] teach the interview tips of big companies in person - brief notes
- 一文读懂数仓中的pg_stat
- The team of East China Normal University proposed the systematic molecular implementation of convolutional neural network with DNA regulation circuit
- What is the difference between IP address and physical address
- 【图像传感器】相关双采样CDS
- 偶然升职的内心独白
猜你喜欢
直接上干货,100%好评

Spark Tuning (III): persistence reduces secondary queries

AutoLISP series (3): function function 3

time标准库

掌握这套精编Android高级面试题解析,oppoAndroid面试题

【Android -- 数据存储】使用 SQLite 存储数据
As an Android Developer programmer, Android advanced interview

网关Gateway的介绍与使用

【DesignMode】外观模式 (facade patterns)

Personal notes of graphics (4)
随机推荐
【DesignMode】代理模式(proxy pattern)
null == undefined
Detailed explanation of several ideas for implementing timed tasks in PHP
A tour of gRPC:03 - proto序列化/反序列化
Interface oriented programming
[Android -- data storage] use SQLite to store data
Horizontal and vertical centering method and compatibility
Introduction and use of gateway
Pycharm terminal enables virtual environment
23. 合并K个升序链表-c语言
JS中null NaN undefined这三个值有什么区别
最新Android面试合集,android视频提取音频
Asyncio concept and usage
如何选择合适的自动化测试工具?
【DesignMode】外观模式 (facade patterns)
华东师大团队提出,具有DNA调控电路的卷积神经网络的系统分子实现
typescript ts 基础知识之类型声明
Imitate the choice of enterprise wechat conference room
平衡二叉树(AVL)
logback. XML configure logs of different levels and set color output