自学内容网 自学内容网

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;

  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;
}


原文地址:https://blog.csdn.net/weixin_46999174/article/details/140289247

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!