FFmpeg 初级操作—打印日志,文件目录操作
日志输出操作
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 unix
epoch, -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 unix
epoch, -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;
}
原文地址:https://blog.csdn.net/weixin_46999174/article/details/140289247
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!