FFmpeg开发实战(二):FFmpeg 文件操作

FFmpeg 提供了丰富的API供我们使用,下面我们来讲述一下文件操作相关的API:

  • FFmpeg 删除文件:avpriv_io_delete()
  • FFmpeg 重命名文件:avpriv_io_move()
  • FFmpeg 打开目录:avio_open_dir()
  • FFmpeg 读取目录:avio_read_dir();
  • FFmpeg 关闭目录:avio_close_dir()

使用FFmpeg文件操作API实现删除和重命名的实例代码如下:

1// FFmpeg 删除文件操作 2void ffmpegDelFile() { 3 int ret; 4 ret = avpriv_io_delete("1.txt"); // 在项目目录下创建的文件(测试时需要创建好) 5 printf("Del File Code : %d \n", ret); 6 if (ret < 0) { 7 av_log(NULL, AV_LOG_ERROR, "Failed to delete file \n"); 8 } else { 9 av_log(NULL, AV_LOG_INFO, "Delete File Success!\n "); 10 } 11} 12 13// FFmpeg 重命名或移动文件 14void ffmpegMoveFile(char* src, char* dst) { 15 int ret; 16 ret = avpriv_io_move(src, dst); 17 printf("Move File Code : %d \n", ret); 18 // 重命名时,如果文件不存在,ret也会0 19 if (ret < 0) { 20 av_log(NULL, AV_LOG_ERROR, "Failed to Move File %s!\n ", src); 21 } else { 22 av_log(NULL, AV_LOG_INFO, "Success Move File %s!\n", src); 23 } 24}

使用FFmpeg文件操作API实现读取文件目录及输出文件目录List的相关代码如下:

1// FFmpeg 目录操作 2void ffmpegDir() { 3 4 int ret; 5 6 // 上下文 7 AVIODirContext *dirCtx = NULL; 8 AVIODirEntry *dirEntry = NULL; 9 10 // 注意Windows下会返回-40,也就是Function not implement,方法未实现,也就是说windows下不支持此方法 11 ret = avio_open_dir(&dirCtx, "include", NULL); 12 13 if (ret < 0) { 14 // 输出错误日志 15 printf("cant open dir,msg = %s", av_err2str(ret)); 16 return; 17 } 18 19 av_log(NULL, AV_LOG_INFO, "Open Dir Success!"); 20 21 while (1){ 22 ret = avio_read_dir(dirCtx, &dirEntry); 23 if (ret < 0) { 24 printf("cant read dir : %s", av_err2str(ret)); 25 // 防止内存泄漏 26 goto __failed; 27 } 28 av_log(NULL, AV_LOG_INFO, "read dir success"); 29 if (!dirEntry) { 30 break; 31 } 32 printf("Entry Name = %s", dirEntry->name); 33 // 释放资源 34 avio_free_directory_entry(&dirEntry); 35 } 36// 释放资源 37__failed: 38 avio_close_dir(&dirCtx); 39}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

FFmpeg RTSP流通过UDP传输问题

我自己在使用SRS服务的Ingest功能时发现在读取一个网络摄像头的RTSP流时一直不成功,具体分析后发现SRS在调用FFmpeg时出了问题:/usr/local/ffmpeg/bin/ffmpegirtsp://admin:admin123@192.168.50.187:554/profile1vcodeccopyacode

Cmake opencv_videoio_ffmpeg.dll下载失败

用Cmake对OpenCV进行Configure,下载opencv\_videoio\_ffmpeg.dll和opencv\_videoio\_ffmpeg\_64.dll经常失败,解决方案是:到CMake中设置的Wheretobuildthebinaries的路径下去找名为CMakeDownloadLog.txt的文件,里面会有ffmpeg.dll