RTP: Handle missing rtp pay/depay elements

This commit is contained in:
Marvin W 2021-05-15 19:52:39 +02:00
parent 6399892bf2
commit 686035ca1e
No known key found for this signature in database
GPG key ID: 072E9235DB996F2A
2 changed files with 16 additions and 14 deletions

View file

@ -212,7 +212,8 @@ public class Dino.Plugins.Rtp.CodecUtil {
return null; return null;
} }
public bool is_element_supported(string element_name) { public bool is_element_supported(string? element_name) {
if (element_name == null) return false;
if (unsupported_elements.contains(element_name)) return false; if (unsupported_elements.contains(element_name)) return false;
if (supported_elements.contains(element_name)) return true; if (supported_elements.contains(element_name)) return true;
var test_element = Gst.ElementFactory.make(element_name, @"test-$element_name"); var test_element = Gst.ElementFactory.make(element_name, @"test-$element_name");
@ -220,14 +221,14 @@ public class Dino.Plugins.Rtp.CodecUtil {
supported_elements.add(element_name); supported_elements.add(element_name);
return true; return true;
} else { } else {
debug("%s is not supported on this platform", element_name); warning("%s is not supported on this platform", element_name);
unsupported_elements.add(element_name); unsupported_elements.add(element_name);
return false; return false;
} }
} }
public string? get_encode_element_name(string media, string? codec) { public string? get_encode_element_name(string media, string? codec) {
if (!is_element_supported(get_pay_element_name(media, codec))) return null; if (get_pay_element_name(media, codec) == null) return null;
foreach (string candidate in get_encode_candidates(media, codec)) { foreach (string candidate in get_encode_candidates(media, codec)) {
if (is_element_supported(candidate)) return candidate; if (is_element_supported(candidate)) return candidate;
} }
@ -235,12 +236,13 @@ public class Dino.Plugins.Rtp.CodecUtil {
} }
public string? get_pay_element_name(string media, string? codec) { public string? get_pay_element_name(string media, string? codec) {
string candidate = get_pay_candidate(media, codec); string? candidate = get_pay_candidate(media, codec);
if (is_element_supported(candidate)) return candidate; if (candidate != null && is_element_supported(candidate)) return candidate;
return null; return null;
} }
public string? get_decode_element_name(string media, string? codec) { public string? get_decode_element_name(string media, string? codec) {
if (get_depay_element_name(media, codec) == null) return null;
foreach (string candidate in get_decode_candidates(media, codec)) { foreach (string candidate in get_decode_candidates(media, codec)) {
if (is_element_supported(candidate)) return candidate; if (is_element_supported(candidate)) return candidate;
} }
@ -248,8 +250,8 @@ public class Dino.Plugins.Rtp.CodecUtil {
} }
public string? get_depay_element_name(string media, string? codec) { public string? get_depay_element_name(string media, string? codec) {
string candidate = get_depay_candidate(media, codec); string? candidate = get_depay_candidate(media, codec);
if (is_element_supported(candidate)) return candidate; if (candidate != null && is_element_supported(candidate)) return candidate;
return null; return null;
} }
@ -260,8 +262,8 @@ public class Dino.Plugins.Rtp.CodecUtil {
public string? get_decode_bin_description(string media, string? codec, JingleRtp.PayloadType? payload_type, string? element_name = null, string? name = null) { public string? get_decode_bin_description(string media, string? codec, JingleRtp.PayloadType? payload_type, string? element_name = null, string? name = null) {
if (codec == null) return null; if (codec == null) return null;
string base_name = name ?? @"encode-$codec-$(Random.next_int())"; string base_name = name ?? @"encode-$codec-$(Random.next_int())";
string depay = get_depay_element_name(media, codec); string? depay = get_depay_element_name(media, codec);
string decode = element_name ?? get_decode_element_name(media, codec); string? decode = element_name ?? get_decode_element_name(media, codec);
if (depay == null || decode == null) return null; if (depay == null || decode == null) return null;
string decode_prefix = get_decode_prefix(media, codec, decode, payload_type) ?? ""; string decode_prefix = get_decode_prefix(media, codec, decode, payload_type) ?? "";
string decode_args = get_decode_args(media, codec, decode, payload_type) ?? ""; string decode_args = get_decode_args(media, codec, decode, payload_type) ?? "";
@ -285,8 +287,8 @@ public class Dino.Plugins.Rtp.CodecUtil {
public string? get_encode_bin_description(string media, string? codec, JingleRtp.PayloadType? payload_type, string? element_name = null, string? name = null) { public string? get_encode_bin_description(string media, string? codec, JingleRtp.PayloadType? payload_type, string? element_name = null, string? name = null) {
if (codec == null) return null; if (codec == null) return null;
string base_name = name ?? @"encode_$(codec)_$(Random.next_int())"; string base_name = name ?? @"encode_$(codec)_$(Random.next_int())";
string pay = get_pay_element_name(media, codec); string? pay = get_pay_element_name(media, codec);
string encode = element_name ?? get_encode_element_name(media, codec); string? encode = element_name ?? get_encode_element_name(media, codec);
if (pay == null || encode == null) return null; if (pay == null || encode == null) return null;
string encode_prefix = get_encode_prefix(media, codec, encode, payload_type) ?? ""; string encode_prefix = get_encode_prefix(media, codec, encode, payload_type) ?? "";
string encode_args = get_encode_args(media, codec, encode, payload_type) ?? ""; string encode_args = get_encode_args(media, codec, encode, payload_type) ?? "";

View file

@ -72,7 +72,7 @@ public class Dino.Plugins.Rtp.Module : JingleRtp.Module {
string? encode_element = codec_util.get_encode_element_name(media, codec); string? encode_element = codec_util.get_encode_element_name(media, codec);
string? decode_element = codec_util.get_decode_element_name(media, codec); string? decode_element = codec_util.get_decode_element_name(media, codec);
if (encode_element == null || decode_element == null) { if (encode_element == null || decode_element == null) {
debug("No suitable encoder or decoder found for %s", codec); warning("No suitable encoder or decoder found for %s", codec);
unsupported_codecs.add(codec); unsupported_codecs.add(codec);
return false; return false;
} }
@ -83,7 +83,7 @@ public class Dino.Plugins.Rtp.Module : JingleRtp.Module {
codec_util.mark_element_unsupported(encode_element); codec_util.mark_element_unsupported(encode_element);
encode_element = codec_util.get_encode_element_name(media, codec); encode_element = codec_util.get_encode_element_name(media, codec);
if (encode_element == null) { if (encode_element == null) {
debug("No suitable encoder found for %s", codec); warning("No suitable encoder found for %s", codec);
unsupported_codecs.add(codec); unsupported_codecs.add(codec);
return false; return false;
} }
@ -97,7 +97,7 @@ public class Dino.Plugins.Rtp.Module : JingleRtp.Module {
codec_util.mark_element_unsupported(decode_element); codec_util.mark_element_unsupported(decode_element);
decode_element = codec_util.get_decode_element_name(media, codec); decode_element = codec_util.get_decode_element_name(media, codec);
if (decode_element == null) { if (decode_element == null) {
debug("No suitable decoder found for %s", codec); warning("No suitable decoder found for %s", codec);
unsupported_codecs.add(codec); unsupported_codecs.add(codec);
return false; return false;
} }