新增自定义rtmp command

This commit is contained in:
monktan
2020-11-30 10:00:26 +08:00
parent 8e575c0c78
commit 575a231ba0
9 changed files with 56 additions and 3 deletions

View File

@@ -55,6 +55,7 @@ const string kBroadcastStreamNoneReader = "kBroadcastStreamNoneReader";
const string kBroadcastHttpBeforeAccess = "kBroadcastHttpBeforeAccess";
const string kBroadcastRecordHls = "kBroadcastRecordHls";
const string kBroadcaseProxyPusherFailed = "kBroadcaseProxyPusherFailed";
const string kBroadcaseProxyPusherNoneReader = "kBroadcaseProxyPusherNoneReader";
} //namespace Broadcast
//通用配置项目

View File

@@ -74,6 +74,10 @@ extern const string kBroadcastRecordHls;
extern const string kBroadcaseProxyPusherFailed;
#define BroadcaseProxyPusherFailedArgs const ProxyPusherInfo &info
//转推流无人观看广播
extern const string kBroadcaseProxyPusherNoneReader;
#define BroadcaseProxyPusherNoneReaderArgs const std::string& key
//收到http api请求广播
extern const string kBroadcastHttpRequest;
#define BroadcastHttpRequestArgs const Parser &parser,const HttpSession::HttpResponseInvoker &invoker,bool &consumed,SockInfo &sender

View File

@@ -57,6 +57,7 @@ using namespace toolkit;
#define CONTROL_STREAM_ISRECORDED 4
#define CONTROL_PING_REQUEST 6
#define CONTROL_PING_RESPONSE 7
#define CONTROL_CUSTOM_FREEZE 16
#define STREAM_CONTROL 0
#define STREAM_MEDIA 1

View File

@@ -699,7 +699,20 @@ void RtmpProtocol::handle_chunk(RtmpPacket& chunk_data) {
break;
}
default: /*WarnL << "unhandled user control:" << event_type; */ break;
case CONTROL_CUSTOM_FREEZE: {
//无人观看
if (chunk_data.buffer.size() < 4) {
throw std::runtime_error("CONTROL_CUSTOM_FREEZE: Not enough data.");
}
uint32_t is_freeze = load_be32(&chunk_data.buffer[0]);
TraceL << "CONTROL_CUSTOM_FREEZE:" << is_freeze;
onStreamFreeze(is_freeze);
}
default: {
//WarnL << "unhandled user control:" << event_type;
break;
}
}
break;
}

View File

@@ -46,6 +46,10 @@ protected:
virtual void onStreamEof(uint32_t stream_index){};
virtual void onStreamDry(uint32_t stream_index){};
//custom rtmo command
//MSG_USER_CONTROL(4)下面定义CONTROL_CUSTOM_FREEZE(16)
virtual void onStreamFreeze(bool is_freeze){};
protected:
//// HttpRequestSplitter override ////
int64_t onRecvHeader(const char *data,uint64_t len) override { return 0; }

View File

@@ -312,6 +312,14 @@ void RtmpPusher::onRtmpChunk(RtmpPacket &chunk_data) {
}
}
void RtmpPusher::onStreamFreeze(bool is_freeze) {
auto src = _publish_src.lock();
if(is_freeze && src) {
std::string key = src->getVhost()+ "/" + src->getApp() + "/" + src->getId();
NoticeCenter::Instance().emitEvent(Broadcast::kBroadcaseProxyPusherNoneReader, key);
}
}
} /* namespace mediakit */

View File

@@ -47,6 +47,7 @@ protected:
void onSendRawData(Buffer::Ptr buffer) override{
send(std::move(buffer));
}
void onStreamFreeze(bool is_freeze) override;
private:
void onPublishResult(const SockException &ex, bool handshake_done);