FFmpeg中的avformat_open_input函数总是返回“未找到协议”错误,错误代码为-1330794744。

8

我正在尝试在Visual Studio 2010中使用ffmpeg。目前已经加载了所有的ffmpeg头文件和库,没有出现任何错误或警告。

avcodec_register_all();
AVFormatContext *pFormatCtx = NULL;
char errbuf[256];
pFormatCtx = avformat_alloc_context();
int rv = avformat_open_input(&pFormatCtx, "myfile.ext", NULL, NULL);
if (rv!=0){                              
    av_strerror(rv, errbuf, sizeof(errbuf));
}

问题在于,avformat_open_input始终返回-1330794744(errbuf="协议未找到")。已尝试在32位XP和64位W7上使用x86和x64头文件和库。无论我为“myfile.ext”放什么(尝试过“file1.avi”,“file=c:\file1.avi”,“http://www.someweb.com/file1.avi”,甚至是空的char*“”),响应始终是“协议未找到”。有任何想法吗?

你解决问题了吗? - TOP
3个回答

8

我也遇到了同样的问题。正确的初始化方式是:

av_register_all();

2
嗨,我正在尝试使用ffmpeg做一个示例chrome插件。我遇到了同样的问题,我调用了av_register_all(),但是没有任何希望。 - George Varghese
@GeorgeVarghese 我也遇到了同样的问题。你解决了吗? - Michael IV
哈哈,不错的“你解决问题了吗?”乒乓球 XD。嗯,在我的情况下,问题出在错误的FFmpeg构建配置上,其中一些协议缺失了。 - Michael IV
哦,抱歉回复晚了。不,问题仍然存在。 - George Varghese
1
在我的情况下,问题是由于我已经在我的LD_LIBRARY_PATH(在Mac上为DYLD_LIBRARY_PATH)中有相同的库,并且它是不同版本的,这导致了这个问题。我花了大约一个小时来弄清楚为什么它在Linux和Android上运行正常,但在macOS上却不行,我本可以更有效地利用这段时间,有时候生活就是这样:(顺便说一句:av_register_all现在已经被弃用了,这个答案将没有帮助) - Dimitri Podborski

2
我希望这可以帮助某些人。因为我遇到了相同的问题,在Android和Linux上我的代码可以运行,但在macOS上不能运行,而且由于av_register_all现在已经弃用(对于FFMpeg版本>4.0),所以来自discomurray的答案对我没有解决问题。
原因是我已经在系统上安装了libavformat,它位于/usr/local/lib/下,不幸的是它没有正确配置我的情况(或者与我自己编译的版本不匹配)。
我所做的是,在执行命令之前,将我的构建路径添加到DYLD_LIBRARY_PATH(macOS)中:
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Users/xxx/projects/FFmpeg/libavformat

在Linux上,您可以使用LD_LIBRARY_PATH做同样的事情。

0
try to change file path 
"/home/user/video.mp4" -> "file:/home/usr/video.mp4"

你可能需要转义冒号字符,除非是协议
查看此链接ffmpeg-protocols#file


虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。仅有链接的答案如果链接页面发生更改可能会变得无效。 - Johan
我不知道。我是一个新手... 谢谢评论 :) - Jay Son

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接