FFmpeg与SDL日志回调方式对比

前言:

一个好的库(对开发者友好),一定有一个好的日志系统,可以帮助developer快速的定位问题。

今天我们对比一下FFmpeg和SDL两个开源库开放的日志回调接口,看看各自的优缺点,对实现一个我们自己的lib也是有益的。

多说无益,直接开始

接口一览表

红色部分是日志回调的基本接口,SDL get接口较为丰富

ffmpeg多了一些日志输出到文件的接口。之所以多了这些接口,是因为ffmpeg既可以作为库使用,也可以作为进程存在。SDL仅作为lib使用

日志等级/类别

SDL支持针对不同的日志类别设置日志级别,SDL自己抽象出来

    SDL_LOG_CATEGORY_APPLICATION,
    SDL_LOG_CATEGORY_ERROR,
    SDL_LOG_CATEGORY_ASSERT,
    SDL_LOG_CATEGORY_SYSTEM,
    SDL_LOG_CATEGORY_AUDIO,
    SDL_LOG_CATEGORY_VIDEO,
    SDL_LOG_CATEGORY_RENDER,
    SDL_LOG_CATEGORY_INPUT,
    SDL_LOG_CATEGORY_TEST

这些日志的类别,并在记录日志时选择一类进行归类。简单总结就是最后这条日志是由两个条件决定是否会输出的,一个是日志的类别,一个是日志的优先级,两者同时作用后&条件生效

比如,可以设置VIDEO的info级别日志进行输出,但是AUDIO的info级别不输出。

回调的参数

ffmpeg不支持回调用户自定义的参数,默认是ffmpeg进行填充一个AVClass*的参数回调给上层。ffmpeg可以将format回调给上层应用,上层应用可以做过滤等操作

SDL允许用户自定义一个void *userdata,并且在回调的时候传给上层,SDL回调给上层的log只有char*格式,不支持上层用户直接根据format再加工

思考

作为一个lib时,一般不会有主动输出日志到terminal或者到文件的操作。因为被调用时,仅通过lib自己的操作日志不能很方便的反映出实际业务的流程,需要配合调用放自己的log进行分析。上层应用通过回调lib日志进行log存储

丰富lib API函数返回值,让上层应用直观通过返回值可以清楚的了解到错误的原因。

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 

猜你喜欢

转载自blog.csdn.net/m0_60259116/article/details/125210291