前言

最近一直在尝试制作一个,网络摄像头,先后分别尝试了使用QT包装的UDP类TCP类,和LINUX中的socket编程等方式,但是非常遗憾,都没有取得非常好的播放效果。以为只要一帧一帧的传输视频数据就没有问题了,但是非常遗憾的是效果都不是非常好。因为对于数据的处理方法太过简单,不会写一些对于数据预先处理来减少数据的丢包,倒是播放出来的视频出现了如下的现象。

非常明显应为每一帧的图像之间出现了严重的粘连现象。搞了很久都没有找到解决问题的方法。最后还是选择了使用现成的开源框架mjpeg-streamer,并修改一些源码来实现自己功能。
网上很多的方法都是在浏览器中直接播放视频。但是项目需要一个上位机软件,然后我尝试了官方源码包中的那个QT上位机程序,但是好像应为版本的原因导致不能正常的编译。后来又在网上找了一些,拼拼凑凑总算搞定了。

软件部分

工程文件:

mjpeg-clint.pro

#-------------------------------------------------
#
# Project created by QtCreator 2020-03-08T18:33:52
#
#-------------------------------------------------QT       += core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = mjpeg-clint
TEMPLATE = app# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.ui
头文件:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QUrl>
#include <QPixmap>
#include <QFile>
#include <QPicture>
#include <QMessageBox>
#include <QMainWindow>
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include<QTimer>namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();void PicConnect(QString p);void SetWindow();void ShowPic();void StopPic();private slots:void on_buttonstart_clicked();void on_buttonsnapshot_clicked();void on_buttonclose_clicked();public slots:void slot_replyFinished(QNetworkReply* reply);private:Ui::MainWindow *ui;//connect to pictureQNetworkAccessManager *manager;bool isPicOnLabel;QImage* img=new QImage,* scaledimg=new QImage;QNetworkRequest request;QString ip;qint16 port;QString PU;};#endif // MAINWINDOW_H

