当前位置:   article > 正文

音视频开发4-补充 ubuntu安装qt5,qt5上使用ffmpeg,ubuntu 上安装sdl,

音视频开发4-补充 ubuntu安装qt5,qt5上使用ffmpeg,ubuntu 上安装sdl,

1. 环境搭建前说明

本节基于安装完成ffmpeg后的操作。
如果不使用ffmpeg,可以不用安装ffmpeg,文章参考之前的博客: 音视频开发4-补充 FFmpeg 开发环境搭建 -- 配置环境 Ubuntu 22.04.2 LTS +FFmpeg 7.0

2 安装qt-5.12.10

安装QT
下载地址: https://download.qt.io/archive/qt/
下载地址: https://download.qt.io/archive/qt/5.12/5.12.10/

3. 将下载好的文件从windows上移动到linux

下载好的文件qt安装文件是在windows上的,那么就需要将可执行文件放到linux上执行。

这里是通过vmware的共享文件夹 实现的,将windows下的D:\linuxgongxiang 文件夹下的会自动映射到linux 下的 /mnt/hgfs/linuxgongxiang

4.给该文件 可执行权限

chmod +x qt-opensource-linux-x64-5.12.10.run

5.运行安装文件

然后运行 ./qt-opensource-linux-x64-5.12.10.run

6.启动安装完成后的可执行文件

运行完毕后,在/home/hunandede/qt/Qt5.12.10/Tools/QtCreator/bin 中可以启动 qtcreator
./qtcreator

7. 第一次运行会有问题,报错如下

ubuntu安装qt5 Could not load the Qt platform plugin "xcb" in ""
even though it was found.
https://blog.csdn.net/u012768805/article/details/98756925

8. fix 方案

需要安装:
sudo apt install --reinstall libxcb-xinerama0

9.以sudo 执行没有问题

./qtcreator  无法打开 qtcreator

sudo ./qtcreator  正确打开 qtcreator

10.直接执行./qtcreator

Ubuntu16.04打开Qt显
示/home/user/ .config /QtProject/qtcreator/qtversion.xml :
Permission denied
权限不够所导致,执⾏命令 sudo chown -R user:user ~/.config/ 即可解决。
默认需要使⽤sudo权限启动
不是sudo权限也能启动则需要修改权限
2 语法:sudo chown -R username:username ~/.config/
⽐如我的ubuntu:
sudo chown -R hunandede:hunandede ~/.config/

11.QT使⽤FFmpeg

之前我们在ubutun 上的build 的ffmpeg 的路径是:

/home/hunandede/ffmpeg_build

其中bin 下放的是 x265的可执行文件

include 目录下放的是 .h文件

lib 下放的是 动态库文件

因此要在 .pro文件中设置 INCLUDEPATH,表示我在代码中使用到的 头文件 会在如下的路径中查找

还要在.pro 文件中,设置LIBS,表示我运行时要使用的 静态库 或者 动态库 会在如下的文件中查找。

当前测试中,由于ffmpeg 是我们自己build 的 静态库,因此写法如下:

12. 代码举例

  1. TEMPLATE = app
  2. CONFIG += console
  3. CONFIG -= app_bundle
  4. CONFIG -= qt
  5. SOURCES += \
  6. main.c
  7. INCLUDEPATH += /home/hunandede/ffmpeg_build/include
  8. LIBS += /home/hunandede/ffmpeg_build/lib/libavcodec.a \
  9. /home/hunandede/ffmpeg_build/lib/libavdevice.a \
  10. /home/hunandede/ffmpeg_build/lib/libavfilter.a \
  11. /home/hunandede/ffmpeg_build/lib/libavformat.a \
  12. /home/hunandede/ffmpeg_build/lib/libavutil.a \
  13. /home/hunandede/ffmpeg_build/lib/libswresample.a \
  14. /home/hunandede/ffmpeg_build/lib/libswscale.a

  1. #include <stdio.h>
  2. // 包含ffmpeg头⽂件
  3. #include "libavutil/avutil.h"
  4. int main()
  5. {
  6. printf("Hello World!\n");
  7. printf("Hello FFMPEG, version is %s\n", av_version_info());
  8. return 0;
  9. }

结果:

  1. 11:04:37: Starting /home/hunandede/build-demo01_c-Desktop_Qt_5_12_10_GCC_64bit-Debug/demo01_c ...
  2. Hello World!
  3. Hello FFMPEG, version is 7.0

13. 后续TODO:使用动态库的时候,是否只需要将.a文件换成.so文件呢?不是,因为动态库的加载

LIBS += /home/hunandede/ffmpeg_build/lib/libavcodec.so \
/home/hunandede/ffmpeg_build/lib/libavdevice.a \
/home/hunandede/ffmpeg_build/lib/libavfilter.a \
/home/hunandede/ffmpeg_build/lib/libavformat.a \
/home/hunandede/ffmpeg_build/lib/libavutil.a \
/home/hunandede/ffmpeg_build/lib/libswresample.a \
/home/hunandede/ffmpeg_build/lib/libswscale.a

14. linux 下安装sdl2

1. 下载SDL源码库,SDL-release-2.30.3
2. 解压,然后依次执⾏命令
./autogen.sh
./configure --prefix=/home/hunandede/ffmpeg_build --bindir = /home/hunandede/ bin
make
sudo make install

