mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-23 03:10:04 +08:00
rtmp支持带后缀名的url
This commit is contained in:
parent
dd188f08fd
commit
9f1a91cda6
@ -140,7 +140,7 @@ void RtmpSession::onCmd_publish(AMFDecoder &dec) {
|
|||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
dec.load<AMFValue>();/* NULL */
|
dec.load<AMFValue>();/* NULL */
|
||||||
_mediaInfo.parse(_strTcUrl + "/" + dec.load<std::string>());
|
_mediaInfo.parse(_strTcUrl + "/" + getStreamId(dec.load<std::string>()));
|
||||||
_mediaInfo._schema = RTMP_SCHEMA;
|
_mediaInfo._schema = RTMP_SCHEMA;
|
||||||
|
|
||||||
auto onRes = [this,pToken](const string &err){
|
auto onRes = [this,pToken](const string &err){
|
||||||
@ -344,9 +344,41 @@ void RtmpSession::doPlay(AMFDecoder &dec){
|
|||||||
void RtmpSession::onCmd_play2(AMFDecoder &dec) {
|
void RtmpSession::onCmd_play2(AMFDecoder &dec) {
|
||||||
doPlay(dec);
|
doPlay(dec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string RtmpSession::getStreamId(const string &str){
|
||||||
|
string stream_id;
|
||||||
|
string params;
|
||||||
|
auto pos = str.find('?');
|
||||||
|
if(pos != string::npos){
|
||||||
|
//有url参数
|
||||||
|
stream_id = str.substr(0,pos);
|
||||||
|
//获取url参数
|
||||||
|
params = str.substr(pos + 1);
|
||||||
|
}else{
|
||||||
|
//没有url参数
|
||||||
|
stream_id = str;
|
||||||
|
}
|
||||||
|
|
||||||
|
pos = stream_id.find(":");
|
||||||
|
if(pos != string::npos){
|
||||||
|
//vlc和ffplay在播放 rtmp://127.0.0.1/record/0.mp4时,
|
||||||
|
//传过来的url会是rtmp://127.0.0.1/record/mp4:0,
|
||||||
|
//我们在这里还原成0.mp4
|
||||||
|
stream_id = stream_id.substr(pos + 1) + "." + stream_id.substr(0,pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(params.empty()){
|
||||||
|
//没有url参数
|
||||||
|
return stream_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
//有url参数
|
||||||
|
return stream_id + '?' + params;
|
||||||
|
}
|
||||||
|
|
||||||
void RtmpSession::onCmd_play(AMFDecoder &dec) {
|
void RtmpSession::onCmd_play(AMFDecoder &dec) {
|
||||||
dec.load<AMFValue>();/* NULL */
|
dec.load<AMFValue>();/* NULL */
|
||||||
_mediaInfo.parse(_strTcUrl + "/" + dec.load<std::string>());
|
_mediaInfo.parse(_strTcUrl + "/" + getStreamId(dec.load<std::string>()));
|
||||||
_mediaInfo._schema = RTMP_SCHEMA;
|
_mediaInfo._schema = RTMP_SCHEMA;
|
||||||
doPlay(dec);
|
doPlay(dec);
|
||||||
}
|
}
|
||||||
|
@ -86,6 +86,7 @@ private:
|
|||||||
bool close(MediaSource &sender,bool force) override ;
|
bool close(MediaSource &sender,bool force) override ;
|
||||||
void onNoneReader(MediaSource &sender) override;
|
void onNoneReader(MediaSource &sender) override;
|
||||||
void setSocketFlags();
|
void setSocketFlags();
|
||||||
|
string getStreamId(const string &str);
|
||||||
private:
|
private:
|
||||||
std::string _strTcUrl;
|
std::string _strTcUrl;
|
||||||
MediaInfo _mediaInfo;
|
MediaInfo _mediaInfo;
|
||||||
|
Loading…
Reference in New Issue
Block a user