git » sdk » commit 01f64e8

Set some opus encoder settings

author Stephen Paul Weber
2024-04-16 02:17:07 UTC
committer Stephen Paul Weber
2024-04-16 02:17:07 UTC
parent 38e838f898c8050206842a3f3f7a7930564a3dc0

Set some opus encoder settings

If CPU usage is too high COMPLEXITY would be another to set (defaults to
10 which is max)

snikket/jingle/PeerConnection.cpp.hx +6 -2

diff --git a/snikket/jingle/PeerConnection.cpp.hx b/snikket/jingle/PeerConnection.cpp.hx
index 7000792..7730c15 100644
--- a/snikket/jingle/PeerConnection.cpp.hx
+++ b/snikket/jingle/PeerConnection.cpp.hx
@@ -444,8 +444,12 @@ class MediaStreamTrack {
 			if (format.format == "PCMU") {
 				track.ref.send(cpp.Pointer.ofArray(pcm.map(pcmToUlaw)).reinterpret(), pcm.length);
 			} else if (format.format == "opus") {
-				final encoder = opusEncoder;
-				if (untyped __cpp__("!encoder")) opusEncoder = OpusEncoder.create(clockRate, channels, untyped __cpp__("OPUS_APPLICATION_VOIP"), null); // assume only one opus clockRate+channels for this track
+				if (untyped __cpp__("!{0}", opusEncoder)) {
+					opusEncoder = OpusEncoder.create(clockRate, channels, untyped __cpp__("OPUS_APPLICATION_VOIP"), null); // assume only one opus clockRate+channels for this track
+					untyped __cpp__("opus_encoder_ctl({0}, OPUS_SET_BITRATE(24))", opusEncoder);
+					untyped __cpp__("opus_encoder_ctl({0}, OPUS_SET_PACKET_LOSS_PERC(5))", opusEncoder);
+					untyped __cpp__("opus_encoder_ctl({0}, OPUS_SET_INBAND_FEC(1))", opusEncoder);
+				}
 				final rawOpus = new haxe.ds.Vector(pcm.length * 2).toData(); // Shoudn't be bigger than the input
 				final encoded = OpusEncoder.encode(opusEncoder, cpp.Pointer.ofArray(pcm), Std.int(pcm.length / channels), cpp.Pointer.ofArray(rawOpus), rawOpus.length);
 				rawOpus.resize(encoded);