Commit d60101b9 by xiongziliang

优化单Track情况下等待3秒的情况

parent f76109c6
...@@ -59,6 +59,7 @@ void MediaSink::resetTracks() { ...@@ -59,6 +59,7 @@ void MediaSink::resetTracks() {
_track_map.clear(); _track_map.clear();
_trackReadyCallback.clear(); _trackReadyCallback.clear();
_ticker.resetTime(); _ticker.resetTime();
_max_track_size = 2;
} }
void MediaSink::inputFrame(const Frame::Ptr &frame) { void MediaSink::inputFrame(const Frame::Ptr &frame) {
...@@ -82,7 +83,7 @@ void MediaSink::inputFrame(const Frame::Ptr &frame) { ...@@ -82,7 +83,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
addTrackCompleted(); emitAllTrackReady();
return; return;
} }
...@@ -91,21 +92,26 @@ void MediaSink::inputFrame(const Frame::Ptr &frame) { ...@@ -91,21 +92,26 @@ void MediaSink::inputFrame(const Frame::Ptr &frame) {
return; return;
} }
if(_track_map.size() == 2){ if(_track_map.size() == _max_track_size){
//如果已经添加了音视频Track,并且不存在未准备好的Track,那么说明所有Track都准备好了 //如果已经添加了音视频Track,并且不存在未准备好的Track,那么说明所有Track都准备好了
addTrackCompleted(); emitAllTrackReady();
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)
addTrackCompleted(); emitAllTrackReady();
return; return;
} }
} }
} }
void MediaSink::addTrackCompleted() { void MediaSink::addTrackCompleted(){
lock_guard<recursive_mutex> lck(_mtx);
_max_track_size = _track_map.size();
}
void MediaSink::emitAllTrackReady() {
if (_allTrackReady) { if (_allTrackReady) {
return; return;
} }
......
...@@ -117,11 +117,17 @@ protected: ...@@ -117,11 +117,17 @@ protected:
*/ */
virtual void onTrackFrame(const Frame::Ptr &frame) {}; virtual void onTrackFrame(const Frame::Ptr &frame) {};
private: private:
/**
* 触发onAllTrackReady事件
*/
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;
bool _allTrackReady = false; bool _allTrackReady = false;
Ticker _ticker; Ticker _ticker;
int _max_track_size = 2;
}; };
......
...@@ -291,6 +291,9 @@ void PlayerProxy::onPlaySuccess() { ...@@ -291,6 +291,9 @@ void PlayerProxy::onPlaySuccess() {
audioMaker->addDelegate(_mediaMuxer); audioMaker->addDelegate(_mediaMuxer);
} }
//添加完毕所有track,防止单track情况下最大等待3秒
_mediaMuxer->addTrackCompleted();
if(_pMediaSrc){ if(_pMediaSrc){
_pMediaSrc->setTrackSource(_mediaMuxer); _pMediaSrc->setTrackSource(_mediaMuxer);
} }
......
...@@ -151,6 +151,9 @@ MP4Reader::MP4Reader(const string &strVhost,const string &strApp, const string & ...@@ -151,6 +151,9 @@ MP4Reader::MP4Reader(const string &strVhost,const string &strApp, const string &
H264Track::Ptr track = std::make_shared<H264Track>(_strSps,_strPps); H264Track::Ptr track = std::make_shared<H264Track>(_strSps,_strPps);
_mediaMuxer->addTrack(track); _mediaMuxer->addTrack(track);
} }
//添加完毕所有track,防止单track情况下最大等待3秒
_mediaMuxer->addTrackCompleted();
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论