FFmpeg日志系统、文件与目录、操作目录

本文详细介绍了FFmpeg中的日志系统设置,以及文件的删除与重命名,涉及avpriv_io_delete和avpriv_io_move函数,同时展示了如何使用avio_open_dir,avio_read_dir操作目录并实现简单的ls命令。
摘要由CSDN通过智能技术生成

目录

FFmpeg日志系统

FFmpeg文件与目录操作

FFmpeg文件的删除与重命名

FFmpeg操作目录及list的实现

操作目录重要函数

操作目录重要结构体


FFmpeg日志系统

下面看一个简单的 demo。

#include <stdio.h>
#include <libavutil/log.h>

int main(int argc,char* argv[])
{
    av_log_set_level(AV_LOG_DEBUG);

    av_log(NULL,AV_LOG_INFO,"Hello World!,%s\n","aaa");

    return 0;
}

编译运行,结果如下:

wj@ubuntu:~/FFmpeg$ gcc -g -o ffmpeg_log ffmpeg_log.c -lavutil
wj@ubuntu:~/FFmpeg$ ./ffmpeg_log 
Hello World!,aaa

FFmpeg文件与目录操作

FFmpeg文件的删除与重命名

  1. 文件删除函数:avpriv_io_delete()
  2. 文件重命名:avpriv_io_move()

来看一个 demo

#include <stdio.h>
#include <libavformat/avformat.h>

int main(int argc,char* argv[])
{
    int ret = 0;

    ret = avpriv_io_move("111.txt","222.txt");
    if(ret < 0)
    {
        av_log(NULL,AV_LOG_ERROR,"Failed to rename\n");
    }
    av_log(NULL,AV_LOG_INFO,"Success to rename\n");


    //delete url
    ret = avpriv_io_delete("./mytestfile.txt");
    if(ret<0)
    {
        av_log(NULL,AV_LOG_ERROR,"Failed to delete file mytestfile.txt\n");
        return -1;
    }
    av_log(NULL,"Success to delete mytestfile.txt");

    return 0;
}

sudo apt-get install libavformat-dev

wj@ubuntu:~/FFmpeg$ gcc -g -o ffmpeg_del ffmpeg_file.c -lavformat -lavutil
ffmpeg_file.c: In function ‘main’:
ffmpeg_file.c:8:11: warning: implicit declaration of function ‘avpriv_io_move’ [-Wimplicit-function-declaration]
    8 |     ret = avpriv_io_move("111.txt","222.txt");
      |           ^~~~~~~~~~~~~~
ffmpeg_file.c:18:11: warning: implicit declaration of function ‘avpriv_io_delete’ [-Wimplicit-function-declaration]
   18 |     ret = avpriv_io_delete("./mytestfile.txt");
      |           ^~~~~~~~~~~~~~~~
wj@ubuntu:~/FFmpeg$ ./ffmpeg_del 
Success to rename
Failed to delete file mytestfile.txt

FFmpeg操作目录及list的实现

操作目录重要函数

  1. avio_open_dir()
  2. avio_read_dir()
  3. avio_close_dir()

操作目录重要结构体

  1. AVIODirContext     操作目录的上下文
  2. AVIODirEntry         目录项。用于存放文件名,文件大小等信息。

实战:实现一个简单的 ls 命令

#include <stdio.h>
#include <libavformat/avformat.h>

int main(int argc,char* argv[])
{
    int ret = 0;

    AVIODirContext* ctx = NULL;
    AVIODirEntry* entry=NULL;

    av_log_set_level(AV_LOG_INFO);

    ret = avio_open_dir(&ctx,"./",NULL);
    if(ret < 0)
    {
        av_log(NULL,AV_LOG_ERROR,"Can not open dir:%s\n",av_err2str(ret));
        return -1;
    }

    while(1)
    {
        ret = avio_read_dir(ctx,&entry);
        if(ret < 0)
        {
            av_log(NULL,AV_LOG_ERROR,"can not dir:%s\n",av_err2str(ret));
            //return -1;
            goto __fail; //avoid memleak
        }

        if(!entry)
        {
            break;
        }

        av_log(NULL,AV_LOG_INFO,"%12"PRId64" %s \n",entry->size,entry->name);

        avio_free_directory_entry(&entry);
    }

__fail:
    avio_close_dir(&ctx);

    return 0;
}

编译运行,如下所示:

wj@ubuntu:~/FFmpeg$ gcc -g -o ffmpeg_ls ffmpeg_ls.c -lavformat -lavutil
wj@ubuntu:~/FFmpeg$ ./ffmpeg_ls 
         190 ffmpeg_log.c 
      127296 ffmpeg_log 
           0 222.txt 
         579 ffmpeg_file.c 
        4096 .vscode 
         848 ffmpeg_ls.c 
       20800 ffmpeg_ls 
       19776 ffmpeg_del 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

repinkply

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值