1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-02-15 04:42:04 +00:00

RTC: Refine code

This commit is contained in:
winlin 2020-08-13 17:20:03 +08:00
parent 4c7de039ba
commit 3617acf01c
3 changed files with 16 additions and 6 deletions

View file

@ -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<uint32_t, SrsRtcPlayStream*>::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<SrsMediaPayloadType> 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<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) {
@ -2998,7 +2999,8 @@ srs_error_t SrsRtcConnection::create_player(SrsRequest* req, std::map<uint32_t,
// make map between ssrc and player for fastly searching
for(map<uint32_t, SrsRtcTrackDescription*>::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<uint32_t, SrsRtcPlayStream*>::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());
}

View file

@ -29,6 +29,7 @@ using namespace std;
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <srs_kernel_error.hpp>
#include <srs_kernel_log.hpp>
@ -314,8 +315,13 @@ vector<SrsMediaPayloadType> SrsMediaDesc::find_media_with_encoding_name(const st
{
std::vector<SrsMediaPayloadType> 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]);
}
}

View file

@ -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<std::string> vec = split_str(fmtp, ";");
for (size_t i = 0; i < vec.size(); ++i) {