ffmpeg3.1.1版本连接ftp服务器失败

发现这个问题是在ffmpeg4之后修复的:

原因在于libavformat文件下的ftp.c文件:
修改方法:加入在TCP控制连接时加入应答代码202:

cpp 复制代码
static int ftp_features(FTPContext *s)
{
    static const char *feat_command        = "FEAT\r\n";
    static const char *enable_utf8_command = "OPTS UTF8 ON\r\n";
    static const int feat_codes[] = {211, 0};
    static const int opts_codes[] = {200,202 ,451, 0};

    av_freep(&s->features);
    if (ftp_send_command(s, feat_command, feat_codes, &s->features) != 211) {
        av_freep(&s->features);
    }

	if (ftp_has_feature(s, "UTF8")) {
		int ret = ftp_send_command(s, enable_utf8_command, opts_codes, NULL);
		if (ret == 200 || ret == 202)
			s->utf8 = 1;
	}

    return 0;
}

否则的话将会引起的函数调用有:

ftp_status()--->ftp_get_line()----->ftp_getc()------->ffurl_read()------>retry_transfer_wrapper() (avic.c)
具体在ffurl_read()函数中无法退出的原因还没有得出结论

暂时先排查到ffurl_read(),总之引起的原因是状态码列表不存在服务器返回的状态码,该部分的判断在ftp_status()函数:

cpp 复制代码
 if (!code_found) {
            if (err >= 500) {
                code_found = 1;
                result = err;
			}
			else
			{
				for (i = 0;  response_codes[i]; ++i) {
					if (err == response_codes[i]) {
						code_found = 1;
						result = err;
						break;
					}
				}
			}
        }
相关推荐
2401_8658548819 小时前
AI软件可以帮助我自动化哪些日常任务?
运维·人工智能·自动化
qq_4017004119 小时前
Linux 信号机制
linux·运维·服务器
_Stellar19 小时前
Linux 服务器配置 rootless docker Quick Start
linux·服务器·docker
石像鬼₧魂石20 小时前
Kali Linux 中对某(靶机)监控设备进行漏洞验证的完整流程(卧室监控学习)
linux·运维·学习
Hqst_xiangxuajun20 小时前
服务器主板选用网络变压器及参数配置HX82409S
运维·服务器·网络
CS创新实验室20 小时前
练习项目:基于 LangGraph 和 MCP 服务器的本地语音助手
运维·服务器·ai·aigc·tts·mcp
私人珍藏库20 小时前
Microsoft 远程桌面app,支持挂机宝,云主机服务器
运维·服务器·microsoft
“愿你如星辰如月”20 小时前
Linux:进程间通信
linux·运维·服务器·c++·操作系统
10岁的博客21 小时前
二维差分算法高效解靶场问题
java·服务器·算法
lwhdjbcjdjd21 小时前
Nginx与Tomcat协作处理流程及数据流向
运维·nginx·tomcat