【音视频基础】MediaInfo在VS2019下的编译和使用

原文链接:https://blog.csdn.net/weixin_41001497/article/details/118109413

准备工作

下载源码 下载地址

img

img

MediaInfo编译

将下载好的压缩包进行解压,用VS打开MediaInfoLib.sln,生成解决方案(我选择的是Release版本,64位)

img

此时出现报错

img

打开Visual Studio Installer,点击修改,勾选最新版本的SDK,进行更新。

img

更新完毕,重新打开项目,点击项目→重定解决方案,选择刚才下载的Windows SDK

img

点击生成→重新生成解决方案,成功

img

现在vs项目目录下会出现编译好的MediaInfo.dll和MediaInfo.lib文件

img

在Source/MediaInfoDLL目录下找到需要引入到我们自己项目中的MediaInfoDLL.h文件

img

MediaInfo的使用

我的需求是在Qt项目中使用MediaInfo,看了不少文章,在vs项目中都是直接include头文件,添加lib和dll,再声明命名空间就可以使用MediaInfo类,但我直接在Qt里面这样做会报错,具体什么原因没有找到,但参考某位大佬的博文,对MediaInfo类进行封装,就可以正常使用了。

首先,先把MediaInfo.dll添加到应用程序所在的路径下(这个路径具体是哪里因个人设定而异),

img

其次,将MediaInfo.lib放到你想放的位置,然后在.pro文件中用LIBS +=语句引入,这里我还是将lib文件放到应用程序所在的目录

img

img

最后,将MediaInfoDLL.h文件放到你想要的位置,并在.pro文件中引入这个文件或者这个文件所在的文件夹,这里我用INCLUDEPATH +=语句将MediaInfoDLL.h所在的目录引入,那么这个目录下的所有.h文件都会被包含进来

img

img

做完这些工作,还需要实现一个MediaInfoHelper类来对MediaInfo进行封装才能使用,以下的代码是参考这位大佬的原文指路

//MediaInfoHelper.h
#ifndef MEDIAINFOHELPER_H
#define MEDIAINFOHELPER_H

#define _UNICODE  //在Qt项目中必须增加这一句,否则无法匹配字符编码,编译出错; vs项目中如果设置了"常规 - 字符集 - 使用 Unicode 字符集" 可不要这句。

#include "MediaInfoDLL.h"

#ifdef MEDIAINFO_LIBRARY
#include "MediaInfo/MediaInfo.h" //Staticly-loaded library (.lib or .a or .so)
#define MediaInfoNameSpace MediaInfoLib;
#else //MEDIAINFO_LIBRARY
//#include "MediaInfoDemo.h" //Dynamicly-loaded library (.dll or .so)
#define MediaInfoNameSpace MediaInfoDLL;
#endif //MEDIAINFO_LIBRARY
#include <iostream>
#include <iomanip>
using namespace MediaInfoNameSpace


#ifdef __MINGW32__
#ifdef _UNICODE
#define _itot _itow
#else //_UNICODE
#define _itot itoa
#endif //_UNICODE
#endif //__MINGW32

#include <QString>
class HMediaInfoHelper
{
    struct HMediaInfo
    {
      int width;   //宽
      int height;  //高
      int duration; //时长
      double frameRate;  //帧率
      double bitRate;   //比特率
      QString completeInfo; //常规信息
      HMediaInfo(){
          width = 0;
          height = 0;
          duration = 0;
          frameRate = 0.0;
          bitRate = 0.0;
      }
    };
public:
    HMediaInfoHelper();

    /**
    * @brief 获取媒体信息
    * @param mediaFile 媒体文件名
    * @param mediaType 媒体类型  -1general  0图片 1视频 2音频
    * @return
    */
    HMediaInfo GetMediaInfo(QString mediaFile,int mediaType = -1);
};

#endif // MEDIAINFOHELPER_H
//MediaInfoHelper.cpp
#include "MediaInfoHelper.h"

HMediaInfoHelper::HMediaInfoHelper()
{

}

HMediaInfoHelper::HMediaInfo HMediaInfoHelper::GetMediaInfo(QString mediaFile, int mediaType)
{
    //参数0-图片,1-视频,2-音频,3-通用
    HMediaInfo res;
    MediaInfo MI;
    auto temp = mediaFile.toStdWString();
    auto desFile = temp.c_str();
    MI.Open(desFile);
    MI.Option(__T("Complete"), __T("1"));
    stream_t streamType = Stream_General;
    if (mediaType == 0) {
        streamType = Stream_Image;
    } else if (mediaType == 1) {
        streamType = Stream_Video;
    }else if(mediaType == 2){
        streamType = Stream_Audio;
    } else {
        streamType = Stream_General;
    }
    auto comp = QString::fromStdWString((std::basic_string<wchar_t>)MI.Inform()); //不获取该条信息可减少时间消耗
    auto wid = QString::fromStdWString((std::basic_string<wchar_t>)MI.Get(streamType, 0, __T("Width"))).toInt();
    auto hei = QString::fromStdWString((std::basic_string<wchar_t>)MI.Get(streamType, 0, __T("Height"))).toInt();
    auto dur = QString::fromStdWString((std::basic_string<wchar_t>)MI.Get(streamType, 0, __T("Duration"))).toInt();
    auto frameRate = QString::fromStdWString((std::basic_string<wchar_t>)MI.Get(streamType, 0, __T("FrameRate"))).toDouble();
    auto bitRate = QString::fromStdWString((std::basic_string<wchar_t>)MI.Get(streamType, 0, __T("BitRate"))).toDouble();
    MI.Close();
    res.completeInfo = comp;
    res.width = wid;
    res.height = hei;
    res.duration = dur;
    res.frameRate = frameRate;
    res.bitRate = bitRate;
    return res;
}

在需要使用MediaInfo功能的地方引入MediaInfoHelper头文件,声明HMediaInfoHelper对象即可

//main.cpp
#include "MediaInfoHelper.h"
void main()
{
    HMediaInfoHelper helper;
    auto info = helper.GetMediaInfo("D:/11111.mp4",1);	//获取该视频文件的信息
    return;
}

相关资源下载

【P.S】编译环境为windows 10 VS2019,版本为64位Release 编译好的dll、lib、h文件

> 音视频开发视频教程:https://ke.qq.com/course/3202131?flowToken=1031864
> 音视频开发学习资料、教学视频,有需要的可以自行添加学习交流群:739729163 领取
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值