mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
RTC: Add negotiate play by desc
This commit is contained in:
parent
ffeb3a8c46
commit
9f2aaef283
2 changed files with 45 additions and 0 deletions
|
@ -2758,6 +2758,49 @@ srs_error_t SrsRtcConnection::negotiate_play_capability(SrsRequest* req, const S
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
srs_error_t SrsRtcConnection::negotiate_play_capability(SrsRequest* req, SrsRtcStreamDescription* req_stream_desc,
|
||||||
|
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);
|
||||||
|
|
||||||
|
SrsRtcStream* 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*> src_track_descs;
|
||||||
|
//negotiate audio media
|
||||||
|
if(NULL != req_stream_desc->audio_track_desc_) {
|
||||||
|
src_track_descs = source->get_track_desc("audio", "opus");
|
||||||
|
if (src_track_descs.size() > 0) {
|
||||||
|
// FIXME: use source sdp or subscribe sdp? native subscribe may have no sdp
|
||||||
|
SrsRtcTrackDescription *track = src_track_descs[0]->copy();
|
||||||
|
sub_relations.insert(make_pair(track->ssrc_, track));
|
||||||
|
track->ssrc_ = SrsRtcSSRCGenerator::instance()->generate_ssrc();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//negotiate audio media
|
||||||
|
std::vector<SrsRtcTrackDescription*> req_video_tracks = req_stream_desc->video_track_descs_;
|
||||||
|
src_track_descs = source->get_track_desc("video", "h264");
|
||||||
|
for(int i = 0; i < req_video_tracks.size(); ++i) {
|
||||||
|
SrsRtcTrackDescription* req_video = req_video_tracks.at(i);
|
||||||
|
for(int j = 0; j < src_track_descs.size(); ++j) {
|
||||||
|
SrsRtcTrackDescription* src_video = src_track_descs.at(j);
|
||||||
|
if(req_video->id_ == src_video->id_) {
|
||||||
|
// FIXME: use source sdp or subscribe sdp? native subscribe may have no sdp
|
||||||
|
SrsRtcTrackDescription *track = src_video->copy();
|
||||||
|
sub_relations.insert(make_pair(track->ssrc_, track));
|
||||||
|
track->ssrc_ = SrsRtcSSRCGenerator::instance()->generate_ssrc();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
srs_error_t SrsRtcConnection::fetch_source_capability(SrsRequest* req, std::map<uint32_t, SrsRtcTrackDescription*>& sub_relations)
|
srs_error_t SrsRtcConnection::fetch_source_capability(SrsRequest* req, std::map<uint32_t, SrsRtcTrackDescription*>& sub_relations)
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
|
|
@ -419,7 +419,9 @@ private:
|
||||||
srs_error_t negotiate_publish_capability(SrsRequest* req, const SrsSdp& remote_sdp, SrsRtcStreamDescription* stream_desc);
|
srs_error_t negotiate_publish_capability(SrsRequest* req, const SrsSdp& remote_sdp, SrsRtcStreamDescription* stream_desc);
|
||||||
srs_error_t generate_publish_local_sdp(SrsRequest* req, SrsSdp& local_sdp, SrsRtcStreamDescription* stream_desc);
|
srs_error_t generate_publish_local_sdp(SrsRequest* req, SrsSdp& local_sdp, SrsRtcStreamDescription* stream_desc);
|
||||||
// play media capabilitiy negotiate
|
// play media capabilitiy negotiate
|
||||||
|
//TODO: Use StreamDescription to negotiate and remove first negotiate_play_capability function
|
||||||
srs_error_t negotiate_play_capability(SrsRequest* req, const SrsSdp& remote_sdp, std::map<uint32_t, SrsRtcTrackDescription*>& sub_relations);
|
srs_error_t negotiate_play_capability(SrsRequest* req, const SrsSdp& remote_sdp, std::map<uint32_t, SrsRtcTrackDescription*>& sub_relations);
|
||||||
|
srs_error_t negotiate_play_capability(SrsRequest* req, SrsRtcStreamDescription* req_stream_desc, 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 fetch_source_capability(SrsRequest* req, std::map<uint32_t, SrsRtcTrackDescription*>& sub_relations);
|
||||||
srs_error_t generate_play_local_sdp(SrsRequest* req, SrsSdp& local_sdp, SrsRtcStreamDescription* stream_desc);
|
srs_error_t generate_play_local_sdp(SrsRequest* req, SrsSdp& local_sdp, SrsRtcStreamDescription* stream_desc);
|
||||||
srs_error_t create_player(SrsRequest* request, std::map<uint32_t, SrsRtcTrackDescription*> sub_relations);
|
srs_error_t create_player(SrsRequest* request, std::map<uint32_t, SrsRtcTrackDescription*> sub_relations);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue