ffplay深入解析——main函数解析篇(一)

我是李铁山,ffplay是基于ffmpeg的播放器,B站大名鼎鼎的ijkplayer也是基于此二次开发,因此很有学习价值。

这篇文章是我深入解析ffplay的首篇,将会从main函数,自顶向下地剖析源码。

如果您对于源码感兴趣,可以查看ffplay的github地址https://github.com/FFmpeg/FFmpeg/blob/master/fftools/ffplay.c

那么我们接下来开始。ffplay.c的main函数也就100行代码,之后几篇我会深入解析其中用到的函数。

int main(int argc, char **argv)
{
    int flags, ret;
    VideoState *is;

    init_dynload();

    av_log_set_flags(AV_LOG_SKIP_REPEATED);
    parse_loglevel(argc, argv, options);

首先,我们可以看到有三个变量,flags,ret和一个结构体VideoState,VideoState是一个很长的结构体,估计是用来记录视频一大堆信息的。

然后,开始就有三个函数。

init_dynload 是 fftools 中另外一个包的函数,作用是删除搜索路径中的工作目录,起到一个安全手段的作用。

第二个函数 av_log_set_flags 是 libavutils/log.c 中的函数,AV_LOG_SKIP_REPEATED 定义:

/**
 * Skip repeated messages, this requires the user app to use av_log() instead of
 * (f)printf as the 2 would otherwise interfere and lead to
 * "Last message repeated x times" messages below (f)printf messages with some
 * bad luck.
 * Also to receive the last, "last repeated" line if any, the user app must
 * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end
 */
#define AV_LOG_SKIP_REPEATED 1

因此看来,这个函数的作用是避免重复的信息,应该是起到前期规范的作用。

第三个函数 parse_loglevel ,我看这个函数的源码还是挺复杂的,但大致功能是在用户输入的命令行中找到 loglevel 的选项,应该是解析输入命令用的。

好了,今天就解析 ffplay.c 的 main 函数前几行代码,做个总结,前三行代码主要用于输入命令的解析,第一个函数用来清除搜索路径的目录,第二个函数用来避免重复信息,第三个函数用来找到 -loglevel的指令。

欲知后事如何,请听下回分解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值