FFmpeg与FFplay解析命令行的区别—ffmpeg.c源码分析

作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音

在前面的一章《FFplay播放器分析》,讲过 ffplay.exe 命令行参数的处理。

其实 ffmpeg.exeffplay.exe 处理命令行参数是有相似的逻辑的。

ffmpeg.exeffplay.exe 都用了 parse_option() 来解析命令行参数,但是两者调用的用法有点奇怪。

回顾一下前文《FFplay是如何解析命令行参数的》, ffplay.exe 处理命令行参数的流程,如下:

1-3

可以看到,是从 parse_option() 里面调的 write_option(),而且在 ffplay.exe 里面 write_option() 的第一个参数 optctx,永远传的是 NULL。

下面是 ffplay -x 400 -i juren.mp4 命令的调试截图:

1-4

上图中的 func_arg 函数 就是 opt_width()


我们再来调试一下 ffmpeg ,命令如下:

ffmpeg -i juren.mp4 -vcodec h263 juren.flv

1-5

上图是解析 -vcodec h263 选项的调试截图,上面的 func_argopt_video_codec() 函数。

可以看到,是从 write_option() 里面调的 parse_option(),然后 parse_option() 再调一次 write_option(),流程图如下:

1-6

这个逻辑非常绕,我看了好几遍,用上调试器看函数调用才搞明白。

而且注意,optctx 不是 NULL,所以 value 会被保存进去 optctx 结构体的某个字段里面。


上面这些就是 ffplay.exeffmpeg.exe 调用 parse_option() 的区别。



感谢 NETINT(镕铭微电子) 赞助《FFmpeg原理》免费版一书的服务器费用,下面是 VPU 产品介绍

版权所属 xianwanzhiyin.net 罗上文 2024 all right reserved,powered by Gitbook该文件修订时间: 2023-05-17 11:39:55

results matching ""

    No results matching ""