mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
parent
efdbf37255
commit
a594678e3d
285 changed files with 12724 additions and 1671 deletions
|
@ -455,22 +455,26 @@ void SrsRtcPlayStream::on_stream_change(SrsRtcSourceDescription* desc)
|
|||
// Refresh the relation for audio.
|
||||
// TODO: FIXME: Match by label?
|
||||
if (desc && desc->audio_track_desc_ && audio_tracks_.size() == 1) {
|
||||
uint32_t ssrc = desc->audio_track_desc_->ssrc_;
|
||||
SrsRtcAudioSendTrack* track = audio_tracks_.begin()->second;
|
||||
if (! audio_tracks_.empty()) {
|
||||
uint32_t ssrc = desc->audio_track_desc_->ssrc_;
|
||||
SrsRtcAudioSendTrack* track = audio_tracks_.begin()->second;
|
||||
|
||||
audio_tracks_.clear();
|
||||
audio_tracks_.insert(make_pair(ssrc, track));
|
||||
audio_tracks_.clear();
|
||||
audio_tracks_.insert(make_pair(ssrc, track));
|
||||
}
|
||||
}
|
||||
|
||||
// Refresh the relation for video.
|
||||
// TODO: FIMXE: Match by label?
|
||||
if (desc && desc->video_track_descs_.size() == 1) {
|
||||
SrsRtcTrackDescription* vdesc = desc->video_track_descs_.at(0);
|
||||
uint32_t ssrc = vdesc->ssrc_;
|
||||
SrsRtcVideoSendTrack* track = video_tracks_.begin()->second;
|
||||
if (! video_tracks_.empty()) {
|
||||
SrsRtcTrackDescription* vdesc = desc->video_track_descs_.at(0);
|
||||
uint32_t ssrc = vdesc->ssrc_;
|
||||
SrsRtcVideoSendTrack* track = video_tracks_.begin()->second;
|
||||
|
||||
video_tracks_.clear();
|
||||
video_tracks_.insert(make_pair(ssrc, track));
|
||||
video_tracks_.clear();
|
||||
video_tracks_.insert(make_pair(ssrc, track));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3136,60 +3140,6 @@ srs_error_t SrsRtcConnection::negotiate_play_capability(SrsRtcUserConfig* ruc, s
|
|||
return err;
|
||||
}
|
||||
|
||||
srs_error_t SrsRtcConnection::fetch_source_capability(SrsRequest* req, std::map<uint32_t, SrsRtcTrackDescription*>& sub_relations)
|
||||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
bool nack_enabled = _srs_config->get_rtc_nack_enabled(req->vhost);
|
||||
bool twcc_enabled = _srs_config->get_rtc_twcc_enabled(req->vhost);
|
||||
|
||||
SrsRtcSource* source = NULL;
|
||||
if ((err = _srs_rtc_sources->fetch_or_create(req, &source)) != srs_success) {
|
||||
return srs_error_wrap(err, "fetch rtc source");
|
||||
}
|
||||
|
||||
std::vector<SrsRtcTrackDescription*> track_descs = source->get_track_desc("audio", "opus");
|
||||
std::vector<SrsRtcTrackDescription*> video_track_desc = source->get_track_desc("video", "H264");
|
||||
|
||||
track_descs.insert(track_descs.end(), video_track_desc.begin(), video_track_desc.end());
|
||||
for (int i = 0; i < (int)track_descs.size(); ++i) {
|
||||
SrsRtcTrackDescription* track = track_descs[i]->copy();
|
||||
uint32_t publish_ssrc = track->ssrc_;
|
||||
|
||||
int local_twcc_id = track->get_rtp_extension_id(kTWCCExt);
|
||||
|
||||
vector<string> rtcp_fb;
|
||||
track->media_->rtcp_fbs_.swap(rtcp_fb);
|
||||
for (int j = 0; j < (int)rtcp_fb.size(); j++) {
|
||||
if (nack_enabled) {
|
||||
if (rtcp_fb.at(j) == "nack" || rtcp_fb.at(j) == "nack pli") {
|
||||
track->media_->rtcp_fbs_.push_back(rtcp_fb.at(j));
|
||||
}
|
||||
}
|
||||
if (twcc_enabled && local_twcc_id) {
|
||||
if (rtcp_fb.at(j) == "transport-cc") {
|
||||
track->media_->rtcp_fbs_.push_back(rtcp_fb.at(j));
|
||||
}
|
||||
track->add_rtp_extension_desc(local_twcc_id, kTWCCExt);
|
||||
}
|
||||
}
|
||||
|
||||
track->ssrc_ = SrsRtcSSRCGenerator::instance()->generate_ssrc();
|
||||
|
||||
// TODO: FIXME: set audio_payload rtcp_fbs_,
|
||||
// according by whether downlink is support transport algorithms.
|
||||
// TODO: FIXME: if we support downlink RTX, MUST assign rtx_ssrc_, rtx_pt, rtx_apt
|
||||
// not support rtx
|
||||
srs_freep(track->rtx_);
|
||||
track->rtx_ssrc_ = 0;
|
||||
|
||||
track->set_direction("sendonly");
|
||||
sub_relations.insert(make_pair(publish_ssrc, track));
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
void video_track_generate_play_offer(SrsRtcTrackDescription* track, string mid, SrsSdp& local_sdp)
|
||||
{
|
||||
local_sdp.media_descs_.push_back(SrsMediaDesc("video"));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue