http-flv支持延时注册流
This commit is contained in:
parent
0dc7cbb879
commit
29e4a6b14a
|
|
@ -209,24 +209,43 @@ inline bool HttpSession::checkLiveFlvStream(){
|
||||||
//未找到".flv"后缀
|
//未找到".flv"后缀
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//拼接成完整url
|
|
||||||
auto fullUrl = string(HTTP_SCHEMA) + "://" + _parser["Host"] + _parser.FullUrl();
|
|
||||||
_mediaInfo.parse(fullUrl);
|
|
||||||
_mediaInfo._streamid.erase(_mediaInfo._streamid.size() - 4);//去除.flv后缀
|
|
||||||
|
|
||||||
auto mediaSrc = dynamic_pointer_cast<RtmpMediaSource>(MediaSource::find(RTMP_SCHEMA,_mediaInfo._vhost,_mediaInfo._app,_mediaInfo._streamid));
|
//这是个.flv的流
|
||||||
if(!mediaSrc){
|
_mediaInfo.parse(string(RTMP_SCHEMA) + "://" + _parser["Host"] + _parser.FullUrl());
|
||||||
//该rtmp源不存在
|
if(_mediaInfo._app.empty() || _mediaInfo._streamid.size() < 5){
|
||||||
|
//url不合法
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
_mediaInfo._streamid.erase(_mediaInfo._streamid.size() - 4);//去除.flv后缀
|
||||||
|
|
||||||
auto onRes = [this,mediaSrc](const string &err){
|
GET_CONFIG_AND_REGISTER(uint32_t,reqCnt,Http::kMaxReqCount);
|
||||||
|
bool bClose = (strcasecmp(_parser["Connection"].data(),"close") == 0) || ( ++_iReqCnt > reqCnt);
|
||||||
|
|
||||||
|
weak_ptr<HttpSession> weakSelf = dynamic_pointer_cast<HttpSession>(shared_from_this());
|
||||||
|
MediaSource::findAsync(_mediaInfo,weakSelf.lock(), true,5000,[weakSelf,bClose,this](const MediaSource::Ptr &src){
|
||||||
|
auto strongSelf = weakSelf.lock();
|
||||||
|
if(!strongSelf){
|
||||||
|
//本对象已经销毁
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto rtmp_src = dynamic_pointer_cast<RtmpMediaSource>(src);
|
||||||
|
if(!rtmp_src){
|
||||||
|
//未找到该流
|
||||||
|
sendNotFound(bClose);
|
||||||
|
if(bClose){
|
||||||
|
shutdown();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//找到流了
|
||||||
|
auto onRes = [this,rtmp_src](const string &err){
|
||||||
bool authSuccess = err.empty();
|
bool authSuccess = err.empty();
|
||||||
if(!authSuccess){
|
if(!authSuccess){
|
||||||
sendResponse("401 Unauthorized", makeHttpHeader(true,err.size()),err);
|
sendResponse("401 Unauthorized", makeHttpHeader(true,err.size()),err);
|
||||||
shutdown();
|
shutdown();
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
//找到rtmp源,发送http头,负载后续发送
|
//找到rtmp源,发送http头,负载后续发送
|
||||||
sendResponse("200 OK", makeHttpHeader(false,0,get_mime_type(".flv")), "");
|
sendResponse("200 OK", makeHttpHeader(false,0,get_mime_type(".flv")), "");
|
||||||
|
|
||||||
|
|
@ -236,7 +255,7 @@ inline bool HttpSession::checkLiveFlvStream(){
|
||||||
(*this) << SocketFlags(kSockFlags);
|
(*this) << SocketFlags(kSockFlags);
|
||||||
|
|
||||||
try{
|
try{
|
||||||
start(getPoller(),mediaSrc);
|
start(getPoller(),rtmp_src);
|
||||||
}catch (std::exception &ex){
|
}catch (std::exception &ex){
|
||||||
//该rtmp源不存在
|
//该rtmp源不存在
|
||||||
shutdown();
|
shutdown();
|
||||||
|
|
@ -262,6 +281,7 @@ inline bool HttpSession::checkLiveFlvStream(){
|
||||||
//该事件无人监听,默认不鉴权
|
//该事件无人监听,默认不鉴权
|
||||||
onRes("");
|
onRes("");
|
||||||
}
|
}
|
||||||
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue