最近需要实现个功能,要解析远程ftp服务器上视频文件中的软字幕。按照常规的方法是要先通过ftp将对方服务器上的媒体文件下载到本地,再用FFmpeg解析下载下来的文件。但考虑到通过ftp下载,会增加程序执行总时间,于是尝试对其进行优化,去掉通过ftp下载视频文件的步骤,直接通过FFmpeg读取ftp服务器上的视频文件,结果执行avformat_open_input函数失败了。下面是解决方法。
1.在ftp服务器中设置对应的ftp共享目录有相应的权限,最好关闭windows防火墙。
2.要想使用FFmpeg的avformat_open_input函数打开ftp服务器上的媒体文件,必须按照FFmpeg官方文档(链接:http://www.ffmpeg.org/ffmpeg-protocols.html)中写的那样,给url加上用户名、密码、ftp端口号。如下图所示:
比如:ftp媒体文件的url为:ftp://127.0.0.1/ckin.mp4,ftp用户名为xiaoming,密码为123456,端口为21,则avformat_open_input函数传入的第二个参数必须为:ftp://xiaoming:123456@127.0.0.1:21/ckin.mp4。
3.使用新版本的FFmpeg。经过测试FFmpeg4.0.X版本或以下的FFmpeg有bug,不支持直接读取远程ftp目录上的媒体文件。而目前最新版本的FFmpeg(比如FFmpeg4.3.2)支持。链接:(https://github.com/BtbN/FFmpeg-Builds/releases/tag/autobuild-2021-03-21-12-59)