RTSP协议的处理--OPTIONS

一、ABLMediaServer的处理
1、涉及的数据结构
RtspProtect RtspProtectArray[MaxRtspProtectCount]; int RtspProtectArrayOrder; struct RtspFieldValue { char szKey[64]; char szValue[384]; }; //rtsp 协议数据 struct RtspProtect { char szRtspCmdString[512];// OPTIONS rtsp://190.15.240.36:554/Camera_00001.sdp RTSP/1.0 char szRtspCommand[64];// rtsp命令名字 ,OPTIONS ANNOUNCE SETUP RECORD char szRtspURL[512];// rtsp://190.15.240.36:554/Camera_00001.sdp RtspFieldValue rtspField[MaxRtspValueCount]; char szRtspContentSDP[1024]; // 媒体描述内容 int nRtspSDPLength; };
2、NetRtspServer.cpp中ProcessNetData函数调用FillHttpHeadToStruct函数。
3、NetRtspServer.cpp中FillHttpHeadToStruct函数
(1)通过for循环,szTemp存的为每行的数据。
(2)第一个循环得到szTemp通过GetHttpModemHttpURL解析。
3、NetRtspServer.cpp中GetHttpModemHttpURL函数
通过“ ”区分
(1)strcpy(RtspProtectArray[RtspProtectArrayOrder].szRtspCmdString, szMedomHttpURL);
OPTIONS rtsp://192.168.169.130:554/live/Camera_00001 RTSP/1.0
(2)memcpy(RtspProtectArray[RtspProtectArrayOrder].szRtspCommand, szMedomHttpURL, nPos1);
OPTIONS
(3)strcpy(RtspProtectArray[RtspProtectArrayOrder].szRtspURL, strTempRtsp.c_str());
rtsp://192.168.169.130:554/live/Camera_00001
4.NetRtspServer.cpp中FillHttpHeadToStruc中
在if ((nFlagLength = FindKeyValueFlag(szTemp)) >= 0)
解析其他的行,由FindKeyValueFlag通过“:”分隔key和value.
CSeq-1
User-Agent-Lavf58.29.100
二、ZLMediaKit的处理
1.Parser.cpp文件中Parser类
std::string _strMethod;
std::string _strUrl;
std::string _strTail;
std::string _strContent;
std::string _strNull;
std::string _params;
mutable StrCaseMap _mapHeaders;
mutable StrCaseMap _mapUrlArgs;
2.Parser::Parse函数
(1)line通过FindField得到每一行的函数。
(2)在每一行中,还是通过FindField解析得到每一个属性。
(3)if (start == buf)是解析第一行,else是解析其他的行。
_strMethod--OPTIONS
_strUrl--rtsp://192.168.169.130:554/live/Camera_00001
_strTail--RTSP/1.0
(4)在第二行中,解析key--CSeq,value--1,存入到_mapHeaders。
(5)其他的都为空,没有解析。
(6)_mapUrlArgs为解析url的参数,暂时没用到。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!