支持Windows/Linux 32&64/ARM各平台的简单高效RTSPClient工具库EasyRTSPClient兼容一帧中多NAL单元的摄像机问题解析

背景分析

RTSPClient因其兼容性强,各种各样RTSP的兼容,各种各样的场景,大部分IPC的内置服务器都是基于live555的RTSPServer来二次开发实现的!但仍然有一部分摄像机是固定一条道,如果在这个过程中穿插着发了个OPTION或者GET_PARAMETER,摄像机直接就无响应了,所以,青犀团队在开发EasyRTSPClient的时候,开发了各种各样的选项,例如是否发保活、url是否带用户名密码等等!

今天主要针对EasyRTSPClient兼容一帧中多NAL单元的摄像机问题进行分析。

提出问题

接入一款三星的H265摄像机出错,回调的帧数据无法正常预览,通过打印,看到这个回调的帧类型分别是: IIIIIIIPPPPPPPPPPPPPPPPPPPPIIIIPPPPPPP

分析问题

分析帧数据 00 00 00 01 40 00 00 00 42 00 00 00 44 00 00 00 4E 00 00 00 01 21可以确认,这里面没有B帧。

绝大部分的摄像机出来的帧, 每帧数据就是一个NAL单元, 而该相机连续多个I帧其实就是多个I slice, 也就是一帧中包含了多个NAL单元。

解决问题

1.判断first_slice_segment_in_pic_flag是否为1, 来确定兼容逻辑
2.如果 first_slice_segment_in_pic_flag 为 1, 则后面的26帧都组合到一起,直到first_slice_segment_in_pic_flag又为1,或帧类型不是26了
3.如果first_slice_segment_in_pic_flag 为0, 则独立一个I帧
4.first_slice_segment_in_pic_flag 是26后面第二个字节的最高位

30.png

通过这样解析,回调出的帧数据都能正常播放了。

应用场景

EasyRTSPClient已经成功应用在RTSP播放器EasyPlayer、行业视频接入网关EasyRTSPLive多款产品中,适用于各种安防直播、行业直播、专业设备互联网直播等多种应用场景;

EasyNVR配图(演示1).png

EasyNVR配图(演示9).png

posted on 2019-12-11 11:18  EasyGBS  阅读(378)  评论(0编辑  收藏  举报