mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-12-02 00:12:33 +08:00
动态代理拉流等待拉流结果
This commit is contained in:
parent
fbead02868
commit
ce7a0223f1
@ -363,7 +363,7 @@ void installWebApi() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
API_REGIST(api,addStreamProxy,{
|
API_REGIST_INVOKER(api,addStreamProxy,{
|
||||||
CHECK_SECRET();
|
CHECK_SECRET();
|
||||||
CHECK_ARGS("vhost","app","stream","url","secret");
|
CHECK_ARGS("vhost","app","stream","url","secret");
|
||||||
//添加拉流代理
|
//添加拉流代理
|
||||||
@ -376,12 +376,20 @@ void installWebApi() {
|
|||||||
));
|
));
|
||||||
//指定RTP over TCP(播放rtsp时有效)
|
//指定RTP over TCP(播放rtsp时有效)
|
||||||
(*player)[kRtpType] = allArgs["rtp_type"].as<int>();
|
(*player)[kRtpType] = allArgs["rtp_type"].as<int>();
|
||||||
//开始播放,如果播放失败或者播放中止,将会自动重试若干次,重试次数在配置文件中配置,默认一直重试
|
//开始播放,如果播放失败或者播放中止,将会自动重试若干次,默认一直重试
|
||||||
|
player->setPlayCallbackOnce([invoker,val,headerOut,player](const SockException &ex){
|
||||||
|
if(ex){
|
||||||
|
const_cast<Value &>(val)["code"] = API::OtherFailed;
|
||||||
|
const_cast<Value &>(val)["msg"] = ex.what();
|
||||||
|
}else{
|
||||||
|
const_cast<Value &>(val)["data"]["id"] = (uint64_t)player.get();
|
||||||
|
lock_guard<recursive_mutex> lck(s_proxyMapMtx);
|
||||||
|
s_proxyMap[(uint64_t)player.get()] = player;
|
||||||
|
}
|
||||||
|
const_cast<PlayerProxy::Ptr &>(player).reset();
|
||||||
|
invoker("200 OK", headerOut, val.toStyledString());
|
||||||
|
});
|
||||||
player->play(allArgs["url"]);
|
player->play(allArgs["url"]);
|
||||||
|
|
||||||
val["data"]["id"] = player.get();
|
|
||||||
lock_guard<recursive_mutex> lck(s_proxyMapMtx);
|
|
||||||
s_proxyMap[(uint64_t)player.get()] = player;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
API_REGIST(api,delStreamProxy,{
|
API_REGIST(api,delStreamProxy,{
|
||||||
|
@ -75,6 +75,10 @@ PlayerProxy::PlayerProxy(const string &strVhost,
|
|||||||
_bEnableMp4 = bEnableMp4;
|
_bEnableMp4 = bEnableMp4;
|
||||||
_iRetryCount = iRetryCount;
|
_iRetryCount = iRetryCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PlayerProxy::setPlayCallbackOnce(const function<void(const SockException &ex)> &cb){
|
||||||
|
_playCB = cb;
|
||||||
|
}
|
||||||
void PlayerProxy::play(const string &strUrlTmp) {
|
void PlayerProxy::play(const string &strUrlTmp) {
|
||||||
weak_ptr<PlayerProxy> weakSelf = shared_from_this();
|
weak_ptr<PlayerProxy> weakSelf = shared_from_this();
|
||||||
std::shared_ptr<int> piFailedCnt(new int(0)); //连续播放失败次数
|
std::shared_ptr<int> piFailedCnt(new int(0)); //连续播放失败次数
|
||||||
@ -83,6 +87,12 @@ void PlayerProxy::play(const string &strUrlTmp) {
|
|||||||
if(!strongSelf) {
|
if(!strongSelf) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(strongSelf->_playCB) {
|
||||||
|
strongSelf->_playCB(err);
|
||||||
|
strongSelf->_playCB = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
if(!err) {
|
if(!err) {
|
||||||
// 播放成功
|
// 播放成功
|
||||||
*piFailedCnt = 0;//连续播放失败次数清0
|
*piFailedCnt = 0;//连续播放失败次数清0
|
||||||
|
@ -56,7 +56,14 @@ public:
|
|||||||
|
|
||||||
virtual ~PlayerProxy();
|
virtual ~PlayerProxy();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置play结果回调,只触发一次;在play执行之前有效
|
||||||
|
* @param cb
|
||||||
|
*/
|
||||||
|
void setPlayCallbackOnce(const function<void(const SockException &ex)> &cb);
|
||||||
|
|
||||||
void play(const string &strUrl) override;
|
void play(const string &strUrl) override;
|
||||||
|
|
||||||
bool close() override;
|
bool close() override;
|
||||||
private:
|
private:
|
||||||
void rePlay(const string &strUrl,int iFailedCnt);
|
void rePlay(const string &strUrl,int iFailedCnt);
|
||||||
@ -70,6 +77,7 @@ private:
|
|||||||
string _strApp;
|
string _strApp;
|
||||||
string _strSrc;
|
string _strSrc;
|
||||||
Timer::Ptr _timer;
|
Timer::Ptr _timer;
|
||||||
|
function<void(const SockException &ex)> _playCB;
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* namespace mediakit */
|
} /* namespace mediakit */
|
||||||
|
Loading…
Reference in New Issue
Block a user