zoukankan      html  css  js  c++  java
  • 如何使用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
    ", 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
    ", av_err2str(ret));
          // return -1; 这里直接退出可能会忘记文件的退出,照成内存泄漏,使用goto
          goto __fail;
        }
        // 如果读取成功,需要判断一下entry
        if(!entry){
          break;
        }
        // 打印文件信息, PRId64 是 64的宏信息
        av_log(NULL, AV_LOG_INFO, "%12"PRId64" %s 
    ",
              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`

  • 相关阅读:
    Git-更新数据
    iOS开发-基本的网络知识
    iOS开发-单例模式
    iOS开发-多线程知识
    iOS开发-核心动画随笔
    iOS开发-关于网络状态的判断
    毕业设计--天气预报App
    iOS开发-UIColor转UIIamge方法
    iOS开发-用预处理指令代替注释
    JMS 消息服务
  • 原文地址:https://www.cnblogs.com/fandx/p/12123085.html
Copyright © 2011-2022 走看看