mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
HEVC: webrtc support hevc on safari. v6.0.34 (#3441)
Co-authored-by: winlin <winlin@vip.126.com> Co-authored-by: ChenGH <chengh_math@126.com>
This commit is contained in:
parent
a7514484a2
commit
2708752a9b
3 changed files with 48 additions and 1 deletions
|
@ -8,6 +8,7 @@ The changelog for SRS.
|
||||||
|
|
||||||
## SRS 6.0 Changelog
|
## SRS 6.0 Changelog
|
||||||
|
|
||||||
|
* v6.0, 2023-03-07, Merge [#3441](https://github.com/ossrs/srs/pull/3441): HEVC: webrtc support hevc on safari. v6.0.34 (#3441)
|
||||||
* v6.0, 2023-03-07, Merge [#3446](https://github.com/ossrs/srs/pull/3446): WebRTC: Warning if no ideal profile. v6.0.33 (#3446)
|
* v6.0, 2023-03-07, Merge [#3446](https://github.com/ossrs/srs/pull/3446): WebRTC: Warning if no ideal profile. v6.0.33 (#3446)
|
||||||
* v6.0, 2023-03-06, Merge [#3445](https://github.com/ossrs/srs/pull/3445): Support configure for generic linux. v6.0.32 (#3445)
|
* v6.0, 2023-03-06, Merge [#3445](https://github.com/ossrs/srs/pull/3445): Support configure for generic linux. v6.0.32 (#3445)
|
||||||
* v6.0, 2023-03-04, Merge [#3105](https://github.com/ossrs/srs/pull/3105): Kickoff publisher when stream is idle, which means no players. v6.0.31 (#3105)
|
* v6.0, 2023-03-04, Merge [#3105](https://github.com/ossrs/srs/pull/3105): Kickoff publisher when stream is idle, which means no players. v6.0.31 (#3105)
|
||||||
|
|
|
@ -2670,6 +2670,40 @@ srs_error_t SrsRtcConnection::negotiate_publish_capability(SrsRtcUserConfig* ruc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
track_desc->type_ = "video";
|
||||||
|
track_desc->set_codec_payload((SrsCodecPayload*)video_payload);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (remote_media_desc.is_video() && ruc->codec_ == "hevc") {
|
||||||
|
std::vector<SrsMediaPayloadType> payloads = remote_media_desc.find_media_with_encoding_name("H265");
|
||||||
|
if (payloads.empty()) {
|
||||||
|
return srs_error_new(ERROR_RTC_SDP_EXCHANGE, "no found valid H.265 payload type");
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: FIXME: pick up a profile for HEVC.
|
||||||
|
// @see https://www.rfc-editor.org/rfc/rfc7798#section-7.2.1
|
||||||
|
for (int j = 0; j < (int)payloads.size(); j++) {
|
||||||
|
const SrsMediaPayloadType& payload = payloads.at(j);
|
||||||
|
|
||||||
|
// Generate video payload for hevc.
|
||||||
|
SrsVideoPayload* video_payload = new SrsVideoPayload(payload.payload_type_, payload.encoding_name_, payload.clock_rate_);
|
||||||
|
|
||||||
|
// TODO: FIXME: Only support some transport algorithms.
|
||||||
|
for (int k = 0; k < (int)payload.rtcp_fb_.size(); ++k) {
|
||||||
|
const string& rtcp_fb = payload.rtcp_fb_.at(k);
|
||||||
|
|
||||||
|
if (nack_enabled) {
|
||||||
|
if (rtcp_fb == "nack" || rtcp_fb == "nack pli") {
|
||||||
|
video_payload->rtcp_fbs_.push_back(rtcp_fb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (twcc_enabled && remote_twcc_id) {
|
||||||
|
if (rtcp_fb == "transport-cc") {
|
||||||
|
video_payload->rtcp_fbs_.push_back(rtcp_fb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
track_desc->type_ = "video";
|
track_desc->type_ = "video";
|
||||||
track_desc->set_codec_payload((SrsCodecPayload*)video_payload);
|
track_desc->set_codec_payload((SrsCodecPayload*)video_payload);
|
||||||
break;
|
break;
|
||||||
|
@ -3024,6 +3058,18 @@ srs_error_t SrsRtcConnection::negotiate_play_capability(SrsRtcUserConfig* ruc, s
|
||||||
// @see https://bugs.chromium.org/p/webrtc/issues/detail?id=13166
|
// @see https://bugs.chromium.org/p/webrtc/issues/detail?id=13166
|
||||||
track_descs = source->get_track_desc("video", "AV1X");
|
track_descs = source->get_track_desc("video", "AV1X");
|
||||||
}
|
}
|
||||||
|
} else if (remote_media_desc.is_video() && ruc->codec_ == "hevc") {
|
||||||
|
std::vector<SrsMediaPayloadType> payloads = remote_media_desc.find_media_with_encoding_name("H265");
|
||||||
|
if (payloads.empty()) {
|
||||||
|
return srs_error_new(ERROR_RTC_SDP_EXCHANGE, "no valid found h265 payload type");
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_payload = payloads.at(0);
|
||||||
|
|
||||||
|
// TODO: FIXME: pick up a profile for HEVC.
|
||||||
|
// @see https://www.rfc-editor.org/rfc/rfc7798#section-7.2.1
|
||||||
|
|
||||||
|
track_descs = source->get_track_desc("video", "H265");
|
||||||
} else if (remote_media_desc.is_video()) {
|
} else if (remote_media_desc.is_video()) {
|
||||||
// TODO: check opus format specific param
|
// TODO: check opus format specific param
|
||||||
vector<SrsMediaPayloadType> payloads = remote_media_desc.find_media_with_encoding_name("H264");
|
vector<SrsMediaPayloadType> payloads = remote_media_desc.find_media_with_encoding_name("H264");
|
||||||
|
|
|
@ -9,6 +9,6 @@
|
||||||
|
|
||||||
#define VERSION_MAJOR 6
|
#define VERSION_MAJOR 6
|
||||||
#define VERSION_MINOR 0
|
#define VERSION_MINOR 0
|
||||||
#define VERSION_REVISION 33
|
#define VERSION_REVISION 34
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue