Conversations icon indicating copy to clipboard operation
Conversations copied to clipboard

REGRESSION: audio codec support in ch.threema:webrtc-android

Open singpolyma opened this issue 3 years ago • 7 comments
trafficstars

Using upstream WebRTC:

      <description xmlns="urn:xmpp:jingle:apps:rtp:1" media="audio">
        <payload-type clockrate="48000" channels="2" id="111" name="opus">
          <parameter value="10" name="minptime"/>
          <parameter value="1" name="useinbandfec"/>
          <rtcp-fb xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0" type="transport-cc"/>
        </payload-type>
        <payload-type clockrate="48000" channels="2" id="63" name="red"/>
        <payload-type id="103" clockrate="16000" name="ISAC"/>
        <payload-type id="104" clockrate="32000" name="ISAC"/>
        <payload-type id="9" clockrate="8000" name="G722"/>
        <payload-type id="102" clockrate="8000" name="ILBC"/>
        <payload-type id="0" clockrate="8000" name="PCMU"/>
        <payload-type id="8" clockrate="8000" name="PCMA"/>
        <payload-type id="106" clockrate="32000" name="CN"/>
        <payload-type id="105" clockrate="16000" name="CN"/>
        <payload-type id="13" clockrate="8000" name="CN"/>
        <payload-type id="110" clockrate="48000" name="telephone-event"/>
        <payload-type id="112" clockrate="32000" name="telephone-event"/>
        <payload-type id="113" clockrate="16000" name="telephone-event"/>
        <payload-type id="126" clockrate="8000" name="telephone-event"/>
        <rtp-hdrext xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0" uri="urn:ietf:params:rtp-hdrext:ssrc-audio-level" id="1"/>
        <rtp-hdrext xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0" uri="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time" id="2"/>
        <rtp-hdrext xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0" uri="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01" id="3"/>
        <rtp-hdrext xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0" uri="urn:ietf:params:rtp-hdrext:sdes:mid" id="4"/>
        <extmap-allow-mixed xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"/>
        <source xmlns="urn:xmpp:jingle:apps:rtp:ssma:0" ssrc="3162795796">
          <parameter value="l1xfh9IliR6Fgp6W" name="cname"/>
          <parameter value="- my-audio-track" name="msid"/>
          <parameter value="-" name="mslabel"/>
          <parameter value="my-audio-track" name="label"/>
        </source>
        <rtcp-mux/>
      </description>

With the threema build:

      <description xmlns="urn:xmpp:jingle:apps:rtp:1" media="audio">
        <payload-type clockrate="48000" channels="2" id="96" name="opus">
          <parameter value="1" name="cbr"/>
          <parameter value="10" name="minptime"/>
          <parameter value="1" name="useinbandfec"/>
          <rtcp-fb xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0" type="transport-cc"/>
        </payload-type>
        <payload-type clockrate="48000" channels="2" id="97" name="red"/>
        <rtp-hdrext xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0" uri="urn:ietf:params:rtp-hdrext:ssrc-audio-level" id="1"/>
        <rtp-hdrext xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0" uri="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time" id="2"/>
        <rtp-hdrext xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0" uri="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01" id="3"/>
        <rtp-hdrext xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0" uri="urn:ietf:params:rtp-hdrext:sdes:mid" id="4"/>
        <extmap-allow-mixed xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"/>
        <source xmlns="urn:xmpp:jingle:apps:rtp:ssma:0" ssrc="2545312963">
          <parameter value="F0OYtOf/xWG796Pp" name="cname"/>
          <parameter value="- my-audio-track" name="msid"/>
          <parameter value="-" name="mslabel"/>
          <parameter value="my-audio-track" name="label"/>
        </source>
        <rtcp-mux/>
      </description>

As you can see, support for G722, PCMU, and PCMA are all dropped (as is telephone-event support, relevant for https://github.com/iNPUTmice/Conversations/pull/4214)

singpolyma avatar Aug 16 '22 17:08 singpolyma

Ref: https://github.com/threema-ch/webrtc-build-docker/tree/master/patches

licaon-kter avatar Aug 16 '22 17:08 licaon-kter

Feel free to fork it - building with it is easy. You're welcome! :slightly_smiling_face:

lgrahl avatar Aug 17 '22 06:08 lgrahl

@lgrahl it's not about being able to build

See https://gitlab.com/fdroid/fdroiddata/-/issues/2064

licaon-kter avatar Aug 17 '22 07:08 licaon-kter

Well, as @saghul already said, having a standard WebRTC library somewhere on Maven could be helpful to some but those who are more involved do apply special configurations and/or custom patches. And that probably led to the status quo where no one is maintaining the go-to Maven WebRTC repo.

lgrahl avatar Aug 17 '22 07:08 lgrahl

Does this break calling to and from JMP or just the dialtone?

iNPUTmice avatar Aug 20 '22 06:08 iNPUTmice

I've asked:

the telephony bridge thing jmp uses does not support better codecs or resampling?

Answer:

no, we don't run a live transcoder on all calls at this time. That sounds like a good way to spend a lot of money on CPU The DTMF regression would be fatal on its own though, even if we supported opus

licaon-kter avatar Aug 20 '22 06:08 licaon-kter

Does this break calling to and from JMP or just the dialtone?

Yes, breaks all calls to/from JMP.

singpolyma avatar Aug 20 '22 11:08 singpolyma