FFmpeg开发过程杂记(待整理)
- Qt FFmpeg环境配置
- pro文件
#自己的SDK包 LIBS += $$PWD/lib/xxxxxx.lib #windows lib库 LIBS += -lWs2_32 #ffmpeg库 INCLUDEPATH += $$PWD/include LIBS += $$PWD/lib/avformat.lib LIBS += $$PWD/lib/avcodec.lib LIBS += $$PWD/lib/avdevice.lib LIBS += $$PWD/lib/avfilter.lib LIBS += $$PWD/lib/avutil.lib LIBS += $$PWD/lib/postproc.lib LIBS += $$PWD/lib/swresample.lib LIBS += $$PWD/lib/swscale.lib
- 按住 Ctrl + 鼠标左键 点击库文件路径,查看是否路径正确。
- Qt Debug文件夹中添加相应的库
- 谷歌测试
- pro文件中添加
#谷歌测试 include($$PWD/googletest-master/gtest_dependency.pri)
- 添加
// test.cpp #include <gtest/gtest.h> #include <gmock/gmock-matchers.h> using namespace testing; TEST(AAA, a) { } //main.cpp #include <gtest/gtest.h> #include <gmock/gmock-matchers.h> using namespace testing; int main(int argc, char *argv[]) { QApplication a(argc, argv); ::testing::InitGoogleTest(&argc, argv); //googleTest框架 MutiClient w; w.show(); RUN_ALL_TESTS();//googleTest框架 return a.exec(); }
FFmpeg
- FFmpeg头文件引入
// 包含ffmpeg头文件 extern "C" { #include "libavutil/avutil.h" #include <libavutil/frame.h> #include <libavutil/mem.h> #include <libavcodec/avcodec.h> #include <libswscale/swscale.h> #include <libavformat/avformat.h> #include <libavutil/opt.h> #include <libavutil/imgutils.h> }
- 连接失败报警告
QMessageBox::critical(this, QString("错误"), QString("请检查登录信息!"));
- 数字转字符串
int index = 0; std::string strIndex = std::to_string(index); pItem->setText(0, strIndex.c_str());
- 数字转IP地址字符串形式
in_addr ip{}; memcpy(&ip,&(itEncoder->dwIP),sizeof(itEncoder->dwIP)); qDebug() << "IP地址:" << inet_ntoa(ip); pItem->setText(2, inet_ntoa(ip));
- QString 转 char *
std::string str = filename.toStdString(); const char* ch = str.c_str();
QT 中文乱码问题
- Windows环境下,Qt Creator+微软VC++编译器,新建工程
#if defined(_MSC_VER) && (_MSC_VER >= 1600) # pragma execution_character_set("utf-8") #endif
- 或者添加
QMAKE_CXXFLAGS += /utf-8
到您的.pro文件中- https://blog.csdn.net/libaineu2004/article/details/19245205
- QT MinGW 编译器
#include <QTextCodec> QTextCodec * codec = QTextCodec::codecForName("GBK"); pItem->setText(1, codec->toUnicode(itEncoder->szName));
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8"); QTextCodec::setCodecForLocale(utf8); QTextCodec* gbk = QTextCodec::codecForName("gbk"); //先转成Unicode QString strUnicode=gbk->toUnicode(encoderName.c_str()); //转成QByteArray QByteArray utf8_bytes= utf8->fromUnicode(strUnicode); char* chEncoderNmae= utf8_bytes.data();
测试时间
#include <time.h> //时间测试 clock_t start, finish; double duration; //使用案例 start = clock(); int got_frame{}; avcodec_decode_video2(codec_ctx, m_pFrame, &got_frame, &pkt); finish = clock(); duration = (double)(finish - start); /// CLOCKS_PER_SEC; qDebug() << "解码一帧图像消耗时间 : " << duration << "ms";