Ffmpeg解码来自RTP流的H264视频非常慢

时间:2013-10-03 12:15:26

标签: c++ video ffmpeg h.264

我在网络上有H264 RTP流,我需要解码它。我使用libx264编码流和ffmpeg进行解码。当我使用VLC连接到服务器时,它正确播放视频没有任何问题。但是当我使用我的应用程序连接到服务器时,我有一段很长的时间,当从这个流中抽取视频的小部件时,只绘制一个图像。

我检查日志文件,发现avcodec_decode_video2()很少将got_image设置为1!解码器每1-2秒给我一个新的解码帧平均值,但在服务器上我有12-15 fps的编码器!

这会延迟解码器的原因以及如何修复它?

avcodec_register_all();
av_init_packet(&m_packet);
m_decoder = avcodec_find_decoder(CODEC_ID_H264);
if (!m_decoder)
{
    QString str = QString("Can't find H264 decoder!");
    emit criticalError(str);
}
m_decoderContext = avcodec_alloc_context3(m_decoder);

m_decoderContext->flags |= CODEC_FLAG_LOW_DELAY;
m_decoderContext->flags2 |= CODEC_FLAG2_CHUNKS;
AVDictionary* dictionary = nullptr;
if (avcodec_open2(m_decoderContext, m_decoder, &dictionary) < 0)
{
    QString str = QString("Failed to open decoder!");
    emit criticalError(str);
}
qDebug() << "H264 Decoder successfully opened";
m_picture = avcodec_alloc_frame();
...
    while(m_packet.size > 0)
    {
        int got_picture;
        int len = avcodec_decode_video2(m_decoderContext, m_picture, &got_picture, &m_packet);
        if (len < 0)
        {
            QString err("Decoding error");
            qDebug() << err;
            //emit criticalError(err);
            return false;
        }
        if (got_picture)
        {
                //create from frame QImage and send it into GUI thread
            qDebug() << "H264Decoder: frame decoded!";

我尝试更改m_decoderContext(即thread_count)的一些选项,但这不会改变任何内容。

0 个答案:

没有答案