欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何使用ffmpeg的c语言sdk实现对文件夹的操作

程序员文章站 2022-06-05 17:36:43
重要函数 打开文件夹:avio_open_dir() 读取文件夹:avio_read_dir() 关闭文件夹:avio_close_dir() 结构体, 操作目录的上下文:AVIODirContext() 目录项,用于存放文件名,文件大小等信息:AVIODirEntry() 实例 vim ffmpe ......

重要函数

  • 打开文件夹:avio_open_dir()
  • 读取文件夹:avio_read_dir()
  • 关闭文件夹:avio_close_dir()
  • 结构体, 操作目录的上下文:aviodircontext()
  • 目录项,用于存放文件名,文件大小等信息:aviodirentry()

实例

vim ffmpeg_list.c

#include <libavutil/log.h>
#include <libavformat/avformat.h>

int main(int arc, char *argv[])
{
  int ret;
  
  // 文件内容上下文
  aviodircontext *ctx = null;
  // 文件信息上下文
  aviodirentry *entry = null;
  // 设置日志等级
  av_log_set_level(av_log_info);
  
  // 打开文件夹, ctx:上下文, ./当前文件夹
    ret = avio_open_dir(&ctx, "./", null);
  if (ret < 0){
    av_log(null, av_log_error, "找不到文件夹%s\n", av_err2str(ret));
    return -1;
  }
  while(1){
    // 读文件夹操作
    ret = avio_read_dir(ctx, &entry);
    // 如果读取失败
    if (ret < 0){
      av_log(null, av_log_error, "cant read dir: %s\n", av_err2str(ret));
      // return -1; 这里直接退出可能会忘记文件的退出,照成内存泄漏,使用goto
      goto __fail;
    }
    // 如果读取成功,需要判断一下entry
    if(!entry){
      break;
    }
    // 打印文件信息, prid64 是 64的宏信息
    av_log(null, av_log_info, "%12"prid64" %s \n",
          entry->size,
          entry->name);
    
    // 要进行entry的释放
    avio_free_directory_entry(&entry);
  }
    
  // 关闭文件夹
  __fail:
  avio_close_dir(&ctx);
  return 0;
}

编译:

clang -g -o list ffmpeg_list.c `pkg-config --libs liavformat libavutil`