webrtc 维护方法四(webrtc增加ffmpeg打印方法)

本文介绍了在使用webrtc过程中遇到的无法获取ffmpeg日志的问题。通过分析ffmpeg的编译配置和符号表,最终找到了解决方案,并详细记录了问题的排查过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 背景介绍

webrtc使用的是ffmpeg的H264解码器,遇到一些问题,需要获取ffmpeg的过程打印。这个本身不是很复杂,只要在InitDecode函数里面调用ffmpeg的钩子函数av_log_set_callback,就可以实现。但是实际操作的时候,发现编译一直失败,找不到av_log_set_callback符号表。

二、问题分析

1、首先查询ffmpeg.dll.lib符号表,看av_log_set_callback函数的符号,是否存在。

命令行:C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\Llvm\x64\bin>llvm-nm D:\code\webrtc\out\Release\ffmpeg.dll.lib

发现确实只有少数几个函数符号存在,大部分的函数都不在。

2、ffmpeg的编译配置文件大多都在third_party\ffmpeg\chromium目录下,去这下面找找思路。

发现codec、parser、demuxer钩子都是在third_party\ffmpeg\chromium\config\Chrome\win\x64下libavcodec/libavformat/libavutil文件配置的

ffmpeg编译模块的开关是在third_party\ffmpeg\chromium\config\Chrome\win\x64下的config.asm、config.h配置的。

再深入找,发现对外公开的函数时在third_party\ffmpeg\chromium\ffmpeg.sigs配置的。

三、解决办法

在ffmpeg.sigs文件中,添加我们需要的函数名。编译问题解决。

 

四、附录

日志钩子函数:

void ffmpeg_log_default( void *p_unused, int i_level, const char *psz_fmt, va_list arg )
{
    char buf[4096];
    int length = vsnprintf(buf, sizeof(buf), psz_fmt, arg);
    if (length)
        RTC_LOG(LS_ERROR) << buf;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值