虚拟机ubuntu下使用gstreamer推流学习笔记(二)gstreamer与QT

一、下载Qt和gstreamer

注:gstreamer-0.1和gstreamer-1.0是不一样的。gstreamer-1.0是现在下载到的。很多教程可能是基于老版本的(包括很多官网教程或文档翻译),就会出错。具体变化见官方网站

1、下载Qt
官网下载地址:https://www.qt.io/download
选择开源版本下载,注册登录后下载即可。
安装教程:https://subingwen.cn/qt/qt6-install/
似乎还要配置环境变量:配置环境变量和入门教程
2、下载gstreamer
下载地址:https://gstreamer.freedesktop.org/pkg/目前的最新版本是1.19.1。
有mingw/msvc/uwp版本,uwp不选
mingw:核心的C库前面带有lib前缀
msvc:核心的C库前面不带lib前缀
用Qt创建项目时可以看到,qt两种套件都支持的
虚拟机ubuntu下使用gstreamer推流学习笔记(二)gstreamer与QT_第1张图片
这里选择不带lib前缀的msvc,不然的话c很容易找不到函数
看到教程说gstreamer似乎也要配置环境变量:教程在这
然而我按照上面做了,没找到安装目录的bin目录下有个gst-play-1.0.exe,也就无法在终端下输入命令播放视频…要疯。回到Qt上来。

二、Qt引入第三方库

Qt利用qmake编译产生makefile文件。导入第三方库,就需要在我们工程中的.pro文件中做一些设置。
关于什么是qmake和makefile文件:

1、make和makefile:
gcc是GNU Compiler Collection,相当于编译器。(GNU是一个计划,为了模仿被收费的Unix系统做一个开源的版本)。
程序只有一个源文件的时候,可以用gcc编译。但源文件一多,用gcc逐个编译就很麻烦了,就出现了make工具来批量处理。make是音乐家,makefile就是乐谱,make根据makefile中的命令进行编译——makefile包含了调用gcc编译某个源文件的命令。
2、cmake:
工程量大或者换平台的时候,分开编写makefile也很麻烦,就出现了cmake工具,可以更简单的生成makefile文件,还能跨平台生成合适的makefile。
cmake根据叫CMakeLists.txt文件(学名:组态档)去生成makefile,这个文件是我们自己亲手写的,如果用VS等软件会帮你写好,直接编译即可。
3、qmake:
Qt对C++进行了扩展,你的一行代码背后是写好的大量代码,多出的代码靠Qt专有的moc编译器和uic编译器翻译,再用编译器编译。Qt公司造的专门生成Qt专用makefile文件,把翻译和编译集成在一起了。qmake是根据Qt工程文件(.pro)生成对应makefile的,.pro也可以自己写,但一般都由Qt
creater自动生成。
4、cmake和cmake的区别:
cmake也支持Qt程序,qmake也能生成普通的makefile,只要在pro文件中加入CONFIG -= qt即可。但cmake的CMakeLists.txt相对qmake的pro文件写起来复杂一点。

.pro文件的配置:https://blog.csdn.net/hebbely/article/details/66970821
重要的:
1、附加头文件包含目录 INCLUDEPATH**
头文件的包含路径,即指定编译项目时应该被搜索的#include目录。如果路径包含空格,需要使用引号包含。

>  INCLUDEPATH = c:/include 
>  INCLUDEPATH += "C:/extra headers"

2、链接库 LIBS
指定链接到项目中的库列表。可以用-L指定目录,-l指定库的名称(无需后缀,.lib,.a, .so都适用)。
可以直接通过绝对路径和相对路径指定库的完整path(需后缀,.lib,.a, .so都适用),相对路径用$$pwd前缀,路径不允许空格
LIBS += somepath 这个可以多行写,也可以用“\”隔行
对于静态库(.lib, .a)以及动态库.so

LIBS += -LD:/codetest/libcurlcpp/libcurl/lib/ -llibcurl\
        -LD:/codetest/libcurlcpp/libcurl/lib/ -lws2_32\
        -LD:/codetest/libcurlcpp/libcurl/lib/ -lwldap32\
        -LD:/codetest/libcurlcpp/libcurl/lib/ -lopencv\
        -LD:/codetest/libcurlcpp/libcurl/lib/ -lzmq

或者

LIBS += D:/codetest/libcurlcpp/libcurl/lib/libcurl.lib\
        D:/codetest/libcurlcpp/libcurl/lib/ws2_32.lib\
        D:/codetest/libcurlcpp/libcurl/lib/wldap32.lib
        D:/codetest/libcurlcpp/libcurl/lib/opencv.a

或者(只适用于windows静态库)

LIBS += $$PWD/libcurl/lib/libcurl.lib\
        $$PWD/libcurl/lib/ws2_32.lib\
        $$PWD/libcurl/lib/wldap32.lib

原来想能不能直接像ubuntu那样直接后面加pkg-config --cflags --libs gstreamer-1.0就很方便的编译了,结果不行的,只能一个个添加库。
3、模板变量 TEMPLATE
告诉qmake生成哪种makefile

TEMPLATE = app

app -表示该工程建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用
lib - 表示该工程建立一个库的makefile
4、编译选项 CONFIG
增加或者移除某个模块,可以用空格分隔或者""来隔行

CONFIG += console c++11 network
CONFIG -= qt

5、工程中包含的头文件
表示本工程中的头文件

HEADERS += \
    libcurl/curl/curl.h \
    libcurl/curl/curlbuild.h \
    libcurl/curl/curlrules.h \

6、工程中包含的源文件
表示本工程中的源文件

SOURCES += mytest.cpp\
           main.cpp

在Qt中写代码要调用gstreamer的库,按教程中的操作。这里我搞了半天,进行如下补充:
下载的gstreamer有好多文件夹,里面有不同的库,要让Qt找的到路径main.c里面的头文件才不会报错找不到。
windows下会奇奇怪怪的报错,在超好的学长的帮助下,ubuntu下现在是能用了,.pro文件如下(这里创建的是不包含Qt的project):


TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt


LIBS    +=-lglib-2.0
LIBS    +=-lgobject-2.0
LIBS    +=-lgstreamer-1.0          # <gst/gst.h>
LIBS    +=-lgstvideo-1.0             # <gst/video/videooverlay.h>
LIBS    +=-L/usr/lib/x86_64-linux-gnu/gstreamer-1.0

INCLUDEPATH += \
             /usr/include/glib-2.0 \
             /usr/include/glib-2.0/glib \
             /usr/lib/x86_64-linux-gnu/glib-2.0/include \
             /usr/include/gstreamer-1.0 \
             /usr/lib/x86_64-linux-gnu/gstreamer-1.0/include/



SOURCES += main.c

CONFIG += c++11

你可能感兴趣的:(gstreamer,qt,ubuntu)