cmeng-git / atalk-android

xmpp/jabber client for android
Apache License 2.0
158 stars 60 forks source link

Call compatibility with Conversations #140

Closed ericschdt closed 4 years ago

ericschdt commented 4 years ago

aTalk seems to use ZRTP, but Conversations uses DTLS for a audio / video call. Would you mind to implement the latter to make both (a little bit more) compatible?

That would make aTalk more interesting again. Looking forward to to having a nice aTalk <-> Conversations call.

dingdongnigetou commented 4 years ago

aTalk seems to use ZRTP, but Conversations uses DTLS for a audio / video call. Would you mind to implement the latter to make both (a little bit more) compatible?

Do you mean this Conversations ? It does not support audio/video call actually.

susobaco commented 4 years ago

They are implemented. https://github.com/siacs/Conversations/tree/jingle

cmeng-git commented 4 years ago

Hi MilanKral,

Would you able to help. I have disabled DTLS feature on aTalk as the source is not working. Appreciate if you can take a look and fix the problem if possible.

dingdongnigetou commented 4 years ago

They are implemented. https://github.com/siacs/Conversations/tree/jingle

Awesome, let me try it.

cmeng-git commented 4 years ago

What's left to make DTLS working? In 2.2.4 the option is grayed out and not selectable.

In my last test on DTLS, even when enabled, the call status is still indicated that it is a non-secure call. Therefore I have disabled the option until have time to study the cause in details.

Just found the real reason to disable DTLS Disable DTLS_SRTP as BC 1.6.2 now uses Extended Master Secret - not compatible with source

cmeng-git commented 4 years ago

aTalk v2.2.5 implemented DTLS_SRTP call encryption DTLSv12/DTLSv10 protocols and additional CipherSuites support. Please verify.

ericschdt commented 4 years ago

Tested it again with 2.2.5 and DTLS enabled.

Conversations 2.8.3 --> aTalk 2.2.5 Rings -- Nothing

Conversations 2.8.3 --> aTalk 2.2.5 While ringing, callback from aTalk results in "busy" state at aTalk's end. Conversations has a tie break built in by now: https://github.com/iNPUTmice/Conversations/commit/4d3d3a703871be4fe78a9bcdfdf954c9d7aa375b

aTalk 2.2.5 --> Conversations 2.8.3 atalk

Please see: https://github.com/jitsi/jitsi/issues/679

Include a setup attribute. Possibly set to actpass (I honestly don’t know enough about DTLS to know what that actually means; But assuming it was actpass kinda worked.

cmeng-git commented 4 years ago

Conversations call setup protocol is not compatible with aTalk:

missing 'setup' attribute on aTalk 'session-init'

Implemented the missing 'setup' attribute, however conversations immediately terminated call on accept: root cause unknown, there is no error messages from conversations.

2020-05-19 15:53:04.547 20534-20646/org.atalk.android D/SMACK: RECV (0): 
    <iq xml:lang='en' to='parrot@atalk.sytes.net/atalk' from='xyz123@atalk.sytes.net/Conversations.CPqI' type='set' id='BV9-KbDb5eYa'>
      <jingle xmlns='urn:xmpp:jingle:1' sid='cf3am4aoa80bm' action='session-terminate'>
        <reason>
          <failed-application/>
        </reason>
      </jingle>
    </iq>

Call init from conversations uses XEP-0353 currently not implemented in aTalk/smack: XEP-0353: Jingle Message Initiation

ericschdt commented 4 years ago

@cmeng-git Please see https://nl.movim.eu/?node/pubsub.movim.eu/berlin-xmpp-meetup/3e091c00-5e20-4727-a61d-c92a247b106e

During the next (virtual) meetup, Daniel and Holger will give an introduction to the technologies used for implementing audio/video calls with XMPP by example of the Android client Conversations, which recently gained A/V support. Topics discussed will include XMPP's Jingle extensions, ICE/STUN/TURN, (S)RTP, and WebRTC. As time permits, we'll also hear an interesting bonus talk by eta on integrating the A/V solution with Asterisk.

When? Wednesday, 2020-06-10 18:00 CEST (always 2ⁿᵈ Wednesday of every month) Where? The meetup will be held on Jitsi Meet. The URL is going to be posted on our meetup channel shortly before the talks begin, so please join it if you'd like to take part: berlin-meetup@conference.conversations.im

Note: This meetup is going to be streamed on YouTube, so you will be recorded. If you'd prefer to just listen, please use the stream.

cmeng-git commented 4 years ago

Thanks for the info.

Actually aTalk has already 90% through implementation to work with Conversations. There remain two more problems to be resolved when making video call originated from Conversations. Hopefully to get them resolved in the next two weeks.

iNPUTmice commented 4 years ago

@cmeng-git it might be of interest to you that the latest version of Conversations (2.8.6) supports direct jingle initiation (while previously versions required Jingle Message Initiation) - so getting it compatible with atalk should be simpler now. In general Conversations tries to put human readable text in the termination reason in case something goes wrong. However if that isn’t enough; or if you discover any bugs in the Conversations side of things feel free to ping me.

cmeng-git commented 4 years ago

Many thanks for the update. aTalk has implemented XEP-0353 Jingle Message Initiation and is working well with Conversations. XEP-0353 has resolved major issue when making call with buddy with multiple resources logged.

The major problem aTalk is facing is how the jingle messages are being received. Current design put a major restriction on the way the received jingle messages are processed.

  1. aTalk/Jitsi implementations: a. transport-info's are embedded within session-initiate stanza; b. transport-info's are sent prior to session-accept stanza; - can be processed individually without problem
  2. Conversations implementations: a. transport-info's are sent per media after session-initiate stanza; b. transport-info's are sent per media after session-accept stanza;
    • All the transport-info's must be combined and processed in one go; otherwise ice4j will prune any unspecified media from the ice agent.

Currently aTalk has resolved all the issues except when a video call is initiated from Conversations. From debug log, all the transport-info/candidates were received, validated, and paired correctly for both the audio and video medias.

However for some unknown reason, the received video media is piped to audio decoder for process; and depicted video decoder of a video media stream to process. It seems the problem is related to Ice Agent in ice4j library, still under investigation for the a solution.

So far the test results on Conversations are good without much problem. Will certainly inform you if aTalk need help from Conversations.

cmeng-git commented 4 years ago

Just release v2.3.0. Audio call should be OK. There are still having problems with video call. Need to contact Conversations - seems like the problems are from Conversations.

20200616: Just updated my devices to Conversations to 2.8.7-beta.2. Found that the audio call with aTalk is not working anymore. aTalk v2.3.0 was still working with Conversations v2.8.5, just before the upgrade to v2.8.7

For more info: Conversations v2.8.7 media call compatibility with aTalk v2.3.0 #3788

cmeng-git commented 4 years ago

aTalk v2.3.1 has just released, believe this is now working with Conversations. For any further issues for call with Conversations, please feedback to Conversations for further actions.

Please note aTalk two working video codec are VP8 and H264, VP8 is the the codec that works with conversation. H264 will cause Conversation to crash. Audio codec can use OPUS etc.