【问题标题】:h264 decoding rtsp link errorh264解码rtsp链接错误
【发布时间】:2015-10-30 22:25:11
【问题描述】:

我正在接收带有 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] 没有帧!

有什么建议吗?

【问题讨论】:

    标签: ffmpeg stream h.264 rtsp


    【解决方案1】:

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

    【讨论】:

    • 我很困惑。我将把这 3 个数据包合并成一个数据包。数据包的格式不应该改变吗?如果我应该忽略那里的数据包会发生什么?
    • FFmpeg 期望进入视频解码器的一个 AVPacket 是一帧。在 h264 的情况下,AVPacket 内部是构成单个帧所需的所有 NAL,包括它之前的所有非帧 NAL。所以是的,您将 SPS、PPS 和所有帧 NAL 连接在一个 AVPacket 中。如果您真的愿意,您可能可以丢弃 SPS/PPS,只需确保在发送到解码器的第一帧之前包含它们。
    • 我意识到在这 3 个数据包之后,会出现一个以 00 00 00 01 65 开头的巨大数据包(5500 字节)。我学会了这些数据包 IDR 图片。我将尝试所有这些单个数据包。如果我不能,我将忽略所有这些 nals。谢谢:)
    【解决方案2】:

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

    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 小时后停止流式传输。我认为问题是基于解码操作。现在我正在努力解决这个问题。

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

    【讨论】:

      猜你喜欢
      • 2012-06-30
      • 2015-06-07
      • 2015-12-30
      • 2015-08-11
      • 2019-06-08
      • 2012-02-24
      • 2016-07-29
      • 1970-01-01
      • 2016-08-01
      相关资源
      最近更新 更多