源文件:

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"/* 构造和析构 */
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);setWindowTitle("客户端");PU="http://192.168.0.18:8080/?action=snapshot";manager = new QNetworkAccessManager(this);connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(slot_replyFinished(QNetworkReply*)));
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::PicConnect(QString PicUrl)
{request.setUrl(QUrl(PicUrl));manager->get(request);
}void MainWindow::slot_replyFinished(QNetworkReply* reply)
{QByteArray data = reply->readAll();img->loadFromData(data, "JPG");
}void MainWindow::on_buttonstart_clicked()
{if(isPicOnLabel==false){//获取服务器ip=ui->lineEditIP->text();port=ui->lineEditPORT->text().toInt();PU=QString("http://"+ip+":"+tr("%1").arg(port)+"/?action=snapshot");ShowPic();}else{StopPic();}
}void MainWindow::ShowPic()
{isPicOnLabel=true;QString name="暂停";while(1){if(isPicOnLabel==false)break;PicConnect(PU);//用作延时QEventLoop eventloop;QTimer::singleShot(10, &eventloop, SLOT(quit()));eventloop.exec();*scaledimg=img->scaled(640,480,Qt::KeepAspectRatio);ui->label->setPixmap(QPixmap::fromImage(*scaledimg));}
}void MainWindow::StopPic()
{QString name="开始";isPicOnLabel=false;
}void MainWindow::on_buttonsnapshot_clicked()
{QDate date;QTime time;/* 取到当前显示的pixmap指针 */const QPixmap *pixmap = ui->label->pixmap();if(pixmap){/* 保存为jpg文件,并保证名字不相同 */pixmap->save("./"+date.currentDate().toString("yyyy,MM,dd")+"-"+time.currentTime().toString("hh;mm;ss")+".jpg");QMessageBox::about(this, " ", "Save Successed!");}
}void MainWindow::on_buttonclose_clicked()
{this->close();
}

运行效果:

LINUX下:

Windows下

总结:

到目前为止视频的采集与播放基本已经搞定,下面我需要研究一些图像的编码与解码,包括使用ARM自身的硬编解码来对于图片快速的处理。同时还要进一步熟悉mjpeg-streamer源码。

工程源码:

mjpeg-clint

【USB网络摄像头】基于mjpeg-streamer的视频采集与播放【QT上位机软件】相关推荐

  1. FPGA驱动FT601实现USB3.0相机 OV5640视频采集 提供2套工程源码和QT上位机源码

    目录 1.前言 2.FT601芯片解读和时序分析 FT601功能和硬件电路 FT601读时序解读 FT601写时序解读 3.我这儿的 FT601 USB3.0通信方案 4.vivado工程1--彩条视 ...

  2. FPGA驱动FT601实现USB3.0相机HDMI视频采集 提供工程源码和QT上位机源码

    目录 1.前言 2.FT601芯片解读和时序分析 FT601功能和硬件电路 FT601读时序解读 FT601写时序解读 3.我这儿的 FT601 USB3.0通信方案 4.详细设计方案 5.vivad ...

  3. FPGA基于XDMA实现PCIE X4通信方案 提供工程源码和QT上位机程序和技术支持

    目录 1.前言 2.我已有的PCIE方案 3.PCIE理论 4.总体设计思路和方案 5.vivado工程详解 6.驱动安装 7.QT上位机软件 8.上板调试验证 9.福利:工程代码的获取 1.前言 P ...

  4. usb网络linux系统安装教程,Linux系统入门学习:如何在树莓派上安装USB网络摄像头...

    Question: 我可以在树莓派上使用标准的USB网络摄像头么?我该如何检查USB网络摄像头与树莓派是否兼容?另外我该如何在树莓派上安装它? 如果你想在树莓上拍照或者录影,你可以安装树莓派的摄像头板 ...

  5. Linux有问必答:如何在树莓派上安装USB网络摄像头

    https://linux.cn/article-5312-1.html 2015-4-20 17:38    收藏: 4 参考原文:http://ask.xmodulo.com/install-us ...

  6. 2022年全球市场Type-C USB网络摄像头总体规模、主要生产商、主要地区、产品和应用细分研究报告

    本文研究全球市场.主要地区和主要国家Type-C USB网络摄像头的销量.销售收入等,同时也重点分析全球范围内主要厂商(品牌)竞争态势,Type-C USB网络摄像头销量.价格.收入和市场份额等.针对 ...

  7. linux usb 网络摄像头,树莓派|Linux有问必答:如何在树莓派上安装USB网络摄像头...

    Question: 我可以在树莓派上使用标准的USB网络摄像头么?我该如何检查USB网络摄像头与树莓派是否兼容?另外我该如何在树莓派上安装它? 如果你想在树莓上拍照或者录影,你可以安装树莓派的摄像头板 ...

  8. 网络摄像头的linux系统,Linux系统入门学习:如何在树莓派上安装USB网络摄像头...

    Question: 我可以在树莓派上使用标准的USB网络摄像头么?我该如何检查USB网络摄像头与树莓派是否兼容?另外我该如何在树莓派上安装它? 如果你想在树莓上拍照或者录影,你可以安装树莓派的摄像头板 ...

  9. 在ROS中使用USB网络摄像头传输图像

    转自:http://blog.csdn.net/yake827/article/details/44983093 在上节已经实现了单张图片的ROS实现,而在现实中,我们一般是使用摄像头来获取图像,这次 ...

最新文章

  1. iPhone上将短信内容发送到指定邮箱的方法
  2. Tensorflow的基本运行方式--demo程序
  3. vue --- 提交表单到服务器
  4. 在 git hooks 中运行 npm script
  5. ECG的滤波和检波资源汇总
  6. 移植SlidingMenu Android library,和安装example出现的问题解决
  7. CLR寄宿(上) MSCOREE.DLL
  8. linux mint17kde 安装教程,Kubuntu 14.04 /Linux Mint 17 怎样安装 KDE 4.14.1
  9. Unity(十九):获取编辑器内置样式和内置图标
  10. Android自定义签名文件 testkey.pk8 testkey.x509.pem
  11. 国际c语言混乱编码大赛,国际C语言混乱代码大赛(IOCCC)
  12. 2021-08-26小白笔记2
  13. 小众即时通信工具专项整治启动,关停“比邻”“聊聊”“密语”等9款违法App...
  14. VMWare安装苹果系统及相关问题处理
  15. 在网站页脚添加QQ邮箱的“邮我”功能
  16. Android自动电话录音开发过程及问题
  17. 流水不腐,户枢不蠹。运动多些。
  18. flex、grid布局实践——神仙网址分享
  19. JUC源码级学习(下)-函数式编程、stream流、jvm等
  20. 超定方程组最小二乘法(内含代码)

热门文章

  1. 翻转课堂在语文教学中的案例
  2. Markdown用法排版
  3. fcpx插件:Stupid raisins show pop for Mac(20个标题展示模板
  4. php时间戳转换成时间的方法
  5. 2020最新java面试题库(杭州)
  6. 微信小程序多次跳转后不能点_微信小程序运营需要先知道它的规则
  7. 正则表达式中的贪婪匹配与懒惰匹配
  8. Word一些功能的使用方法
  9. pip 安装keystone_基于Ubuntu12.04下的Keystone源码安装
  10. Centos7下的LibreOffice的搭建及自动化脚本部署