如何获取LiveMedia555建立的RTSP连接所用的认证方式?
获取Live555 RTSP连接实际采用的认证方式
你可以通过自定义RTSPClient子类,访问其内部维护的认证类型变量来实现需求。Live555的RTSPClient类本身有一个受保护的成员变量fCurrentAuthenticationScheme,它会记录当前使用的认证方案(比如"Digest"),未启用认证时则为NULL。
实现步骤:
- 自定义
RTSPClient子类,添加公共方法暴露认证类型:
class MyRTSPClient : public RTSPClient { public: // 继承父类构造函数 MyRTSPClient(UsageEnvironment& env, char const* rtspURL, int verbosityLevel = 0, char const* applicationName = NULL, portNumBits tunnelOverHTTPPortNum = 0) : RTSPClient(env, rtspURL, verbosityLevel, applicationName, tunnelOverHTTPPortNum) {} // 新增方法返回当前认证方式 char const* getAuthScheme() const { return fCurrentAuthenticationScheme; } };
- 在你的连接代码中使用这个子类实例,调用方法获取认证类型:
// 假设ourClient是MyRTSPClient类型的对象 char const* authType = ourClient->getAuthScheme(); if (authType != nullptr) { // 输出或处理认证类型,例如"Digest" envir() << "实际采用的认证方式: " << authType << "\n"; } else { envir() << "未使用认证机制\n"; }
补充说明:
fCurrentAuthenticationScheme会在RTSP客户端处理服务器的认证挑战时自动赋值,比如当服务器返回WWW-Authenticate: Digest ...头时,该变量会被设置为"Digest"。由于你已经调用了disallowBasicAuthentication(),所以返回的类型只会是基础认证以外的方案(比如Digest),或者NULL(无认证)。
内容的提问来源于stack exchange,提问作者Massimo
相关产品推荐
相关产品推荐

