Start supporting H264 packetization mode 0.
The work was already done to support it, but it wasn't being negotiated in SDP. This means we'll now see 8 H264 payload types instead of 4; one for each combination of BP/CBP profiles, packetization modes 0/1, and RTX/non-RTX. This could be problematic in the future, since we're starting to run out of dynamic payload types (using 25 of 32). Bug: chromium:600254 Change-Id: Ief2340db77c796f12980445b547b87e939170fae Reviewed-on: https://webrtc-review.googlesource.com/77264 Commit-Queue: Taylor Brandstetter <deadbeef@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Reviewed-by: Magnus Jedvert <magjed@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23372}
This commit is contained in:
committed by
Commit Bot
parent
70bb326fa4
commit
3409cfa378
@ -40,14 +40,17 @@ bool IsH264CodecSupported() {
|
||||
#endif
|
||||
}
|
||||
|
||||
SdpVideoFormat CreateH264Format(H264::Profile profile, H264::Level level) {
|
||||
SdpVideoFormat CreateH264Format(H264::Profile profile,
|
||||
H264::Level level,
|
||||
const std::string& packetization_mode) {
|
||||
const rtc::Optional<std::string> profile_string =
|
||||
H264::ProfileLevelIdToString(H264::ProfileLevelId(profile, level));
|
||||
RTC_CHECK(profile_string);
|
||||
return SdpVideoFormat(cricket::kH264CodecName,
|
||||
{{cricket::kH264FmtpProfileLevelId, *profile_string},
|
||||
{cricket::kH264FmtpLevelAsymmetryAllowed, "1"},
|
||||
{cricket::kH264FmtpPacketizationMode, "1"}});
|
||||
return SdpVideoFormat(
|
||||
cricket::kH264CodecName,
|
||||
{{cricket::kH264FmtpProfileLevelId, *profile_string},
|
||||
{cricket::kH264FmtpLevelAsymmetryAllowed, "1"},
|
||||
{cricket::kH264FmtpPacketizationMode, packetization_mode}});
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@ -67,8 +70,15 @@ std::vector<SdpVideoFormat> SupportedH264Codecs() {
|
||||
// decoder for that profile is required to be able to decode CBP. This means
|
||||
// we can encode and send CBP even though we negotiated a potentially
|
||||
// higher profile. See the H264 spec for more information.
|
||||
return {CreateH264Format(H264::kProfileBaseline, H264::kLevel3_1),
|
||||
CreateH264Format(H264::kProfileConstrainedBaseline, H264::kLevel3_1)};
|
||||
//
|
||||
// We support both packetization modes 0 (mandatory) and 1 (optional,
|
||||
// preferred).
|
||||
return {
|
||||
CreateH264Format(H264::kProfileBaseline, H264::kLevel3_1, "1"),
|
||||
CreateH264Format(H264::kProfileBaseline, H264::kLevel3_1, "0"),
|
||||
CreateH264Format(H264::kProfileConstrainedBaseline, H264::kLevel3_1, "1"),
|
||||
CreateH264Format(H264::kProfileConstrainedBaseline, H264::kLevel3_1,
|
||||
"0")};
|
||||
}
|
||||
|
||||
std::unique_ptr<H264Encoder> H264Encoder::Create(
|
||||
|
||||
Reference in New Issue
Block a user