media-server icon indicating copy to clipboard operation
media-server copied to clipboard

查找视频帧判断有问题

Open HalcyonHuang opened this issue 2 years ago • 5 comments

我的视频流里面,经常出现在一个视频帧中间有 xx xx 0 0 0 0 0 0 0 0 0 1 6 5 ff ff a0 81 6d 38 4e 99 这样的数据排列 。 代码里面的查找视频帧函数会误判断为 NAL_SEI 帧,从而吧一个完整的视频帧分成两个帧。但实际上只有一个帧。

int mpeg_h264_find_nalu(const uint8_t* p, size_t bytes, size_t* leading)
{
    size_t i, zeros;
    for (zeros = i = 0; i + 1 < bytes; i++)
    {
        if (0x01 == p[i] && zeros >= 2) //这里判断出错
        {
            assert(i >= zeros);
            if (leading)
                *leading = (zeros > 2 ? 3 : zeros) + 1; // zeros + 0x01
            return (int)(i + 1);
        }

        zeros = 0x00 != p[i] ? 0 : (zeros + 1);
    }

    return -1;
}

我的修改方法是吧判断条件 if (0x01 == p[i] && zeros >= 2) 改成 if (0x01 == p[i] && (zeros == 3 || zeros == 4)) 即可。

HalcyonHuang avatar Jul 22 '23 09:07 HalcyonHuang

视频帧中间出现0 0 0 1, 按照规范需要插入防冲突字符, 修改成0 0 3 1

你的视频流从什么设备生成的, 方便的话麻烦用wireshark抓一个完整包, 我确认下上下文信息。

ireader avatar Jul 25 '23 01:07 ireader

@ireader 视频流是对接的大疆的无人机

HalcyonHuang avatar Aug 02 '23 08:08 HalcyonHuang

怎么过滤出rtp数据流?

ireader avatar Aug 03 '23 02:08 ireader

253541527-bcceb57e-7eac-48b5-8ddd-0ec5fef5424c

HalcyonHuang avatar Aug 07 '23 03:08 HalcyonHuang