--prefix选项是配置安装的路径,一般 .h文件,静态库,动态库文件都会在这个目录下。

--bindir 选项指定二进制文件的安装位置,这里的二进制文件定义为可以被用户直接执行的程序

15. sdl2的使用

  1. INCLUDEPATH += /home/hunandede/ffmpeg_build/include
  2. LIBS += /home/hunandede/ffmpeg_build/lib/libSDL2.a

  1. #include <stdio.h>
  2. // 包含ffmpeg头⽂件
  3. #include "libavutil/avutil.h"
  4. #include <SDL2/SDL_version.h>
  5. #include <SDL2/SDL_log.h>
  6. int main()
  7. {
  8. printf("Hello World!\n");
  9. printf("Hello FFMPEG, version is %s\n", av_version_info());
  10. SDL_version compiled;
  11. SDL_version linked;
  12. SDL_VERSION(&compiled);
  13. SDL_GetVersion(&linked);
  14. SDL_Log("We compiled against SDL version %u.%u.%u ...\n",
  15. compiled.major, compiled.minor, compiled.patch);
  16. SDL_Log("But we are linking against SDL version %u.%u.%u.\n",
  17. linked.major, linked.minor, linked.patch);
  18. return 0;
  19. }

16. linux_2-sdl-basic项⽬  linux_2-sdl-yuv  TODO

17. windows 中搭建 QT环境 

音视频开发4 FFmpeg windows 环境搭建,QT 安装,动态库的搜索路径-CSDN博客

在这个博客中,有更多的加载静态库和动态库的方法。如果在开发中遇到问题,请也要参考这个文章。

其核心区别是:如果指定的是动态库,例如:libavcodec.dll.a,还需要指定真正的使用到的动态库的路径,因为.dll.a 的作用是:用于MinGW编译器中(MinGW gcc/g++,MinGW则是指Minimalist GNU for Windows的缩写),并不是真正的dll的

.dll.a ,   ffmpeg中的 .lib 并不存放真正的函数代码本体
只是包含了函数所在的DLL文件和文件中 函数位置的信息(索引),函数实现代码由运行时加载在进程空间中的DLL提供

因此还需要指定真正使用的 dll 的具体位置,在这之前,还需要了解dll 在windows 的加载顺序问题。下图的写法是将要用到的dll 的

18   .dll、.lib、.dll.a  .so 文件   .a 的区别

windows 下:

  静态库:提供2分文件:

  (1).h 文件【包含lib中输出的类,以及函数原型】, 需要将该文件包含如“程序源文件”中

  (2).lib静态文件【包含对函数的声明与实现】  编译期间使用, 最终放入exe执行文件中,且最终的exe文件较大;

  因此:自己可以逐步把自己用gcc编译源文件生成的obj文件通过tlib命令加入到一个lib文件中,也可以把lib文件内的obj文件进行删除操作,还可以把内部的obj文件给提取出来。

 动态库:提供3分文件:

  (1).h文件【包含dll输出类型,以及函数原型】, 需要将文件包含入“程序源文件”中

  (2).lib静态导入文件【只包含对实现部分dll的导出声明】是编译器生成dll时自动生成的lib文件。

  (3).dll动态库【函数的实现部分】  “编译阶段”使用lib, 运行期间使用dll,因此如果要通过源码的编译,则需要lib库引入,如果要后续生成的执行文件运行起来,则需要dll放在exe的同目录下,最终的exe文件较小;

 

静态库的lib:即包括函数实现的声明索引信息,也有函数实现内容;  其实质是:多个obj文件的集合, obj文件是源码cpp文件“编译”后生成的obj。因此在编译静态库是根本不会出现“链接问题错误”;

动态库的lib:是在【编译-连接】生成dll后生成的文件。只包含函数实现的声明索引信息,不是obj文件的集合,只记录了dll文件中的函数的入库和地址信息,dll文件是函数的具体实现部分。

里面有三种文件后缀分别为:.lib、.def、.dll.a 。
.def:暂时还不太清楚。
.lib:用于MSVC编译器中 (MSVC 微软自己的编译器)
.dll.a:用于MinGW编译器中(MinGW gcc/g++,MinGW则是指Minimalist GNU for Windows的缩写)

这三个文件里面并不存放真正的函数代码本体
只是包含了函数所在的DLL文件和文件中 函数位置的信息(索引),函数实现代码由运行时加载在进程空间中的DLL提供

linux  下:

.a 就是 linux 中的静态库

.so 就是 linux 中的动态库

19 dll 的加载问题

exe在寻找dll文件时,大概按照以下优先级顺序去查找(这里只列出了大概的搜索路径,并没有写全):

exe所在的目录

Windows的System目录

C:/Windows/System
C:/Windows/System32
Windows目录

C:/Windows
环境变量Path中的路径

所以可以考虑将%FFMPEG_HOME%/bin目录配置到Path变量中
置于如何配置Windows的环境变量Path,这是基本开发常识了,就不再讲解了


第1种方式需要在每一个Qt程序中都拷贝一份FFmpeg的dll文件,

第2~4种方式可以让多个Qt程序共用同一份FFmpeg的dll文件。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/611039
推荐阅读
相关标签
  

闽ICP备14008679号