文章目录
- 日志输出操作
- 文件的删除与重命名
- 操作目录实现
- 实现简单的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;
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;
}