1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

WHIP: Add OBS support, ensuring compatibility with a unique SDP. v5.0.158, v6.0.51 (#3581)

1. Ignore SDP GROUP LS.
2. Support ice in global session info.
3. Support audio codec "OPUS" or "opus".

---------

Co-authored-by: Johnny <hellojinqiang@gmail.com>
This commit is contained in:
Winlin 2023-06-15 12:11:31 +08:00 committed by GitHub
parent 0ce2983e44
commit 7f997b39ae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 27 additions and 6 deletions

View file

@ -940,7 +940,12 @@ void SrsSdp::add_candidate(const std::string& protocol, const std::string& ip, c
std::string SrsSdp::get_ice_ufrag() const
{
// Becaues we use BUNDLE, so we can choose the first element.
// For OBS WHIP, use the global ice-ufrag.
if (!session_info_.ice_ufrag_.empty()) {
return session_info_.ice_ufrag_;
}
// Because we use BUNDLE, so we can choose the first element.
for (std::vector<SrsMediaDesc>::const_iterator iter = media_descs_.begin(); iter != media_descs_.end(); ++iter) {
const SrsMediaDesc* desc = &(*iter);
return desc->session_info_.ice_ufrag_;
@ -951,7 +956,12 @@ std::string SrsSdp::get_ice_ufrag() const
std::string SrsSdp::get_ice_pwd() const
{
// Becaues we use BUNDLE, so we can choose the first element.
// For OBS WHIP, use the global ice pwd.
if (!session_info_.ice_pwd_.empty()) {
return session_info_.ice_pwd_;
}
// Because we use BUNDLE, so we can choose the first element.
for (std::vector<SrsMediaDesc>::const_iterator iter = media_descs_.begin(); iter != media_descs_.end(); ++iter) {
const SrsMediaDesc* desc = &(*iter);
return desc->session_info_.ice_pwd_;
@ -962,7 +972,7 @@ std::string SrsSdp::get_ice_pwd() const
std::string SrsSdp::get_dtls_role() const
{
// Becaues we use BUNDLE, so we can choose the first element.
// Because we use BUNDLE, so we can choose the first element.
for (std::vector<SrsMediaDesc>::const_iterator iter = media_descs_.begin(); iter != media_descs_.end(); ++iter) {
const SrsMediaDesc* desc = &(*iter);
return desc->session_info_.setup_;
@ -1132,6 +1142,12 @@ srs_error_t SrsSdp::parse_attr_group(const std::string& value)
srs_error_t err = srs_success;
// @see: https://tools.ietf.org/html/rfc5888#section-5
// Overlook the OBS WHIP group LS, as it is utilized for synchronizing the playback of
// the relevant media streams, see https://datatracker.ietf.org/doc/html/rfc5888#section-7
if (srs_string_starts_with(value, "LS")) {
return err;
}
std::istringstream is(value);
FETCH(is, group_policy_);

View file

@ -684,7 +684,10 @@ std::vector<SrsRtcTrackDescription*> SrsRtcSource::get_track_desc(std::string ty
if (! stream_desc_->audio_track_desc_) {
return track_descs;
}
if (stream_desc_->audio_track_desc_->media_->name_ == media_name) {
string name = stream_desc_->audio_track_desc_->media_->name_;
std::transform(name.begin(), name.end(), name.begin(), static_cast<int(*)(int)>(std::tolower));
if (name == media_name) {
track_descs.push_back(stream_desc_->audio_track_desc_);
}
}

View file

@ -9,6 +9,6 @@
#define VERSION_MAJOR 5
#define VERSION_MINOR 0
#define VERSION_REVISION 157
#define VERSION_REVISION 158
#endif

View file

@ -9,6 +9,6 @@
#define VERSION_MAJOR 6
#define VERSION_MINOR 0
#define VERSION_REVISION 50
#define VERSION_REVISION 51
#endif