Commit 29e4a6b1 by xiongziliang

http-flv支持延时注册流

parent 0dc7cbb8
...@@ -209,24 +209,43 @@ inline bool HttpSession::checkLiveFlvStream(){ ...@@ -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(){ ...@@ -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(){ ...@@ -262,6 +281,7 @@ inline bool HttpSession::checkLiveFlvStream(){
//该事件无人监听,默认不鉴权 //该事件无人监听,默认不鉴权
onRes(""); onRes("");
} }
});
return true; return true;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论