从UDP流读取时,ffmpeg出错
Error in ffmpeg when reading from UDP stream
我正在尝试使用ffmpeg处理UDP流中的帧。一切都会正常运行一段时间,但av_read_frame()
最终总是会返回AVERROR_EXIT
(请求Imeditate退出)或-5
(出现错误号-5),而流应该仍然正常运行。就在发生错误之前,它总是将以下消息打印到控制台
[mpeg2video @ 0caf6600] ac-tex damaged at 14 10
[mpeg2video @ 0caf6600] Warning MVs not available
[mpeg2video @ 0caf6600] concealing 800 DC, 800 AC, 800 MV errors in I frame
(消息中的数字因运行而异)
我怀疑这个错误与调用av_read_frame
过快有关。如果我让它以尽可能快的速度运行,我通常会在10-20帧内出现错误,但如果我在阅读前睡一觉,它会运行一分钟左右,然后出错退出。我意识到这很棘手,并认为有更好的解决方案。一句话:有没有一种方法可以动态检查"av_read_frame()"是否准备好被调用?还是一种弥补错误的方法?
下面是我正在做的Psuedo代码。提前感谢您的帮助!
void getFrame()
{
//wait here?? seems hacky...
//boost::this_thread::sleep(boost::posix_time::milliseconds(25));
int av_read_frame_error = av_read_frame(m_input_format_context, &m_input_packet);
if(av_read_frame_error == 0){
//DO STUFF - this all works fine when it gets here
}
else{
//error
char errorBuf[AV_ERROR_MAX_STRING_SIZE];
av_make_error_string(errorBuf, AV_ERROR_MAX_STRING_SIZE, av_read_frame_error);
cout << "FFMPEG Input Stream Exit Code: " << av_read_frame_error << " Message: " << errorBuf << endl;
}
}
传入帧需要在回调函数中处理。因此,该机制应该是这样的,只要有新的帧,就会调用回调。通过这种方式,不需要手动微调延迟。
免责声明:我没有使用过ffmpeg API。
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 为x86而非x64编译时出错
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 从R调用C++函数并对其进行集成时出错
- 使用 FFMPEG 将每个输入图像转换为 H264 编译时出错,该图像在 MevisLab 中运行的 Visual St
- 从UDP流读取时,ffmpeg出错
- OpenCV 3.0.0在使用FFMPEG时出错