From 3617acf01c5f8861b3398f0845cc094a4d105f97 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 13 Aug 2020 17:20:03 +0800 Subject: [PATCH] RTC: Refine code --- trunk/src/app/srs_app_rtc_conn.cpp | 12 +++++++----- trunk/src/app/srs_app_rtc_sdp.cpp | 8 +++++++- trunk/src/app/srs_app_rtc_source.cpp | 2 ++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp index 23156ce66..68dc85b8e 100644 --- a/trunk/src/app/srs_app_rtc_conn.cpp +++ b/trunk/src/app/srs_app_rtc_conn.cpp @@ -1806,6 +1806,7 @@ srs_error_t SrsRtcConnection::dispatch_rtcp(SrsRtcpCommon* rtcp) publisher = it->second; } } + if (true) { uint32_t ssrc = required_player_ssrc? required_player_ssrc : rtcp->get_ssrc(); map::iterator it = players_ssrc_map_.find(ssrc); @@ -1816,11 +1817,11 @@ srs_error_t SrsRtcConnection::dispatch_rtcp(SrsRtcpCommon* rtcp) // Ignore if packet is required by publisher or player. if (required_publisher_ssrc && !publisher) { - srs_warn("SR: no ssrc %u in publishers", required_publisher_ssrc); + srs_warn("no ssrc %u in publishers. rtcp type:%u", required_publisher_ssrc, rtcp->type()); return err; } if (required_player_ssrc && !player) { - srs_warn("SR: no ssrc %u in players", required_player_ssrc); + srs_warn("no ssrc %u in players. rtcp type:%u", required_player_ssrc, rtcp->type()); return err; } @@ -2686,7 +2687,7 @@ srs_error_t SrsRtcConnection::negotiate_play_capability(SrsRequest* req, const S // TODO: check opus format specific param std::vector payloads = remote_media_desc.find_media_with_encoding_name("H264"); if (payloads.empty()) { - return srs_error_new(ERROR_RTC_SDP_EXCHANGE, "no valid found opus payload type"); + return srs_error_new(ERROR_RTC_SDP_EXCHANGE, "no valid found h264 payload type"); } SrsMediaPayloadType payload = payloads.at(0); @@ -2757,7 +2758,7 @@ srs_error_t SrsRtcConnection::negotiate_play_capability(SrsRequest* req, SrsRtcS } } - //negotiate audio media + //negotiate video media std::vector 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) { @@ -2998,7 +2999,8 @@ srs_error_t SrsRtcConnection::create_player(SrsRequest* req, std::map::iterator it = sub_relations.begin(); it != sub_relations.end(); ++it) { SrsRtcTrackDescription* track_desc = it->second; - if(players_ssrc_map_.end() != players_ssrc_map_.find(track_desc->ssrc_)) { + map::iterator it_player = players_ssrc_map_.find(track_desc->ssrc_); + if((players_ssrc_map_.end() != it_player) && (player != it_player->second)) { return srs_error_new(ERROR_RTC_DUPLICATED_SSRC, "duplicate ssrc %d, track id: %s", track_desc->ssrc_, track_desc->id_.c_str()); } diff --git a/trunk/src/app/srs_app_rtc_sdp.cpp b/trunk/src/app/srs_app_rtc_sdp.cpp index 86fd5a2fd..84e56f758 100644 --- a/trunk/src/app/srs_app_rtc_sdp.cpp +++ b/trunk/src/app/srs_app_rtc_sdp.cpp @@ -29,6 +29,7 @@ using namespace std; #include #include #include +#include #include #include @@ -314,8 +315,13 @@ vector SrsMediaDesc::find_media_with_encoding_name(const st { std::vector payloads; + std::string lower_name, upper_name; + transform(encoding_name.begin(), encoding_name.end(), lower_name.begin(), ::tolower); + transform(encoding_name.begin(), encoding_name.end(), upper_name.begin(), ::toupper); + for (size_t i = 0; i < payload_types_.size(); ++i) { - if (payload_types_[i].encoding_name_ == encoding_name) { + if (payload_types_[i].encoding_name_ == std::string(lower_name.c_str()) || + payload_types_[i].encoding_name_ == std::string(upper_name.c_str())) { payloads.push_back(payload_types_[i]); } } diff --git a/trunk/src/app/srs_app_rtc_source.cpp b/trunk/src/app/srs_app_rtc_source.cpp index 749992dcc..220111079 100644 --- a/trunk/src/app/srs_app_rtc_source.cpp +++ b/trunk/src/app/srs_app_rtc_source.cpp @@ -1194,6 +1194,8 @@ SrsMediaPayloadType SrsVideoPayload::generate_media_payload_type() srs_error_t SrsVideoPayload::set_h264_param_desc(std::string fmtp) { + // TODO: FIXME: Refine code. + // for example: level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f srs_error_t err = srs_success; std::vector vec = split_str(fmtp, ";"); for (size_t i = 0; i < vec.size(); ++i) {