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;
					}
				}
			}
        }
相关推荐
wanhengidc16 小时前
云手机存在的意义是什么
运维·服务器·arm开发·安全·智能手机
snow@li18 小时前
运维:部署Jenkins
运维·jenkins
大海绵啤酒肚19 小时前
OpenStack虚拟化平台之T版搭建部署
linux·运维·云计算·openstack
报错小能手19 小时前
计算机网络自顶向下方法25——运输层 TCP流量控制 连接管理 “四次挥手”的优化
服务器·网络·计算机网络
郭源潮119 小时前
《Muduo网络库:实现TcpServer类终章》
服务器·网络·c++·网络库
半夏知半秋21 小时前
mongodb的复制集整理
服务器·开发语言·数据库·后端·学习·mongodb
The Chosen One98521 小时前
【Linux】Linux权限讲解 :写给文件的一封情书
linux·运维·服务器
mortimer21 小时前
搞懂FFmpeg中2个桀骜不驯的参数:CRF 与 Preset
ffmpeg·音视频开发·视频编码
Thexhy1 天前
在centos 7上配置FIP服务器的详细教程!!!
linux·运维·centos
chao1898441 天前
C 文件操作全解速览
服务器·c语言·c#