media-server
media-server copied to clipboard
查找视频帧判断有问题
我的视频流里面,经常出现在一个视频帧中间有 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)) 即可。
视频帧中间出现0 0 0 1, 按照规范需要插入防冲突字符, 修改成0 0 3 1
你的视频流从什么设备生成的, 方便的话麻烦用wireshark抓一个完整包, 我确认下上下文信息。
@ireader 视频流是对接的大疆的无人机
怎么过滤出rtp数据流?