Mac环境下使用Clion编译测试运行Ffmpeg

文章目录

  • 一、编译项目
  • 二、导入到Clion中
    • 1. C++ 版本
    • 2. C语言版本
  • 三、参考链接:

一、编译项目

如果想基于FFmpeg开发的话,虽然可以使用文本进行开发,但是使用开发工具的话无疑更为方便,比如可以查看源码,并且调试也更为方便
首先从官网或者github下载源码
然后参考以下链接:
https://ffmpeg.org/doxygen/trunk/md_INSTALL.html
编译安装ffmpeg。这里面如果自己不熟悉的话不要自己创建额外的文件,比如c文件或者makefile文件,因为整个项目会一起编译,如果环境不对会出现错误
然后中间会把编译的库文件安装到 /usr/local/下面,需要进行授权,出现权限拒绝时候,执行类似于以下的命令进行授权
sudo chmod -R 777 /usr/local/share
这个默认安装路径可以在configure文件里面进行修改,打开文件后查找prefix_default="/usr/local", 然后将后面的路径修改为别的位置,然后重新执行configure命令进行配置,然后重新进行构建,重新编译即可。这个路径最好不要设置在ffmpeg源码下面。
以上的整个执行命令的步骤为:

  1. ./configure
  2. make
  3. make install

二、导入到Clion中

先创建C++项目,C项目也行。使用CmakeList进行构建,使用Makefile构建也行。不过最好是用C语言来写,要不然把C代码转换成C++还是有点麻烦的。这里贴出两个版本:
这里解释一个概念,&表示内存引用,*表示内存地址,** 在有的时候表示动态数组,***有的时候表示指向动态数组的内存地址。
比如如下代码:

void testAddress(){
char **si; //定义一个动态数组
char ***ss = *si; //定义一个指向动态数组的指针
}

1. C++ 版本

CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 3.25)
project(ffmpegTest)

set(CMAKE_CXX_STANDARD 17)

# 以下路径是ffmpeg编译安装后的路径
set(FFMPEG_PATH /Users/ym/Work/CPlusPlusWorkSpack/FFmpegCompile/local)

include_directories(${FFMPEG_PATH}/include/) # 头文件搜索路径
link_directories(${FFMPEG_PATH}/lib/) # 动态链接库或静态链接库的搜索路径

add_executable(ffmpegTest main.cpp)

//以下是要关联的库
target_link_libraries(
        ffmpegTest //这是自己的执行的库,名字和上述定义的一致,下面是ffmpeg编译出的库
        avcodec
        avdevice
        avfilter
        avformat
        avutil
        swresample
        swscale
)

main.cpp 这里使用c++编写代码调用C语言代码

#include 
extern "C" {
    #include "libavcodec/avcodec.h"
    #include
}

int main() {
    std::cout << "avdevice_license-->" << avdevice_license() << std::endl;
    std::cout << avcodec_configuration();
    return 0;
}

2. C语言版本

CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 3.25)
project(FFmpegTestC C)

set(CMAKE_C_STANDARD 17)

# 以下路径是ffmpeg编译安装后的路径
set(FFMPEG_PATH /Users/ym/Work/CPlusPlusWorkSpack/FFmpegCompile/local)

include_directories(${FFMPEG_PATH}/include/) # 头文件搜索路径
link_directories(${FFMPEG_PATH}/lib/) # 动态链接库或静态链接库的搜索路径

add_executable(FFmpegTestC main.c)

target_link_libraries(
       FFmpegTestC
       avcodec
       avdevice
       avfilter
       avformat
       avutil
       swresample
       swscale
)

macin.c

#include 
#include "libavcodec/avcodec.h"
#include 

void iterateMimeType(AVCodecDescriptor *desc){
    if (desc == NULL){
        return;
    }
    const char *const *const mime_types = desc->mime_types; //这是个数组类型
    if (mime_types == NULL){
        return;
    }
    char** current_str = mime_types;
    while (*current_str != NULL) {
        printf("类型:%s\n", *current_str);
        current_str++;
    }
}

void iterateCodec() {
    const AVCodecDescriptor *desc = NULL;
    const AVCodecDescriptor **codecs;
    unsigned nb_codecs = 0, i = 0;
    while ((desc = avcodec_descriptor_next(desc))) {//这个在最后一次会赋值为null
        nb_codecs++; //计算有多少个编码器
        enum AVCodecID avCodecId = desc->id;
        enum AVMediaType avCodecType = desc->type;
        const char *avCodecName = desc->name;
        const char *avCodecLongName = desc->long_name;
        iterateMimeType(desc);
    }
}

int main() {
    const char *license = avdevice_license();
    const char *config = avcodec_configuration();
    printf("avdevice_license-%s->\n", license);
//    printf("avcodec_configuration-%s->\n",config);
    iterateCodec();
    return 0;
}

三、参考链接:

  1. macOS clion ffmpeg 配置

你可能感兴趣的:(C++,ffmpeg,macos)