目录
1、 安装完QT后,我们自己的声卡驱动有可能无法采集声音,这里有个妙招:
4.1 QT没有多媒体库,QAudioDeviceInfo 找不到设备怎么办?
17、QObject::connect: Cannot queue arguments of type "xxx"
最新的ffmpeg安装和下载地址可以参考这个链接,当然本文所介绍的方法更细节。
树莓派3B+ 编译使用ffmpeg-4.1 libx264以及在QT中的集成_Stay Hungry Stay Foolish-CSDN博客
可以参考上述文章。
1、 安装完QT后,我们自己的声卡驱动有可能无法采集声音,这里有个妙招:
安装audacity 软件,将依赖的库补充齐全。
2、安装fdk-aac:
在安装ffmpeg前,需要安装fdk-aac,因为最新版的ffmpeg在使用AAC编码时会出现不支持s16的PCM编码的情况:
下载地址: https://www.linuxfromscratch.org/blfs/view/svn/multimedia/fdk-aac.html
目标机器上缺省configure之后make会出现共享代码相关的错误,需要加上一些参数:
./configure CFLAGS=-fPIC
sudo make -j4
sudo make install
3、安装ffmpeg:
直接安装是无法生成ffplay的,少驱动,安装:
sudo apt-get install libsdl2-dev
然后再配置,再编译和安装。
配置的时候需要加上aac等:
./configure --arch=armel --target-os=linux --enable-shared --enable-libx264 --enable-omx --enable-omx-rpi --enable-encoder=h264_omx --enable-mmal --enable-hwaccel=h264_mmal --enable-decoder=h264_mmal --enable-libfdk-aac --enable-nonfree --enable-gpl --extra-ldflags="-latomic"
配置完就会出现:
Programs:
ffmpeg ffplay ffprobe
然后再编译安装:
sudo make -j4
sudo make install
测试:播放网络摄像仪图像。
rtsp://admin:hxxxyx503@192.168.1.200:554/h264/ch1/sub/av_stream
【错误解决方案】有的版本ffmpeg配置的时候会提示:
ERROR: --enable-hwaccel=h264_mmal did not match anything
这个无所谓,默认就是开启h264硬件加速的,不用担心,可以忽略.
提示 ERROR: OMX_Core.h not found,解决方法:
sudo apt-get install libomxil-bellagio-dev
安装后即可消除报错。
4、编程注意事项
QT中使用QFile代替FILE,一样可以用。
使用AAC编解码器时,调用方法:
codec = avcodec_find_encoder_by_name("libfdk_aac");
PCM文件使用QFile读入,分帧存储使用 std::memcpy更加方便,将PCM编码拷贝至AVFrame的data中。
4.1 QT没有多媒体库,QAudioDeviceInfo 找不到设备怎么办?
因为没有安装插件,安装插件:
sudo apt-get install libqt5multimedia5 libqt5multimedia5-plugins
5、程序发布
.pro文件中添加:
TEMPLATE = app QMAKE_LFLAGS += -no-pie
依赖库可以拷贝到可执行文件夹内,也可以添加到路径中:
拷贝: sudo cp /usr/local/lib/xxx.so sssssssss/ // xxx.so是动态库,sssssssss/ 是可执行程序的文件夹
添加动态库地址: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:XXX // XXX是动态库的路径,一般是 /usr/local/lib
6、执行程序
命令行cd到目标文件夹,执行:
./xxxx // xxxx是可执行程序名
如果不行,添加一下可执行权限:
sudo chmod 777 xxxx
7、自启动
cd ~/.config
sudo mkdir autostart
cd autostart
sudo nano xxxxx.desktop
输入:
[Desktop Entry]
Exec=/home/pi/yyyyyyyy
Type=Application
其中,yyyyyy是可执行文件名
ctrl+X enter Y 保存退出
sudo reboot
8、QT全屏显示
setWindowState(Qt::WindowFullScreen);
9、触屏校准
树莓派 触摸屏_树莓派加装3.5寸触摸屏方法和触摸屏问题处理_weixin_39632467的博客-CSDN博客
按照上面博客进行安装xinput-calibrator。注意~!!!需要校准两次,使用第二次的结果。
没有/etc/X11/xorg.conf.d/99-calibration.conf 的话需要自己创建。
10、LCD和HDMI切换
树莓派 触摸屏_树莓派加装3.5寸触摸屏方法和触摸屏问题处理_weixin_39632467的博客-CSDN博客
参考这个博客安装LCD驱动,使用下面进行切换。
cd LCD-show
sudo ./LCD35-show
sudo ./LCD-hdmi
11、QT float转QString
float tmp=1.25;
QString str = QString( "'%1" ).arg( tmp, 0, 'f', 2 );
e - 格式化为[-]9.9e[+|-]999
E - 格式化为[-]9.9E[+|-]999
f - 格式化为[-]9.9
g - 使用e或f格式,看哪一个更简练
G - 使用E或f格式,看哪一个更简练
12、替换字符串中的特定字符
QString str="123123/fdd/ssss.mp3";
str.replace("123123",""); // 这是删掉123123这个字符串
13、按钮关闭程序
直接在槽函数中添加:
close();
即可。
如果需要确认,则需要重写 虚函数:
closeEvent();
14、状态栏
QLabel *label1; ui->statusBar->addWidget(label1); // 左侧添加状态 ui->statusBar->addPermanentWidget(label1); //右侧添加状态
15、树莓派4B耳机没声音
需要在raspi-config中设置一下
终端输入 sudo raspi-config 选择 1 System Options ,enter,然后选择 S2 Audio,enter,然后选2 headphones, enter,然后箭头右,光标到finish,enter。
使用audacity播放没声音,那就需要选择一下播放设备。
16、双击不启动问题
我参考的是这个博客,很管用,用的是第二阶段。
linux下QT发布程序双击打不开解决方法_架相的博客-CSDN博客_linux qt打不开
将可执行程序当前路径加到如下配置文件(依赖库一般和可执行程序在同级目录)
/etc/ld.so.conf
sudo ldconfig // 使设置生效
17、QObject::connect: Cannot queue arguments of type "xxx"
这是因为这个数据类型不是QT自带的,需要在信号发送者和接受者的文件内进行声明和注册:
在头文件中包含:
#include <QMetaType>
在.cpp的构造函数中注册该类型:
qRegisterMetaType<Mat>("Mat"); //这里是opencv的Mat类型,需要声明命名空间才可以直接使用Mat,否则需要使用cv::Mat。