您的位置:首页 > 房产 > 家装 > FFmpeg 初级操作—打印日志,文件目录操作

FFmpeg 初级操作—打印日志,文件目录操作

2024/10/6 22:23:40 来源:https://blog.csdn.net/weixin_46999174/article/details/140289247  浏览:    关键词:FFmpeg 初级操作—打印日志,文件目录操作

文章目录

    • 日志输出操作
    • 文件的删除与重命名
    • 操作目录实现
      • 实现简单的ls命令—代码实现

日志输出操作

FFmpeg 提供了一套LOG操作,基本上和printf用法差不多,如下方所示

#include<stdio.h>
#include<libavutil/log.h>
int main(int argc, char * argv[]){av_log_set_level(AV_LOG_DEBUG);//基本上可以当作 printf来用av_log(NULL,AV_LOG_INFO,"hello ffmpeg log %d\n",123);return 0;
}

文件的删除与重命名

avpriv_io_delete()

这个函数的作用是用来删除文件的,其具体实现可能会依赖于FFmpeg当前的环境和构建选项。它通常在FFmpeg的内部代码中使用,用于处理一些特定的文件删除需求,可能会涉及更底层的文件系统操作或者特定的编解码器功能。

avpriv_io_remove()

参数

  • const char *url: 需要删除的文件的路径。

返回值

  • 成功删除文件时返回 0
  • 如果删除文件失败,返回一个负数的错误码。

操作目录实现

相关操作API:

1.avio_open_dir

参数

  • AVIODirContext **s:
    • 指向目录上下文的指针。该指针在函数成功返回后会指向一个有效的 AVIODirContext,用于后续的目录操作。
  • const char *url:
    • 要打开的目录的路径。可以是本地文件系统路径,也可以是支持的协议路径。
  • AVDictionary **options:
    • 选项字典,包含用于打开目录的其他选项。可以为 NULL 表示没有额外选项。常用于传递特定协议的参数。

返回值

  • 成功时返回 0
  • 失败时返回负数的错误码。

2.int avio_read_dir(AVIODirContext *s, AVIODirEntry **next);

参数

  • AVIODirContext *s:
    • 目录上下文指针。这个指针是通过之前调用 avio_open_dir 获得的。
  • AVIODirEntry **next:
    • 指向指针的指针。这个指针在成功读取后会指向一个有效的 AVIODirEntry,表示目录中的下一个条目。

返回值

  • 成功时返回 0,并将 next 指向一个新分配的 AVIODirEntry 结构体。
  • 目录读取完毕时返回 0,并将 next 设置为 NULL
  • 失败时返回负数的错误码。

注: AVIODirEntry 结构体 存放文件名,文件大小等相关属性

typedef struct AVIODirEntry {char *name;                           /**< Filename */int type;                             /**< Type of the entry */int utf8;                             /**< Set to 1 when name is encoded with UTF-8, 0 otherwise.Name can be encoded with UTF-8 even though 0 is set. */int64_t size;                         /**< File size in bytes, -1 if unknown. */int64_t modification_timestamp;       /**< Time of last modification in microseconds since unixepoch, -1 if unknown. */int64_t access_timestamp;             /**< Time of last access in microseconds since unix epoch,-1 if unknown. */int64_t status_change_timestamp;      /**< Time of last status change in microseconds since unixepoch, -1 if unknown. */int64_t user_id;                      /**< User ID of owner, -1 if unknown. */int64_t group_id;                     /**< Group ID of owner, -1 if unknown. */int64_t filemode;                     /**< Unix file mode, -1 if unknown. */
} AVIODirEntry;
  1. avio_close_dir(&ctx);

关闭目录,释放相关资源

实现简单的ls命令—代码实现

#include <libavformat/avio.h>
#include <libavutil/log.h>int main() {AVIODirContext *ctx = NULL;AVIODirEntry *entry = NULL;int ret;// 打开目录if ((ret = avio_open_dir(&ctx, "./", NULL)) < 0) {av_log(NULL, AV_LOG_ERROR, "Cannot open directory: %s\n", av_err2str(ret));return ret;}// 读取目录项while (1) {if ((ret = avio_read_dir(ctx, &entry)) < 0) {av_log(NULL, AV_LOG_ERROR, "Cannot read directory: %s\n", av_err2str(ret));break;}if (!entry)break;av_log(NULL, AV_LOG_INFO, "Name: %s, Size: %" PRId64 "\n", entry->name, entry->size);avio_free_directory_entry(&entry); // 释放目录项}// 关闭目录avio_close_dir(&ctx);return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com