添加无人观看主动断开事件

This commit is contained in:
xiongziliang
2019-05-27 18:39:43 +08:00
parent 3917b6451c
commit b0bf216bc2
21 changed files with 213 additions and 52 deletions

View File

@@ -44,8 +44,8 @@ using namespace toolkit;
namespace mediakit {
class MediaSourceEvent
{
class MediaSource;
class MediaSourceEvent{
public:
MediaSourceEvent(){};
virtual ~MediaSourceEvent(){};
@@ -55,15 +55,18 @@ public:
return false;
}
virtual bool close() {
virtual bool close(bool force) {
//通知其停止推流
return false;
}
virtual void onReaderChanged(const EventPoller::Ptr &poller,int size,bool add_flag){}
virtual void onNoneReader(MediaSource &sender){
//没有任何读取器消费该源,表明该源可以关闭了
NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastStreamNoneReader,sender);
}
};
class MediaInfo
{
class MediaInfo{
public:
MediaInfo(){}
MediaInfo(const string &url){
@@ -85,7 +88,6 @@ public:
string _streamid;
StrCaseMap _params;
string _param_strs;
};
@@ -144,12 +146,12 @@ public:
virtual uint32_t getTimeStamp(TrackType trackType) = 0;
bool close() {
bool close(bool force) {
auto listener = _listener.lock();
if(!listener){
return false;
}
return listener->close();
return listener->close(force);
}
virtual void setListener(const std::weak_ptr<MediaSourceEvent> &listener){
_listener = listener;

View File

@@ -65,11 +65,15 @@ const char kBroadcastFlowReport[] = "kBroadcastFlowReport";
const char kBroadcastReloadConfig[] = "kBroadcastReloadConfig";
const char kBroadcastShellLogin[] = "kBroadcastShellLogin";
const char kBroadcastNotFoundStream[] = "kBroadcastNotFoundStream";
const char kBroadcastStreamNoneReader[] = "kBroadcastStreamNoneReader";
const char kFlowThreshold[] = "broadcast.flowThreshold";
const char kStreamNoneReaderDelayMS[] = "broadcast.streamNoneReaderDelayMS";
onceToken token([](){
mINI::Instance()[kFlowThreshold] = 1024;
mINI::Instance()[kStreamNoneReaderDelayMS] = 5 * 1000;
},nullptr);
} //namespace Broadcast

View File

@@ -116,9 +116,18 @@ extern const char kBroadcastFlowReport[];
extern const char kBroadcastNotFoundStream[];
#define BroadcastNotFoundStreamArgs const MediaInfo &args,TcpSession &sender
//某个流无人消费时触发,目的为了实现无人观看时主动断开拉流等业务逻辑
extern const char kBroadcastStreamNoneReader[];
#define BroadcastStreamNoneReaderArgs MediaSource &sender
//流量汇报事件流量阈值,单位KB默认1MB
extern const char kFlowThreshold[];
//流无人观看并且超过若干时间后才触发kBroadcastStreamNoneReader事件
//默认连续5秒无人观看然后触发kBroadcastStreamNoneReader事件
extern const char kStreamNoneReaderDelayMS[];
//更新配置文件事件广播,执行loadIniConfig函数加载配置文件成功后会触发该广播
extern const char kBroadcastReloadConfig[];
#define BroadcastReloadConfigArgs void