Hi,欢迎来到中国嵌入式培训高端品牌 - 华清远见嵌入式学院<北京总部官网>,专注嵌入式工程师培养15年!
当前位置: > 嵌入式学院 > 嵌入式学习 > 讲师博文 > Qt 5.6以上版本的MJPG-STREAMER视频播放实现
Qt 5.6以上版本的MJPG-STREAMER视频播放实现
时间:2017-10-25作者:华清远见

主机:Windows 7

Qt:5.9.1

MJPG-streamer是一款免费基于IP地址的视频流服务器,它的输入插件从摄像头读取视频数据,这个输入插件产生视频数据并将视频数据复制到内存中,它有多个输出插件将这些视频数据经过处理,其中最重要的输出插件是网站服务器插件,它将视频数据传送到用户浏览器中,MJPG-streamer的工作就是将其中的一个输入插件和多个输出插件绑定在一起,所有的工作都是通过它的各个插件完成的。如果摄像头直接支持MJPEG格式的话,MJPG-streamer可以快速获得图片,并发送给Web客户端进行显示。整个过程中不涉及到图片格式转换,视频压缩处理方面工作,仅仅涉及到数据转发的工作,所以在性能较低的嵌入式Linux平台上也可以比较流畅的工作。

因为MJPG-streamer是基于HTTP协议的,所以只需要有一个Web浏览器,输入正确的网址就能观看到视频。但如果要将视频显示在一个桌面应用的话,则需要进行一些编码操作。在Qt5.4到Qt5.6的版本中继承了Web Kit,可以很方便地请求网页数据并进行显示。如果要播放MJPG-streamer视频的话,则可以通过连续不断地请求单张JPEG图片并进行显示即可。对图片的请求和显示的典型代码如下:

ui->webView->setUrl(QUrl("http://192.168.1.1:8080/?action=snapshot"));

ui->webView->update();

但是在Qt 5.6之后,Web Kit被删除了,取而代之的是更强大的WebEngine。要实现上面的功能,可以通过下面的代码来实现。

class Widget : public QWidget

{

    Q_OBJECT

public:

    explicit Widget(QWidget *parent = 0);

    ~Widget();

protected slots:

    void showPicture();

private:

Ui::Widget *ui;

// 用于发送请求并获得响应

QNetworkAccessManager manager;

// 响应的内容

    QNetworkReply *reply;

};

Widget::Widget(QWidget *parent) :

    QWidget(parent),

    ui(new Ui::Widget)

{

    ui->setupUi(this);

// 发起获取单张图片的请求

    QUrl url("http://127.0.0.1:8080/?action=snapshot");

reply = manager.get(QNetworkRequest(url));

// 完整接收到响应的数据后调用showPicture槽函数

    connect(reply, SIGNAL(finished()), this, SLOT(showPicture()));

}

Widget::~Widget()

{

    delete ui;

}

void Widget::showPicture()

{

// 从响应中获取图片数据,并显示在QLabel上

    QByteArray jpegData = reply->readAll();

    QPixmap pixmap;

    pixmap.loadFromData(jpegData);

    ui->labelPic->setPixmap(pixmap);

    delete reply;

// 继续发起请求,以便以最快速度刷新图片

    QUrl url("http://127.0.0.1:8080/?action=snapshot");

    reply = manager.get(QNetworkRequest(url));

    connect(reply, SIGNAL(finished()), this, SLOT(showPicture()));

}

注意,上面的代码对图片连续显示形成视频的核心在于:显示完图片后立即发起下一次请求。另外,因为reply每次都不一样,所以要对新的对象建立信号和槽的连接。


发表评论

全国咨询电话:400-611-6270,双休日及节假日请致电值班手机:15010390966

在线咨询: 曹老师QQ(3337544669), 徐老师QQ(1462495461), 刘老师 QQ(3108687497)

企业培训洽谈专线:010-82600901,院校合作洽谈专线:010-82600350,在线咨询:QQ(248856300)

Copyright 2004-2018 华清远见教育集团 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号