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


    目录

    FFmpeg日志系统

    FFmpeg文件与目录操作

    FFmpeg文件的删除与重命名

    FFmpeg操作目录及list的实现

    操作目录重要函数

    操作目录重要结构体


    FFmpeg日志系统

    下面看一个简单的 demo。

    1. #include
    2. #include
    3. int main(int argc,char* argv[])
    4. {
    5. av_log_set_level(AV_LOG_DEBUG);
    6. av_log(NULL,AV_LOG_INFO,"Hello World!,%s\n","aaa");
    7. return 0;
    8. }

    编译运行,结果如下:

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

    FFmpeg文件与目录操作

    FFmpeg文件的删除与重命名

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

    来看一个 demo

    1. #include
    2. #include
    3. int main(int argc,char* argv[])
    4. {
    5. int ret = 0;
    6. ret = avpriv_io_move("111.txt","222.txt");
    7. if(ret < 0)
    8. {
    9. av_log(NULL,AV_LOG_ERROR,"Failed to rename\n");
    10. }
    11. av_log(NULL,AV_LOG_INFO,"Success to rename\n");
    12. //delete url
    13. ret = avpriv_io_delete("./mytestfile.txt");
    14. if(ret<0)
    15. {
    16. av_log(NULL,AV_LOG_ERROR,"Failed to delete file mytestfile.txt\n");
    17. return -1;
    18. }
    19. av_log(NULL,"Success to delete mytestfile.txt");
    20. return 0;
    21. }

    sudo apt-get install libavformat-dev

    1. wj@ubuntu:~/FFmpeg$ gcc -g -o ffmpeg_del ffmpeg_file.c -lavformat -lavutil
    2. ffmpeg_file.c: In function ‘main’:
    3. ffmpeg_file.c:8:11: warning: implicit declaration of function ‘avpriv_io_move’ [-Wimplicit-function-declaration]
    4. 8 | ret = avpriv_io_move("111.txt","222.txt");
    5. | ^~~~~~~~~~~~~~
    6. ffmpeg_file.c:18:11: warning: implicit declaration of function ‘avpriv_io_delete’ [-Wimplicit-function-declaration]
    7. 18 | ret = avpriv_io_delete("./mytestfile.txt");
    8. | ^~~~~~~~~~~~~~~~
    9. wj@ubuntu:~/FFmpeg$ ./ffmpeg_del
    10. Success to rename
    11. 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 命令

    1. #include
    2. #include
    3. int main(int argc,char* argv[])
    4. {
    5. int ret = 0;
    6. AVIODirContext* ctx = NULL;
    7. AVIODirEntry* entry=NULL;
    8. av_log_set_level(AV_LOG_INFO);
    9. ret = avio_open_dir(&ctx,"./",NULL);
    10. if(ret < 0)
    11. {
    12. av_log(NULL,AV_LOG_ERROR,"Can not open dir:%s\n",av_err2str(ret));
    13. return -1;
    14. }
    15. while(1)
    16. {
    17. ret = avio_read_dir(ctx,&entry);
    18. if(ret < 0)
    19. {
    20. av_log(NULL,AV_LOG_ERROR,"can not dir:%s\n",av_err2str(ret));
    21. //return -1;
    22. goto __fail; //avoid memleak
    23. }
    24. if(!entry)
    25. {
    26. break;
    27. }
    28. av_log(NULL,AV_LOG_INFO,"%12"PRId64" %s \n",entry->size,entry->name);
    29. avio_free_directory_entry(&entry);
    30. }
    31. __fail:
    32. avio_close_dir(&ctx);
    33. return 0;
    34. }

    编译运行,如下所示:

    1. wj@ubuntu:~/FFmpeg$ gcc -g -o ffmpeg_ls ffmpeg_ls.c -lavformat -lavutil
    2. wj@ubuntu:~/FFmpeg$ ./ffmpeg_ls
    3. 190 ffmpeg_log.c
    4. 127296 ffmpeg_log
    5. 0 222.txt
    6. 579 ffmpeg_file.c
    7. 4096 .vscode
    8. 848 ffmpeg_ls.c
    9. 20800 ffmpeg_ls
    10. 19776 ffmpeg_del

  • 相关阅读:
    MySql的基础讲解
    【车辆动力】基于Matlab模拟停车动力学
    apply和call在Javascript中的使用与区别
    iOS 添加震动效果
    跨境电商未来前景—成都扬帆际海教育咨询有限公司
    【瑞吉外卖】day10:缓存验证码、菜品、套餐信息以及推送到gitee
    【MAPBOX基础功能】05、底图切换 - mapbox切换高德、天地图、bingmap等底图
    【无标题】
    Windows学习总结(24)—— 升级到 Windows 11 版本的九个理由
    C/C++内存管理
  • 原文地址:https://blog.csdn.net/weixin_42136255/article/details/133554901