Commit 4470f2e4 by xiongziliang

添加addTrackCompleted方法,缩短流注册延时

parent ac335923
...@@ -82,7 +82,7 @@ void MediaSink::inputFrame(const Frame::Ptr &frame) { ...@@ -82,7 +82,7 @@ void MediaSink::inputFrame(const Frame::Ptr &frame) {
if(!_allTrackReady){ if(!_allTrackReady){
if(_ticker.elapsedTime() > MAX_WAIT_MS_READY){ if(_ticker.elapsedTime() > MAX_WAIT_MS_READY){
//如果超过规定时间,那么不再等待并忽略未准备好的Track //如果超过规定时间,那么不再等待并忽略未准备好的Track
emitAllTrackReady(); addTrackCompleted();
return; return;
} }
...@@ -93,26 +93,29 @@ void MediaSink::inputFrame(const Frame::Ptr &frame) { ...@@ -93,26 +93,29 @@ void MediaSink::inputFrame(const Frame::Ptr &frame) {
if(_track_map.size() == 2){ if(_track_map.size() == 2){
//如果已经添加了音视频Track,并且不存在未准备好的Track,那么说明所有Track都准备好了 //如果已经添加了音视频Track,并且不存在未准备好的Track,那么说明所有Track都准备好了
emitAllTrackReady(); addTrackCompleted();
return; return;
} }
if(_track_map.size() == 1 && _ticker.elapsedTime() > MAX_WAIT_MS_ADD_TRACK){ if(_track_map.size() == 1 && _ticker.elapsedTime() > MAX_WAIT_MS_ADD_TRACK){
//如果只有一个Track,那么在该Track添加后,我们最多还等待若干时间(可能后面还会添加Track) //如果只有一个Track,那么在该Track添加后,我们最多还等待若干时间(可能后面还会添加Track)
emitAllTrackReady(); addTrackCompleted();
return; return;
} }
} }
} }
void MediaSink::emitAllTrackReady() { void MediaSink::addTrackCompleted() {
_allTrackReady = true; if (_allTrackReady) {
if(!_trackReadyCallback.empty()){ return;
}
if (!_trackReadyCallback.empty()) {
//这是超时强制忽略未准备好的Track //这是超时强制忽略未准备好的Track
_trackReadyCallback.clear(); _trackReadyCallback.clear();
//移除未准备好的Track //移除未准备好的Track
for(auto it = _track_map.begin() ; it != _track_map.end() ; ){ for (auto it = _track_map.begin(); it != _track_map.end();) {
if(!it->second->ready()){ if (!it->second->ready()) {
it = _track_map.erase(it); it = _track_map.erase(it);
continue; continue;
} }
...@@ -120,8 +123,9 @@ void MediaSink::emitAllTrackReady() { ...@@ -120,8 +123,9 @@ void MediaSink::emitAllTrackReady() {
} }
} }
if(!_track_map.empty()){ if (!_track_map.empty()) {
//最少有一个有效的Track //最少有一个有效的Track
_allTrackReady = true;
onAllTrackReady(); onAllTrackReady();
} }
} }
......
...@@ -82,6 +82,13 @@ public: ...@@ -82,6 +82,13 @@ public:
void addTrack(const Track::Ptr & track) override; void addTrack(const Track::Ptr & track) override;
/** /**
* 添加Track完毕,如果是单Track,会最多等待3秒才会触发onAllTrackReady
* 这样会增加生成流的延时,如果添加了音视频双Track,那么可以不调用此方法
* 否则为了降低流注册延时,请手动调用此方法
*/
void addTrackCompleted();
/**
* 重置track * 重置track
*/ */
void resetTracks() override; void resetTracks() override;
...@@ -110,8 +117,6 @@ protected: ...@@ -110,8 +117,6 @@ protected:
*/ */
virtual void onTrackFrame(const Frame::Ptr &frame) {}; virtual void onTrackFrame(const Frame::Ptr &frame) {};
private: private:
void emitAllTrackReady();
private:
mutable recursive_mutex _mtx; mutable recursive_mutex _mtx;
map<int,Track::Ptr> _track_map; map<int,Track::Ptr> _track_map;
map<int,function<void()> > _trackReadyCallback; map<int,function<void()> > _trackReadyCallback;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论