我在网络上有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)的一些选项,但这不会改变任何内容。