FFmpeg的常用函数

本文的代码下载地址:GitHub


FFmpeg 是一个 C语言的项目,C语言标准库的功能比较简陋,所以很多东西都要自己写,造轮子。FFmpeg 已经造了不少轮子,很多很好用的函数,本文就来介绍这些常用的函数。

PS:后续会不断补充相关函数,读者也可以提意见 补充相关函数的讲解。


首先是第一个函数 av_strdup ,这个函数可以很方便的创建一个字符串变量,这个变量是在堆上的,需要自己释放内存。下面对比一下原生的方式跟 用 av_strdup 的方式。

  name = malloc(100);
  strcpy(name,"loken-ffmpeg");
  free(name);
  --------------------
  name = av_strdup("loken-ffmpeg");
  av_freep(name);

可以看到,av_strdup 非常地简洁,而且他内部是用的 realloc。正式代码如下:

1-1


第二个函数 是 av_err2str,FFmpeg 有自己的错误码,如下:

1-2

这些错误码实际上是一些数字,不用管他那个 FFERRTAG 函数的封装,反正那些宏就是一个 int 数字。

有时候我们调一些 FFmpeg 的函数的时候会发生错误,例如调 avcodec_receive_packet ,这时候如果想需要显示具体的错误给用户,就需要用到 av_err2str 函数 把 数字转成相应的字符串提示。函数的用法如下:

扩展知识:任何开源项目都会封装错误码,只要不是特别邪门的项目,都会有一个函数,把 int 错误码转成字符串的。

char* err_str = av_err2str(AVERROR_EOF);
printf("data : %s \n",err_str);

注意,av_err2str 函数的内部实现是这样的,他不是返回的堆指针,而是栈指针,所以你不用释放 err_str,他这种传参是初始化了了一个栈变量,然后把栈变量指针传进去的。如下:

1-3

这种写法,跟你在调函数之前,创建一个栈变量,然后把栈变量指针丢进去函数是一样的,他这种写法很值得学习


av_frame_get_buffer 跟 av_image_fill_arrays


版权所属 xianwanzhiyin.net 罗上文 2022 all right reserved,powered by Gitbook该文件修订时间: 2022-08-29 15:46:15

results matching ""

    No results matching ""