繁体   English   中英

从UDP流读取时ffmpeg错误

[英]Error in ffmpeg when reading from UDP stream

我正在尝试使用ffmpeg处理UDP流中的帧。 一切都会正常运行一段时间,但是av_read_frame()最终总是会返回AVERROR_EXIT (请求立即退出)或-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()”是否已准备好被调用? 还是抑制错误的方法?

我在下面做的伪代码。 先谢谢您的帮助!

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM