修复webrtc纯音频推流时不能注册流的bug:#963

This commit is contained in:
ziyue 2021-07-07 14:47:41 +08:00
parent 039be5444e
commit 6220db77e8
4 changed files with 44 additions and 23 deletions

View File

@ -1034,15 +1034,17 @@ string RtcSession::toRtspSdp() const{
switch (m.type) {
case TrackAudio:
case TrackVideo: {
if (m.direction != RtpDirection::inactive) {
copy.media.emplace_back(m);
copy.media.back().plan.resize(1);
}
break;
}
default:
continue;
default: continue;
}
}
CHECK(!copy.media.empty());
auto sdp = copy.toRtcSessionSdp();
toRtsp(sdp->items);
int i = 0;
@ -1368,6 +1370,18 @@ bool RtcSession::supportRtcpFb(const string &name, TrackType type) const {
return ref.find(name) != ref.end();
}
bool RtcSession::supportSimulcast() const {
for (auto &m : media) {
if (!m.rtp_rids.empty()) {
return true;
}
if (!m.rtp_ssrc_sim.empty()) {
return true;
}
}
return false;
}
string const SdpConst::kTWCCRtcpFb = "transport-cc";
string const SdpConst::kRembRtcpFb = "goog-remb";

View File

@ -673,6 +673,7 @@ public:
const RtcMedia *getMedia(TrackType type) const;
bool haveSSRC() const;
bool supportRtcpFb(const string &name, TrackType type = TrackType::TrackVideo) const;
bool supportSimulcast() const;
private:
RtcSessionSdp::Ptr toRtcSessionSdp() const;

View File

@ -448,6 +448,7 @@ void WebRtcTransportImp::onStartWebRTC() {
if (canRecvRtp()) {
_push_src->setSdp(getSdp(SdpType::answer).toRtspSdp());
_simulcast = getSdp(SdpType::answer).supportSimulcast();
}
if (canSendRtp()) {
_reader = _play_src->getRing()->attach(getPoller(), true);
@ -794,7 +795,12 @@ void WebRtcTransportImp::onSortedRtp(MediaTrack &track, const string &rid, RtpPa
}
}
if (_push_src) {
if (!_simulcast) {
assert(_push_src);
_push_src->onWrite(rtp, false);
return;
}
if (rtp->type == TrackAudio) {
//音频
for (auto &pr : _push_src_simulcast) {
@ -813,7 +819,6 @@ void WebRtcTransportImp::onSortedRtp(MediaTrack &track, const string &rid, RtpPa
}
src->onWrite(std::move(rtp), false);
}
}
}
///////////////////////////////////////////////////////////////////
@ -901,7 +906,7 @@ int WebRtcTransportImp::totalReaderCount(MediaSource &sender) {
for (auto &src : _push_src_simulcast) {
total_count += src.second->totalReaderCount();
}
return total_count;
return total_count + _push_src->totalReaderCount();
}
MediaOriginType WebRtcTransportImp::getOriginType(MediaSource &sender) const {

View File

@ -219,6 +219,7 @@ private:
void createRtpChannel(const string &rid, uint32_t ssrc, const MediaTrack::Ptr &track);
private:
bool _simulcast = false;
uint16_t _rtx_seq[2] = {0, 0};
//用掉的总流量
uint64_t _bytes_usage = 0;