"错误:在尝试编译untrunc时,未在此范围内声明'avcodec_open'

d3p*_*3pd 7 c++ video

我有一个由电源中断的摄像机录制的视频.结果,它制作的带有H.264编解码器的MP4文件被损坏了.我想在Ubuntu 14.04.1中修复此文件.一种方法我见过建议是使用untrunc.我试图编译这个,但遇到了一个我不知道如何解决的错误.到目前为止我所做的工作如下:

sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev
git clone https://github.com/ponchio/untrunc.git
cd untrunc/
g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -L/usr/local/lib -lavformat -lavcodec -lavutil
Run Code Online (Sandbox Code Playgroud)

在尝试编译时,我收到以下错误:

track.cpp: In member function 'void Track::parse(Atom*, Atom*)':
track.cpp:217:47: error: 'avcodec_open' was not declared in this scope
     if(avcodec_open(codec.context, codec.codec)<0)
Run Code Online (Sandbox Code Playgroud)

你能建议一种解决这个错误的方法吗?

Beh*_*ree 8

它似乎avcodec_open已被弃用了avcodec_open2.例如,请参阅说明.阅读文档avcodec_open,看来替换的方法是转换:

avcodec_open(a,b);
Run Code Online (Sandbox Code Playgroud)

avcodec_open(a,b,NULL);
Run Code Online (Sandbox Code Playgroud)

此修复程序是类似于一个建议,但在untrunc库本身没有验证,在这里.

我试图验证修复是否有效.实际上,它是track.cpp中的单行修改.采取:

 if(avcodec_open(codec.context, codec.codec)<0)
Run Code Online (Sandbox Code Playgroud)

并替换它

 if(avcodec_open2(codec.context, codec.codec, NULL)<0)
Run Code Online (Sandbox Code Playgroud)

(在提交3c708a上,此更改在第218行).注意:我只验证了编译的代码,而不是它实际按照预期的方式工作(我没有损坏的m4v进行测试).让我知道它是否有效,或者您是否遇到任何其他问题.