FFmpeg开发过程杂记(待整理)

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();

事件循环

//不停地处理事件,让界面主程序保持响应        
QCoreApplication::processEvents();
//忽略用户的输入(鼠标和键盘事件)
QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);

QT 中文乱码问题

  • Windows环境下,Qt Creator+微软VC++编译器,新建工程
#if defined(_MSC_VER) && (_MSC_VER >= 1600)    
# pragma execution_character_set("utf-8")    
#endif
#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";

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值