Commit 636068b2 by xiongziliang

精简代码,改善代码结构

parent eca92369
...@@ -131,7 +131,7 @@ public: ...@@ -131,7 +131,7 @@ public:
vector<Track::Ptr> getTracks(bool ready = true) const override; vector<Track::Ptr> getTracks(bool ready = true) const override;
// 设置监听者 // 设置监听者
virtual void setListener(const std::weak_ptr<MediaSourceEvent> &listener); void setListener(const std::weak_ptr<MediaSourceEvent> &listener);
// 获取监听者 // 获取监听者
const std::weak_ptr<MediaSourceEvent>& getListener() const; const std::weak_ptr<MediaSourceEvent>& getListener() const;
...@@ -152,9 +152,9 @@ public: ...@@ -152,9 +152,9 @@ public:
// 该流无人观看 // 该流无人观看
void onNoneReader(); void onNoneReader();
// 开启或关闭录制 // 开启或关闭录制
virtual bool setupRecord(Recorder::type type, bool start, const string &custom_path); bool setupRecord(Recorder::type type, bool start, const string &custom_path);
// 获取录制状态 // 获取录制状态
virtual bool isRecording(Recorder::type type); bool isRecording(Recorder::type type);
// 同步查找流 // 同步查找流
static Ptr find(const string &schema, const string &vhost, const string &app, const string &id); static Ptr find(const string &schema, const string &vhost, const string &app, const string &id);
......
...@@ -61,26 +61,14 @@ public: ...@@ -61,26 +61,14 @@ public:
* 输入rtmp并解析 * 输入rtmp并解析
*/ */
void onWrite(const RtmpPacket::Ptr &pkt,bool key_pos = true) override { void onWrite(const RtmpPacket::Ptr &pkt,bool key_pos = true) override {
if(_all_track_ready && !_muxer->isEnabled()){ if (_all_track_ready && !_muxer->isEnabled()) {
//获取到所有Track后,并且未开启转协议,那么不需要解复用rtmp //获取到所有Track后,并且未开启转协议,那么不需要解复用rtmp
key_pos = pkt->isVideoKeyFrame(); key_pos = pkt->isVideoKeyFrame();
}else{ } else {
//需要解复用rtmp //需要解复用rtmp
key_pos = _demuxer->inputRtmp(pkt); key_pos = _demuxer->inputRtmp(pkt);
} }
RtmpMediaSource::onWrite(pkt, key_pos);
RtmpMediaSource::onWrite(pkt,key_pos);
}
/**
* 设置监听器
* @param listener
*/
void setListener(const std::weak_ptr<MediaSourceEvent> &listener) override {
RtmpMediaSource::setListener(listener);
if(_muxer){
_muxer->setMediaListener(listener);
}
} }
/** /**
...@@ -91,33 +79,6 @@ public: ...@@ -91,33 +79,6 @@ public:
} }
/** /**
* 设置录制状态
* @param type 录制类型
* @param start 开始或停止
* @param custom_path 开启录制时,指定自定义路径
* @return 是否设置成功
*/
bool setupRecord(Recorder::type type, bool start, const string &custom_path) override{
if(_muxer){
return _muxer->setupRecord(*this,type, start, custom_path);
}
return RtmpMediaSource::setupRecord(type, start, custom_path);
}
/**
* 获取录制状态
* @param type 录制类型
* @return 录制状态
*/
bool isRecording(Recorder::type type) override{
if(_muxer){
return _muxer->isRecording(*this,type);
}
return RtmpMediaSource::isRecording(type);
}
/**
* 设置协议转换 * 设置协议转换
* @param enableRtsp 是否转换成rtsp * @param enableRtsp 是否转换成rtsp
* @param enableHls 是否转换成hls * @param enableHls 是否转换成hls
...@@ -128,6 +89,9 @@ public: ...@@ -128,6 +89,9 @@ public:
_muxer = std::make_shared<MultiMediaSourceMuxer>(getVhost(), getApp(), getId(), _demuxer->getDuration(), enableRtsp, false, enableHls, enableMP4); _muxer = std::make_shared<MultiMediaSourceMuxer>(getVhost(), getApp(), getId(), _demuxer->getDuration(), enableRtsp, false, enableHls, enableMP4);
_muxer->setMediaListener(getListener()); _muxer->setMediaListener(getListener());
_muxer->setTrackListener(static_pointer_cast<RtmpMediaSourceImp>(shared_from_this())); _muxer->setTrackListener(static_pointer_cast<RtmpMediaSourceImp>(shared_from_this()));
//让_muxer对象拦截一部分事件(比如说录像相关事件)
setListener(_muxer);
for(auto &track : _demuxer->getTracks(false)){ for(auto &track : _demuxer->getTracks(false)){
_muxer->addTrack(track); _muxer->addTrack(track);
track->addDelegate(_muxer); track->addDelegate(_muxer);
......
...@@ -48,11 +48,11 @@ public: ...@@ -48,11 +48,11 @@ public:
* 输入rtp并解析 * 输入rtp并解析
*/ */
void onWrite(const RtpPacket::Ptr &rtp, bool key_pos) override { void onWrite(const RtpPacket::Ptr &rtp, bool key_pos) override {
if(_all_track_ready && !_muxer->isEnabled()){ if (_all_track_ready && !_muxer->isEnabled()) {
//获取到所有Track后,并且未开启转协议,那么不需要解复用rtp //获取到所有Track后,并且未开启转协议,那么不需要解复用rtp
//在关闭rtp解复用后,无法知道是否为关键帧,这样会导致无法秒开,或者开播花屏 //在关闭rtp解复用后,无法知道是否为关键帧,这样会导致无法秒开,或者开播花屏
key_pos = rtp->type == TrackVideo; key_pos = rtp->type == TrackVideo;
}else{ } else {
//需要解复用rtp //需要解复用rtp
key_pos = _demuxer->inputRtp(rtp); key_pos = _demuxer->inputRtp(rtp);
} }
...@@ -60,17 +60,6 @@ public: ...@@ -60,17 +60,6 @@ public:
} }
/** /**
* 设置监听器
* @param listener
*/
void setListener(const std::weak_ptr<MediaSourceEvent> &listener) override {
RtspMediaSource::setListener(listener);
if(_muxer){
_muxer->setMediaListener(listener);
}
}
/**
* 获取观看总人数,包括(hls/rtsp/rtmp) * 获取观看总人数,包括(hls/rtsp/rtmp)
*/ */
int totalReaderCount() override{ int totalReaderCount() override{
...@@ -78,33 +67,6 @@ public: ...@@ -78,33 +67,6 @@ public:
} }
/** /**
* 设置录制状态
* @param type 录制类型
* @param start 开始或停止
* @param custom_path 开启录制时,指定自定义路径
* @return 是否设置成功
*/
bool setupRecord(Recorder::type type, bool start, const string &custom_path) override{
if(_muxer){
return _muxer->setupRecord(*this,type, start, custom_path);
}
return RtspMediaSource::setupRecord(type, start, custom_path);
}
/**
* 获取录制状态
* @param type 录制类型
* @return 录制状态
*/
bool isRecording(Recorder::type type) override{
if(_muxer){
return _muxer->isRecording(*this,type);
}
return RtspMediaSource::isRecording(type);
}
/**
* 设置协议转换 * 设置协议转换
* @param enableRtmp 是否转换成rtmp * @param enableRtmp 是否转换成rtmp
* @param enableHls 是否转换成hls * @param enableHls 是否转换成hls
...@@ -115,6 +77,9 @@ public: ...@@ -115,6 +77,9 @@ public:
_muxer = std::make_shared<MultiMediaSourceMuxer>(getVhost(), getApp(), getId(), _demuxer->getDuration(), false, enableRtmp, enableHls, enableMP4); _muxer = std::make_shared<MultiMediaSourceMuxer>(getVhost(), getApp(), getId(), _demuxer->getDuration(), false, enableRtmp, enableHls, enableMP4);
_muxer->setMediaListener(getListener()); _muxer->setMediaListener(getListener());
_muxer->setTrackListener(static_pointer_cast<RtspMediaSourceImp>(shared_from_this())); _muxer->setTrackListener(static_pointer_cast<RtspMediaSourceImp>(shared_from_this()));
//让_muxer对象拦截一部分事件(比如说录像相关事件)
setListener(_muxer);
for(auto &track : _demuxer->getTracks(false)){ for(auto &track : _demuxer->getTracks(false)){
_muxer->addTrack(track); _muxer->addTrack(track);
track->addDelegate(_muxer); track->addDelegate(_muxer);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论