Commit fad8dd74 by 夏楚 Committed by GitHub

修复webrtc开启simulcast推流时,统计观看人数线程安全相关bug (#2640)

parent 077566d1
...@@ -59,11 +59,14 @@ bool WebRtcPusher::close(MediaSource &sender) { ...@@ -59,11 +59,14 @@ bool WebRtcPusher::close(MediaSource &sender) {
} }
int WebRtcPusher::totalReaderCount(MediaSource &sender) { int WebRtcPusher::totalReaderCount(MediaSource &sender) {
auto total_count = 0; auto total_count = _push_src ? _push_src->totalReaderCount() : 0;
for (auto &src : _push_src_sim) { if (_simulcast) {
total_count += src.second->totalReaderCount(); std::lock_guard<std::mutex> lock(_mtx);
for (auto &src : _push_src_sim) {
total_count += src.second->totalReaderCount();
}
} }
return total_count + _push_src->totalReaderCount(); return total_count;
} }
MediaOriginType WebRtcPusher::getOriginType(MediaSource &sender) const { MediaOriginType WebRtcPusher::getOriginType(MediaSource &sender) const {
...@@ -96,6 +99,7 @@ void WebRtcPusher::onRecvRtp(MediaTrack &track, const string &rid, RtpPacket::Pt ...@@ -96,6 +99,7 @@ void WebRtcPusher::onRecvRtp(MediaTrack &track, const string &rid, RtpPacket::Pt
} }
} else { } else {
//视频 //视频
std::lock_guard<std::mutex> lock(_mtx);
auto &src = _push_src_sim[rid]; auto &src = _push_src_sim[rid];
if (!src) { if (!src) {
const auto& stream = _push_src->getMediaTuple().stream; const auto& stream = _push_src->getMediaTuple().stream;
......
...@@ -65,6 +65,7 @@ private: ...@@ -65,6 +65,7 @@ private:
//推流所有权 //推流所有权
std::shared_ptr<void> _push_src_ownership; std::shared_ptr<void> _push_src_ownership;
//推流的rtsp源,支持simulcast //推流的rtsp源,支持simulcast
std::mutex _mtx;
std::unordered_map<std::string/*rid*/, RtspMediaSource::Ptr> _push_src_sim; std::unordered_map<std::string/*rid*/, RtspMediaSource::Ptr> _push_src_sim;
std::unordered_map<std::string/*rid*/, std::shared_ptr<void> > _push_src_sim_ownership; std::unordered_map<std::string/*rid*/, std::shared_ptr<void> > _push_src_sim_ownership;
}; };
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论