支持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后面第二个字节的最高位
通过这样解析,回调出的帧数据都能正常播放了。
应用场景
EasyRTSPClient已经成功应用在RTSP播放器EasyPlayer、行业视频接入网关EasyRTSPLive多款产品中,适用于各种安防直播、行业直播、专业设备互联网直播等多种应用场景;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结