h264解码rtsp链接错误

时间:2015-08-07 12:58:44

标签: ffmpeg stream h.264 rtsp

我正在使用live555库接收RTSP流并使用ffmpeg对其进行解码。 起初,我无法解码来自live555的数据。经过一点点搜索后,我了解到在将帧发送到FFmpeg之前,我需要为帧数据包含序列(SPS)和图片参数集(PPS)。

标题:00 00 00 01 67 4d 00 14 95 b8 58 25 90 00 00 00 01 68 ee 3c 80 00 00 00 01

FFmpeg can't decode H264 stream/frame data

现在我可以采取框架,但一个小问题出来了。 [![在此处输入图像说明] [1]] [1]

3个包仍然有问题。 FFmpeg无法解码它们我建议它们是特殊命令。因为它们是如此之小9,4和5字节来。

他们在这里

[h264 @ 0x137c00]没有框架! 00 00 00 01 67 4d 00 14 95 b8 58 25 90 00 00 00 01 68 ee 3c 80 00 00 00 01 67 4d 00 14 95 b8 58 25 90 [h264 @ 0x137c00]没有框架! 00 00 00 01 67 4d 00 14 95 b8 58 25 90 00 00 00 01 68 ee 3c 80 00 00 00 01 68 ee 3c 80 [h264 @ 0x137c00]没有框架! 00 00 00 01 67 4d 00 14 95 b8 58 25 90 00 00 00 01 68 ee 3c 80 00 00 00 01 06 e5 01 ec 80 [h264 @ 0x137c00]没有框架!

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

以00 00 00 01 67开头的数据包是您的SPS,00 00 00 01 68是您的PPS。您可能希望使用h264 AVParser,它将PPS / SPS /帧组合成单个数据包,这就是ffh264解码器所期望的。典型的RTSP流(或任何网络流)将每隔几秒钟重复一次PPS / SPS。

答案 1 :(得分:0)

好的,我可能已经解决了问题。我在解码帧之前添加了解析操作。

avparser= av_parser_init(AV_CODEC_ID_H264);
len= av_parser_parse2(avparser,mCodecContext,&data,&lenght_parse,encodedFrame,encodedFrameSize,0,0,0);
while(encodedFrameSize)
{
    len= av_parser_parse2(avparser,mCodecContext,&data,&lenght_parse,encodedFrame,encodedFrameSize,0,0,0);
    encodedFrame     += len;
    encodedFrameSize  -=len;
        if(lenght_parse)
        {
            av_init_packet(&pkt);
            pkt.data=data;
            pkt.size=lenght_parse;
            length = avcodec_decode_video2(mCodecContext,decodedFrame,&gotFrame,&pkt);
        }
}

我昨天测试了应用程序并出现了一个新问题。应用程序在4-5小时后停止流式传输我认为问题是基于解码操作。现在我想解决这个问题。

日复一日,我正在接近解决方案!