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"));
|
||||
|
|
|
@ -541,7 +541,6 @@ private:
|
|||
// play media capabilitiy negotiate
|
||||
//TODO: Use StreamDescription to negotiate and remove first negotiate_play_capability function
|
||||
srs_error_t negotiate_play_capability(SrsRtcUserConfig* ruc, std::map<uint32_t, SrsRtcTrackDescription*>& sub_relations);
|
||||
srs_error_t fetch_source_capability(SrsRequest* req, std::map<uint32_t, SrsRtcTrackDescription*>& sub_relations);
|
||||
srs_error_t generate_play_local_sdp(SrsRequest* req, SrsSdp& local_sdp, SrsRtcSourceDescription* stream_desc, bool unified_plan);
|
||||
srs_error_t create_player(SrsRequest* request, std::map<uint32_t, SrsRtcTrackDescription*> sub_relations);
|
||||
srs_error_t create_publisher(SrsRequest* request, SrsRtcSourceDescription* stream_desc);
|
||||
|
|
|
@ -57,6 +57,9 @@ public:
|
|||
public:
|
||||
uint32_t ssrc_;
|
||||
std::string cname_;
|
||||
// See https://webrtchacks.com/sdp-anatomy/
|
||||
// a=ssrc:2231627014 msid:lgsCFqt9kN2fVKw5wg3NKqGdATQoltEwOdMS daed9400-d0dd-4db3-b949-422499e96e2d
|
||||
// a=ssrc:2231627014 msid:{msid_} {msid_tracker_}
|
||||
std::string msid_;
|
||||
std::string msid_tracker_;
|
||||
std::string mslabel_;
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#define RTMP_SIG_SRS_CODE "Leo"
|
||||
#define RTMP_SIG_SRS_URL "https://github.com/ossrs/srs"
|
||||
#define RTMP_SIG_SRS_LICENSE "MIT"
|
||||
#define RTMP_SIG_SRS_AUTHORS "Winlin,Wenjie,Runner365,John,B.P.Y,Lixin"
|
||||
#define RTMP_SIG_SRS_AUTHORS "https://github.com/ossrs/srs/blob/4.0release/AUTHORS.txt"
|
||||
#define RTMP_SIG_SRS_VERSION SRS_XSTR(VERSION_MAJOR) "." SRS_XSTR(VERSION_MINOR) "." SRS_XSTR(VERSION_REVISION)
|
||||
#define RTMP_SIG_SRS_SERVER RTMP_SIG_SRS_KEY "/" RTMP_SIG_SRS_VERSION "(" RTMP_SIG_SRS_CODE ")"
|
||||
#define RTMP_SIG_SRS_DOMAIN "ossrs.net"
|
||||
|
|
|
@ -9,6 +9,6 @@
|
|||
|
||||
#define VERSION_MAJOR 4
|
||||
#define VERSION_MINOR 0
|
||||
#define VERSION_REVISION 127
|
||||
#define VERSION_REVISION 130
|
||||
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,6 @@
|
|||
|
||||
#define VERSION_MAJOR 5
|
||||
#define VERSION_MINOR 0
|
||||
#define VERSION_REVISION 4
|
||||
#define VERSION_REVISION 5
|
||||
|
||||
#endif
|
||||
|
|
|
@ -94,14 +94,6 @@ srs_error_t do_main(int argc, char** argv)
|
|||
ProfilerStart("gperf.srs.gcp");
|
||||
#endif
|
||||
|
||||
// directly compile error when these two macro defines.
|
||||
#if defined(SRS_GPERF_MC) && defined(SRS_GPERF_MP)
|
||||
#error ("option --with-gmc confict with --with-gmp, "
|
||||
"@see: http://google-perftools.googlecode.com/svn/trunk/doc/heap_checker.html\n"
|
||||
"Note that since the heap-checker uses the heap-profiling framework internally, "
|
||||
"it is not possible to run both the heap-checker and heap profiler at the same time");
|
||||
#endif
|
||||
|
||||
// never use gmp to check memory leak.
|
||||
#ifdef SRS_GPERF_MP
|
||||
#warning "gmp is not used for memory leak, please use gmc instead."
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue