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;
|
||||
}
|
||||
|
||||
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 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 generate_publish_local_sdp(SrsRequest* req, SrsSdp& local_sdp, SrsRtcStreamDescription* stream_desc);
|
||||
// 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, 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 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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue