当前位置: 首页 > article >正文

QT播放gstreamer命令(三)---使用QMediaPlayer

前文:

        因为之前听说过,QMediaPlayer已经集成了gstreamer,但是并没有什么接口来例子来说明,根本看不出来有任何gstreamer的形式,于是在QT5助手里面搜了一下,发现确实有gstreamer的痕迹,但是例子写的极其拉胯,经过自己尝试,终于发现了一种直接使用QMediaPlayer播放gstreamer命令的方式,以下是官方截图:

        以上是官方截图,实际测试发现,会单独弹出来,有点小问题,不过我已经解决了,说明这种方案确实可行。

步骤:

一、pro文件修改

        1. 增加QT       +=  multimediawidgets

二、

        main.cpp文件:

记得,sink的名字必须是 qtvideosink !!! 比如:

mediaPlayer.setMedia(QUrl("gst-pipeline: videotestsrc ! xvimagesink name=qtvideosink"));

#include <QWidget>
#include <QUrl>
#include <QVBoxLayout>
#include <QtMultimediaWidgets>
#include <gst/gst.h>
#include <gst/video/videooverlay.h>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget window;
    QVBoxLayout layout(&window);

    QVideoWidget *videoWidget = new QVideoWidget;
    QPushButton playButton1("Play");
    QPushButton playButton2("Stop");

    QMediaPlayer mediaPlayer;
    mediaPlayer.setVideoOutput(videoWidget);


// 设置视频源
// mediaPlayer.setMedia(QUrl::fromLocalFile("/home/enpht/Videos/1080.mp4"));
    //mediaPlayer.setMedia(QUrl("gst-pipeline: v4l2src device=/dev/video0 ! videoconvert ! xvimagesink name=qtvideosink"));
    mediaPlayer.setMedia(QUrl("gst-pipeline: videotestsrc ! xvimagesink name=qtvideosink"));

    // 连接按钮的点击信号到播放视频的槽函数
    QObject::connect(&playButton1, &QPushButton::clicked, [&mediaPlayer]() {
        mediaPlayer.play();
    });
    QObject::connect(&playButton2, &QPushButton::clicked, [&mediaPlayer]() {
        mediaPlayer.stop();
    });

    layout.addWidget(videoWidget);
    layout.addWidget(&playButton1);
    layout.addWidget(&playButton2);
    window.show();

    return app.exec();
}

经过我的继续测试,发现了这种用法一些很牛逼的用法,比如封装头文件,使用提升等等,具体就不透露了哈,偷偷用就行。

同时这种方法看似方便,底层有一些问题需要解决,以后会继续更新。

更新:

1.甚至可以推流,以及设置caps:

mediaPlayer.setMedia(QUrl("gst-pipeline: v4l2src ! capsfilter caps=\"image/jpeg,width=1920,height=1080,framerate=30/1\" ! jpegdec ! nvvidconv ! nvv4l2h264enc ! queue ! mpegtsmux ! srtsink uri=srt://192.168.1.125:10016?mode=listener"));


http://www.kler.cn/a/226420.html

相关文章:

  • 干旱绿洲农田无核白葡萄树蒸散发的分割研究_王尚涛_2021
  • 页面切换导致echarts不加载的问题
  • GmSSL - GmSSL的编译、安装和命令行基本指令
  • JavaScript-本地存储
  • 2024年美赛数学建模A题思路分析 - 资源可用性和性别比例
  • idea 中 tomcat 乱码问题修复
  • 新版MQL语言程序设计:装饰器模式的原理、应用及代码实现
  • interface转string输出打印
  • 【Vue】vue项目中使用tinymce富文本组件(@tinymce/tinymce-vue)
  • centos 7 部署若依前后端分离项目
  • 【手写数据库toadb】toadb表对象访问操作,存储管理抽象层软件架构设计思想应用
  • 导入表注入(iathook)
  • Nature Machine Intelligence 期刊信息
  • 柔性数组内存如何分配
  • 从汇编层面理解C++ this指针
  • 【蓝桥杯】环形链表的约瑟夫问题
  • 概率论中的全概率公式、贝叶斯公式解析
  • 如何在win系统部署开源云图床Qchan并无公网ip访问本地存储图片
  • C++迷宫游戏详解
  • 窥探向量乘矩阵的存内计算原理—基于向量乘矩阵的存内计算