mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-25 03:02:22 +08:00
新增自定义rtmp command
This commit is contained in:
@@ -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
|
||||
|
||||
//通用配置项目
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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 */
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user