Open HalcyonHuang opened 1 year ago
我的视频流里面,经常出现在一个视频帧中间有 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抓一个完整包, 我确认下上下文信息。
target_5_48.1 (1).zip
@ireader 视频流是对接的大疆的无人机
怎么过滤出rtp数据流?
我的视频流里面,经常出现在一个视频帧中间有 xx xx 0 0 0 0 0 0 0 0 0 1 6 5 ff ff a0 81 6d 38 4e 99 这样的数据排列 。 代码里面的查找视频帧函数会误判断为 NAL_SEI 帧,从而吧一个完整的视频帧分成两个帧。但实际上只有一个帧。
我的修改方法是吧判断条件 if (0x01 == p[i] && zeros >= 2) 改成 if (0x01 == p[i] && (zeros == 3 || zeros == 4)) 即可。