mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-27 04:20:13 +08:00
兼容一些奇怪的rtsp url
This commit is contained in:
parent
c4aaaa11c7
commit
d2406d239d
@ -76,24 +76,35 @@ void RtspPlayer::teardown(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RtspPlayer::play(const string &strUrl){
|
void RtspPlayer::play(const string &strUrl){
|
||||||
auto userAndPwd = FindField(strUrl.data(),"://","@");
|
|
||||||
Rtsp::eRtpType eType = (Rtsp::eRtpType)(int)(*this)[kRtpType];
|
Rtsp::eRtpType eType = (Rtsp::eRtpType)(int)(*this)[kRtpType];
|
||||||
if(userAndPwd.empty()){
|
auto schema = FindField(strUrl.data(), nullptr,"://");
|
||||||
play(strUrl,"","",eType);
|
bool isSSL = strcasecmp(schema.data(),"rtsps") == 0;
|
||||||
return;
|
//查找"://"与"/"之间的字符串,用于提取用户名密码
|
||||||
|
auto middle_url = FindField(strUrl.data(),"://","/");
|
||||||
|
if(middle_url.empty()){
|
||||||
|
middle_url = FindField(strUrl.data(),"://", nullptr);
|
||||||
}
|
}
|
||||||
auto suffix = FindField(strUrl.data(),"@",nullptr);
|
auto pos = middle_url.rfind('@');
|
||||||
|
if(pos == string::npos){
|
||||||
|
//并没有用户名密码
|
||||||
|
play(isSSL,strUrl,"","",eType);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//包含用户名密码
|
||||||
|
auto user_pwd = middle_url.substr(0,pos);
|
||||||
|
auto suffix = strUrl.substr(schema.size() + 3 + pos + 1);
|
||||||
auto url = StrPrinter << "rtsp://" << suffix << endl;
|
auto url = StrPrinter << "rtsp://" << suffix << endl;
|
||||||
if(userAndPwd.find(":") == string::npos){
|
if(user_pwd.find(":") == string::npos){
|
||||||
play(url,userAndPwd,"",eType);
|
play(isSSL,url,user_pwd,"",eType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto user = FindField(userAndPwd.data(),nullptr,":");
|
auto user = FindField(user_pwd.data(),nullptr,":");
|
||||||
auto pwd = FindField(userAndPwd.data(),":",nullptr);
|
auto pwd = FindField(user_pwd.data(),":",nullptr);
|
||||||
play(url,user,pwd,eType);
|
play(isSSL,url,user,pwd,eType);
|
||||||
}
|
}
|
||||||
//播放,指定是否走rtp over tcp
|
|
||||||
void RtspPlayer::play(const string &strUrl, const string &strUser, const string &strPwd, Rtsp::eRtpType eType ) {
|
void RtspPlayer::play(bool isSSL,const string &strUrl, const string &strUser, const string &strPwd, Rtsp::eRtpType eType ) {
|
||||||
DebugL << strUrl << " "
|
DebugL << strUrl << " "
|
||||||
<< (strUser.size() ? strUser : "null") << " "
|
<< (strUser.size() ? strUser : "null") << " "
|
||||||
<< (strPwd.size() ? strPwd:"null") << " "
|
<< (strPwd.size() ? strPwd:"null") << " "
|
||||||
@ -117,7 +128,7 @@ void RtspPlayer::play(const string &strUrl, const string &strUser, const string
|
|||||||
auto port = atoi(FindField(ip.data(), ":", NULL).data());
|
auto port = atoi(FindField(ip.data(), ":", NULL).data());
|
||||||
if (port <= 0) {
|
if (port <= 0) {
|
||||||
//rtsp 默认端口554
|
//rtsp 默认端口554
|
||||||
port = 554;
|
port = isSSL ? 322 : 554;
|
||||||
} else {
|
} else {
|
||||||
//服务器域名
|
//服务器域名
|
||||||
ip = FindField(ip.data(), NULL, ":");
|
ip = FindField(ip.data(), NULL, ":");
|
||||||
|
@ -107,7 +107,7 @@ private:
|
|||||||
int getTrackIndexByInterleaved(int interleaved) const;
|
int getTrackIndexByInterleaved(int interleaved) const;
|
||||||
int getTrackIndexByTrackType(TrackType trackType) const;
|
int getTrackIndexByTrackType(TrackType trackType) const;
|
||||||
|
|
||||||
void play(const string &strUrl, const string &strUser, const string &strPwd, Rtsp::eRtpType eType);
|
void play(bool isSSL,const string &strUrl, const string &strUser, const string &strPwd, Rtsp::eRtpType eType);
|
||||||
void handleResSETUP(const Parser &parser, unsigned int uiTrackIndex);
|
void handleResSETUP(const Parser &parser, unsigned int uiTrackIndex);
|
||||||
void handleResDESCRIBE(const Parser &parser);
|
void handleResDESCRIBE(const Parser &parser);
|
||||||
bool handleAuthenticationFailure(const string &wwwAuthenticateParamsStr);
|
bool handleAuthenticationFailure(const string &wwwAuthenticateParamsStr);
|
||||||
|
Loading…
Reference in New Issue
Block a user