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

重要函数

  • 打开文件夹: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`

posted @ 2019-12-31 10:23  FANDX  阅读(456)  评论(0编辑  收藏  举报