A modular and portable open source XMPP client library written in Java for Android and Java (SE) VMs

Overview

Smack

Build Status Coverage Status Project Stats Link to XMPP chat smack@conference.igniterealtime.org

About

Smack is an open-source, highly modular, easy to use, XMPP client library written in Java for Java SE compatible JVMs and Android.

Being a pure Java library, it can be embedded into your applications to create anything from a full XMPP instant messaging client to simple XMPP integrations such as sending notification messages and presence-enabling devices. Smack and XMPP allow you to easily exchange data in various ways e.g., fire-and-forget, publish-subscribe, between human and non-human endpoints (M2M, IoT, …).

More information is provided by the Overview.

Getting started

Start with having a look at the Documentation and the Javadoc.

Instructions on how to use Smack in your Java or Android project are provided in the Smack Readme and Upgrade Guide.

License

Most of Smack is governed by the Apache License 2.0 (SPDX License Identifier: Apache 2.0). This license requires that the contents of a NOTICE text file are shown "…within a display generated by the Derivative Works, if and wherever such third-party notices normally appear.".

Smack comes which such a NOTICE file. Moreover, since smack-core is licensed under the Apache License 2.0, the conditions apply to every project using Smack. The content of Smack's NOTICE file can conveniently be retrieved using Smack.getNoticeStream().

Some subprojects of Smack are governed by other licenses. Please refer to the individual subprojects.

Professional Services

Smack is a collaborative effort of many people. Some are paid, e.g., by their employer or a third party, for their contributions. But many contribute in their spare time for free. While we try to provide the best possible XMPP library for Android and Java SE-compatible execution environments by following state-of-the-art software engineering practices, the API may not always perfectly fit your requirements. Hence welcome contributions and encourage discussion about how Smack can be further improved. We also provide paid services ranging from XMPP/Smack related consulting to designing and developing features to accommodate your needs. Please contact Florian Schmaus for further information.

Bug Reporting

Only a few users have access for filling bugs in the tracker. New users should:

  1. Read "How to ask for help or report an issue"
  2. Create a discourse account (you can also sign up with your Google account).
  3. Login to the forum account
  4. Press "New Topic" in your toolbar and choose the 'Smack Support' sub-category.

Please search for your issues in the bug tracker before reporting.

Donate

If you find Smack useful and feel like donating, then you can use one of the following systems:

  • Donate via Bitcoin: 1LiU78z3498wu3jwRPKbvovKAHjTcpVbuK

Contact

The developers hang around in [email protected]. You may use this link to join the room via inverse.chat. Remember that it may take some time (~hours) to get a response.

You can also reach us via the Smack Support Forum if you have questions or need support, or the Smack Developers Forum if you want to discuss Smack development.

Contributing

If you want to start developing for Smack and eventually contribute code back, then please have a look at the Guidelines for Smack Developers and Contributors. The guidelines also contain development quickstart instructions.

Resources

Ignite Realtime

Ignite Realtime is an Open Source community composed of end-users and developers around the world who are interested in applying innovative, open-standards-based RealTime Collaboration to their businesses and organizations. We're aimed at disrupting proprietary, non-open standards-based systems and invite you to participate in what's already one of the biggest and most active Open Source communities.

Smack - an Ignite Realtime community project.

Comments
  • Added pubsub Node.modifySubscriptionsAsOwner

    Added pubsub Node.modifySubscriptionsAsOwner

    This is a simple insertion of a new function, calling existing functions.

    I hope this is the right kind of test (i.e. I copied the right one) !

    I haven't yet tested it in a real xmpp client, connected to a real server (test will against my Openfire server...).

    More than anything I'm making sure I've got the whole fork/code style/commit/pull request system correct !

    opened by TimothyPitt 19
  • Rework support for XEP-0384: OMEMO Encryption

    Rework support for XEP-0384: OMEMO Encryption

    This PR ditches trust management from the OMEMO store. The store now only stores keys and the users ratchet. By doing so, the OmemoManager can be created while the client is offline. Once it comes online, it retrieves the users BareJid for usage with the OmemoStore.

    THIS IS STILL WORK IN PROGRESS Feeback appreciated.

    Changes:

    • Rework integration tests
    • New structure of base integration test classes
    • bump dependency on signal-protocol-java from 2.4.0 to 2.6.2
    • Introduced CachingOmemoStore implementations
    • Use CachingOmemoStore classes in integration tests
    • Removed OmemoSession classes (replaced with more logical OmemoRatchet classes)
    • Consequently also removed load/storeOmemoSession methods from OmemoStore
    • Removed some clutter from KeyUtil classes
    • Moved trust decision related code from OmemoStore to TrustCallback
    • Require authenticated connection for many functions
    • Add async initialization function in OmemoStore
    • Refactor omemo test package (/java/org/jivesoftware/smack/omemo -> /java/org/jivesoftware/smackx)
    • Remove OmemoStore method isFreshInstallation() as well as defaultDeviceId related stuff
    • FileBasedOmemoStore: Add cleaner methods to store/load base data types (Using tryWithResource, only for future releases, once Android API gets bumped)
    • Attempt to make OmemoManager thread safe
    • new logic for getInstanceFor() deviceId determination
    • OmemoManagers encrypt methods now don't throw exceptions when encryption for some devices fails. Instead message gets encrypted when possible and more information about failures gets returned alongside the message itself
    • Added OmemoMessage class for that purpose
    • Reworked entire OmemoService class
    • Use safer logic for creating trust-ignoring messages (like ratchet-update messages)
    • Restructure elements/provider in order to prepare for OMEMO namespace bumps
    • Remove OmemoManager.regenerate() methods in favor of getInstanceFor(connection, randomDeviceId)
    • Removed some unnecessary configuration options
    • Prepare for support of more AES message key types
    • Simplify session creation
    • Where possible, avoid side effects in methods
    • Add UntrustedOmemoIdentityException
    • Add TrustState enum
    • More improved tests

    TODO:

    • [x] Reimplement message decryption
    • [x] Reimplement stanza listening
    • [x] Reimplement PEP listeners
    • [x] Reimplement support for MAM queries
    • [x] Reimplement some more convenience methods
    • [ ] More testing
    • [ ] Implement client side support for publish options

    • [x] Document changes
    • [ ] Create migration guide
    • [x] Rant about OMEMOs quirks
    opened by vanitasvitae 19
  • Multi-User Chat Light (v0.1.0) implementation

    Multi-User Chat Light (v0.1.0) implementation

    Multi-User Chat Light (v0.1.0) documentation: http://mongooseim.readthedocs.io/en/latest/open-extensions/xeps/xep-muc-light.html

    All modules are implemented :)

    opened by ramabit 16
  • Implementation of XEP-0308: Last Message Correction

    Implementation of XEP-0308: Last Message Correction

    Fixes SMACK-714

    Documentation: https://xmpp.org/extensions/xep-0308.html

    How to use it

    Send: message.addExtension(new MessageCorrectExtension(idInitialMessage));

    Receive: ProviderManager.addExtensionProvider(MessageCorrectExtension.ELEMENT_NAME, MessageCorrectExtension.NAMESPACE, new MessageCorrectProvider());

    MessageCorrectExtension messageCorrectExtension = MessageCorrectExtension.from(message)

    opened by ramabit 15
  • Additional Pubsub integration tests

    Additional Pubsub integration tests

    Hi @Flowdalic - this isn't ready yet (more tests to come), hence the 'draft' status on the PR. I'm primarily interested in hearing from you if you'd accept more tests along these lines (before I start spending effort only to find it in vain). Whaddayathink?

    opened by guusdk 13
  • XEP-0333 Improvement

    XEP-0333 Improvement

    In order to be able to use ChatMarkersManager following same pattern/architecture like ChatStateManager or ChatManager (version 2), some improvement needs to be done in the XEP-0333 implementation.

    The goal of this improvement was obtain an interface to be implemented like IncomingChatMessageListener or ChatStateListener. For that, an interface was created (ChatMarkersListener), an enum (ChatMarkersState) and 2 files modified (ChatMarkersElements and ChatMarkersManager). For more details, please read commits description.

    The changes done in ChatMarkersManager were done trying to mimic ChatStateManager and ChatManager.

    Those changes has been implemented successfully in an app (I can't say the name :/).

    Any suggestion is welcome.

    opened by miguelhincapie 12
  • This small hack prevent crash on Psi+ online status.

    This small hack prevent crash on Psi+ online status.

    Before this commit if roster has at least one user with Psi+ client online the smack just crash.

    Psi+ sends presence likes:

    <presence from='[user]@jabber.ru/Psi+work' to='[email protected]/34110840091527669849196298' xml:lang='ru'>
    <show>online</show>
    <priority>50</priority>
    <c xmlns='http://jabber.org/protocol/caps' node='http://psi-plus.com' ver='D7clrAb+xAPCSMydA+X+iNO94fI=' hash='sha-1'/>
    
    <x xmlns='vcard-temp:x:update'><photo>b5402fd5a5f7f95f74857688c7e96364d0e0a34c</photo></x><delay xmlns='urn:xmpp:delay' from='[user]@jabber.ru/Psi+work' stamp='2018-05-30T08:33:38Z'/></presence>
    

    when smack tried to parse it crashed with trace:

    12:44:10 XMPPConnection closed due to an exception (XMPPTCPConnection[[email protected]/34110840091527669849196298] (0))java.lang.IllegalArgumentException: No enum constant org.jivesoftware.smack.packet.Presence.Mode.online
    	at java.base/java.lang.Enum.valueOf(Enum.java:240)
    	at org.jivesoftware.smack.packet.Presence$Mode.valueOf(Presence.java:394)
    	at org.jivesoftware.smack.packet.Presence$Mode.fromString(Presence.java:431)
    	at org.jivesoftware.smack.util.PacketParserUtils.parsePresence(PacketParserUtils.java:561)
    	at org.jivesoftware.smack.util.PacketParserUtils.parseStanza(PacketParserUtils.java:155)
    	at org.jivesoftware.smack.AbstractXMPPConnection.parseAndProcessStanza(AbstractXMPPConnection.java:1083)
    	at org.jivesoftware.smack.tcp.XMPPTCPConnection.access$500(XMPPTCPConnection.java:151)
    	at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1044)
    	at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:1000)
    	at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:1016)
    	at java.base/java.lang.Thread.run(Thread.java:844)
    
    opened by catap 11
  • if an iq is received and there is no iq handler registered to handle …

    if an iq is received and there is no iq handler registered to handle …

    …it, an error reply will be sent but the invokeStanzaCollectorsAndNotifyRecvListeners method will still fall through and pass the iq to any stanza listeners. the docs (and the path where an iq request handler is successfully found) state that iq messages shouldn't be forwarded to the listeners. this change moves the return statement to the bottom of the 'if (packet instanceof IQ)' block so that iq messages are never forwarded to the listeners.

    i'll warn that this code is untested as i don't have the android sdk installed so haven't been able to build.

    opened by bbaldino 11
  • Chat state manager issue

    Chat state manager issue

    Many servers like ejabberd allows messages with empty body to be stored offline. XEP-160 is not correctly implemented since they are also storing chatstates - processone/ejabberd#842

    With customchatlistener there is no way to remove states which are from offline stores since message is not passed to onstatechanged. So in chatstatemanager removing any chatstate which have delay element.

    opened by bangarharshit 11
  • Implement xml:lang support in ConnectionConfiguration and AbstractXMPPConnection

    Implement xml:lang support in ConnectionConfiguration and AbstractXMPPConnection

    This patch makes it possible to change the stream-level language as part of the connection configuration, to allow a properly implemented entities to provide i18n'ed response messages.

    This code does not cover XMPPBOSHConnection!

    X-Signed-Off-By: Georg Lukas [email protected]

    Needs squashing 
    opened by ge0rg 10
  • Add support for XEP-0373, XEP-0374: OpenPGP for XMPP: Instant Messaging

    Add support for XEP-0373, XEP-0374: OpenPGP for XMPP: Instant Messaging

    This PR adds support for XEP-0373: OpenPGP for XMPP, as well as XEP-0374: OpenPGP for XMPP: Instant Messaging.

    There is still some WiP with this PR:

    • [x] Manual message decryption
    • [x] PR has entries in XEP table
    • [x] Move OX-IM to own package
    • [x] Replace Metadata by PainlessResult
    • [x] SecretKeyPasswordCallback and SecretKeyDecryptor should be merged into one callback type
    • [x] Trust management
    • [x] Edge case: Receiving a message from a stranger might fail decrypting due to missing keys
    • [x] MissingPublicKeyCallback is not yet incorporated
    • [x] PR is squashed

    Still, I opened it at this stage in order to get feedback and to accelerate the merge process :)

    opened by vanitasvitae 9
  • Inform ourselves of presence info.

    Inform ourselves of presence info.

    Treat resources belonging to the logged in user as being in the roster, so clients are informed about presence changes on the same account.

    This MR adds the above function and two UTs to check the existing behaviour of the Roster.contains(), and verify the new function.

    opened by MF1-MS 0
  • Use XMPP connection as local socks5 address

    Use XMPP connection as local socks5 address

    The default local address is often just "the first address found in the list of addresses read from the OS" and this might mean an internal IP address that cannot reach external servers. So wherever possible use the same IP address being used to connect to the XMPP server because this local address has a better chance of being suitable.

    This MR adds the above behaviour, and two UTs to test that we use the local XMPP connection IP when connected, and the previous behaviour when not.

    opened by MF1-MS 2
  • Xep 0249 support

    Xep 0249 support

    This MR adds in partial support for XEP-0249 Direct MUC Invitations

    It exposes a method for a MUC to invite a user to the room, and adds a listener to the MultiUserChat listener to inform users of direct invitations they have received.

    A new UT class is added to test this function.

    I found I could not build Smack without updating bouncy castle to 1.71 so have done so in this MR. Please advise how I would build without doing this if this is not desired.

    opened by MF1-MS 2
  • Add full support for Jingle File Transfer and OMEMO encryption via JET

    Add full support for Jingle File Transfer and OMEMO encryption via JET

    The original sources are derived from work done by vanitasvitae (see link below); but ported to be compatible with smack 4.4.5, and with improvements so they are ready for integration with an xmpp client implementation. Summer of Code 2017 – OMEMO Encrypted Jingle File Transfer in Smack

    The pull request sources have full implementation for Jingle File Transfer, and support OMEMO encryption via JET. XEP-0234: Jingle File Transfer 0.19.1 (2019-06-19) XEP-0391: Jingle Encrypted Transports 0.1.2 (2018-07-31)

    Note: The full library has been included in aTalk v2.9.2 release.

    opened by cmeng-git 1
  • aTalk Jingle implementation for review

    aTalk Jingle implementation for review

    Thank you for your contribution!

    Before creating a Pull Request, please make sure to

    • read https://github.com/igniterealtime/Smack/wiki/Guidelines-for-Smack-Developers-and-Contributors
    • run gradle check successfully in order to make sure that your code does not break any JUnit tests and is conform to the projects code style.
    • (if applicable) mention any Jira issue codes (eg. SMACK-XXX) in the body of your commit message (not the header), so that Jira automatically links the PR to the issue.
    • squash your commits if possible/sensible.

    aTalk jingle implementation

    jingle classes implementatation in aTalk are sub-classed/based on two defined based classes. a. AbstractXmlElement b. DefaultXmlElementProvide

    With the above two based classes, all jingle classes implementations are simpler and clearer. The pull requested classes for review are based on the above implementation topologies; these classe provide the support of the aTalk media call (video/audio) setup as shown in the logcat below.

    Perhaps the smack team would review the aTalk jingle implementation, possibly consider for integration with the samck future releases.

    You may refer to aTalk github (v2.9.0) for full implementation and use the jingle classes. https://github.com/cmeng-git/atalk-android

    ============== aTalk logcat for media call setup (caller) with encryption support ================
    2022-03-02 08:17:32.535 5702-6135/org.atalk.android D/SMACK: SENT (0): 
        <message xml:lang='us' to='[email protected]' id='jm-propose-mfifd5cm6vh9' type='chat'>
          <propose xmlns='urn:xmpp:jingle-message:0' id='mfifd5cm6vh9'>
            <description xmlns='urn:xmpp:jingle:apps:rtp:1' media='audio'/>
            <description xmlns='urn:xmpp:jingle:apps:rtp:1' media='video'/>
          </propose>
        </message>
    
    2022-03-02 08:17:33.811 5702-6136/org.atalk.android D/SMACK: RECV (0): 
        <message xml:lang='en-GB' to='[email protected]/atalk' from='[email protected]/atalk' type='chat'>
          <proceed xmlns='urn:xmpp:jingle-message:0' id='mfifd5cm6vh9'/>
        </message>
    
    2022-03-02 08:17:37.187 5702-6135/org.atalk.android D/SMACK: SENT (0): 
        <iq to='[email protected]/atalk' id='7FUY4-17' type='set'>
          <jingle xmlns='urn:xmpp:jingle:1' initiator='[email protected]/atalk' action='session-initiate' sid='mfifd5cm6vh9'>
            <content creator='initiator' name='audio'>
              <description xmlns='urn:xmpp:jingle:apps:rtp:1' media='audio'>
                <payload-type id='96' name='opus' channels='2' clockrate='48000'>
                  <parameter name='useinbandfec' value='1'/>
                  <parameter name='ptime' value='20'/>
                </payload-type>
                <payload-type id='97' name='SILK' channels='1' clockrate='24000'/>
                <payload-type id='98' name='SILK' channels='1' clockrate='16000'/>
                <payload-type id='100' name='speex' channels='1' clockrate='32000'/>
                <payload-type id='102' name='speex' channels='1' clockrate='16000'/>
                <payload-type id='0' name='PCMU' channels='1' clockrate='8000'/>
                <payload-type id='8' name='PCMA' channels='1' clockrate='8000'/>
                <payload-type id='103' name='iLBC' channels='1' clockrate='8000'/>
                <payload-type id='3' name='GSM' channels='1' clockrate='8000'/>
                <payload-type id='104' name='speex' channels='1' clockrate='8000'/>
                <payload-type id='101' name='telephone-event' channels='1' clockrate='8000'/>
                <rtp-hdrext xmlns='urn:xmpp:jingle:apps:rtp:rtp-hdrext:0' uri='urn:ietf:params:rtp-hdrext:ssrc-audio-level' senders='both' id='1'>
                  <parameter name='attributes'/>
                </rtp-hdrext>
                <rtp-hdrext xmlns='urn:xmpp:jingle:apps:rtp:rtp-hdrext:0' uri='urn:ietf:params:rtp-hdrext:csrc-audio-level' senders='initiator' id='2'>
                  <parameter name='attributes'/>
                </rtp-hdrext>
                <rtcp-mux/>
                <encryption>
                  <crypto tag='1' crypto-suite='AES_256_CM_HMAC_SHA1_80' key-params='inline:Xh9N87qTsildR2scJBrB92Sga3SvmVuWv+PbkrzJqY7/FOlbIw5j1KeOCayIcw=='/>
                  <crypto tag='2' crypto-suite='AES_256_CM_HMAC_SHA1_32' key-params='inline:gQraPzdhXW9Gm08gEECuyuV6JOVIitYk5tfFOV8Qn9NJLVh6kAqHX2zkKXruMQ=='/>
                  <crypto tag='3' crypto-suite='AES_192_CM_HMAC_SHA1_80' key-params='inline:TPB6qgU/ltJ9yE6ASNoTFdcOhHEC8SILDpmEsR53rhX1ESoq1pE='/>
                  <crypto tag='4' crypto-suite='AES_192_CM_HMAC_SHA1_32' key-params='inline:DWGell8boXShsX0vfoHtF5+sgLAfq/i4KhBpezAp0M7FIvWAPTM='/>
                  <zrtp-hash xmlns='urn:xmpp:jingle:apps:rtp:zrtp:1' version='1.10'>
                    be20efff52dcfb1a8701a71e81eabc8683740a01b5d4996496f6d6a3da6e986e
                  </zrtp-hash>
                </encryption>
              </description>
              <transport xmlns='urn:xmpp:jingle:transports:ice-udp:1' ufrag='35pt1ft3vqgfb' pwd='3pjs4fpsq663fijlkgd7ppthfd'>
                <rtcp-mux/>
                <candidate foundation='1' component='1' protocol='udp' priority='2130706431' generation='0' id='25' ip='fe80::1004:3eff:fe07:ba63' port='5006' type='host' network='0'/>
                <candidate foundation='2' component='1' protocol='udp' priority='2130706431' generation='0' id='26' ip='192.168.1.167' port='5006' type='host' network='0'/>
                <candidate foundation='3' component='1' protocol='udp' priority='2113932031' generation='0' id='27' ip='10.168.71.219' port='5006' type='host' network='0'/>
                <candidate foundation='4' component='1' protocol='udp' priority='1677724415' generation='0' id='28' ip='42.60.7.13' port='5006' type='srflx' rel-addr='192.168.1.167' rel-port='5006' network='0'/>
                <fingerprint xmlns='urn:xmpp:jingle:apps:dtls:0' hash='sha-256' setup='actpass'>
                  2D:2B:8E:3E:CD:E4:8B:D9:9F:D4:18:3C:11:F8:72:F5:62:92:C0:A8:1B:06:55:36:54:A7:59:D2:22:33:9A:C3
                </fingerprint>
              </transport>
            </content>
            <content creator='initiator' name='video'>
              <description xmlns='urn:xmpp:jingle:apps:rtp:1' media='video'>
                <payload-type id='105' name='h264' clockrate='90000'>
                  <parameter name='profile-level-id' value='42E01f'/>
                  <parameter name='packetization-mode' value='1'/>
                </payload-type>
                <payload-type id='99' name='h264' clockrate='90000'>
                <parameter name='profile-level-id' value='42E01f'/>
                </payload-type>
                <payload-type id='106' name='VP8' clockrate='90000'/>
                <payload-type id='107' name='VP9' clockrate='90000'/>
                <rtcp-mux/>
                <encryption>
                  <crypto tag='1' crypto-suite='AES_256_CM_HMAC_SHA1_80' key-params='inline:QgnRERIHA+vNb5YNKxw+6NKroV4DWPb2LbTZXn6CKppseGSXnL+FbcgcunVuiQ=='/>
                  <crypto tag='2' crypto-suite='AES_256_CM_HMAC_SHA1_32' key-params='inline:Xkutf5bMSXngXsqtG2o80lCtYjtlKoQciBuNtIIgDOFKK6imBObfs0Th9xdA1A=='/>
                  <crypto tag='3' crypto-suite='AES_192_CM_HMAC_SHA1_80' key-params='inline:Vm4ag0qn/3DGwawtXS9q20GfPz68HioZyu/wgQ0fdlEvFTLjFNc=
                  <crypto tag='4' crypto-suite='AES_192_CM_HMAC_SHA1_32' key-params='inline:8Zvyt9/Aw8XZxNEHlt9VORH/IzJQiYHR4ExQankLbLcJwu0z9w8='/>
                  <zrtp-hash xmlns='urn:xmpp:jingle:apps:rtp:zrtp:1' version='1.10'>
                    f41a577b69081a4f1f76acbcbc5fd79632c36dee69cde297dd4e867e15826f58
                  </zrtp-hash>
                </encryption>
              </description>
              <transport xmlns='urn:xmpp:jingle:transports:ice-udp:1' ufrag='35pt1ft3vqgfb' pwd='3pjs4fpsq663fijlkgd7ppthfd'>
                <rtcp-mux/>
                <candidate foundation='1' component='1' protocol='udp' priority='2130706431' generation='0' id='29' ip='fe80::1004:3eff:fe07:ba63' port='5007' type='host' network='0'/>
                <candidate foundation='2' component='1' protocol='udp' priority='2130706431' generation='0' id='30' ip='192.168.1.167' port='5007' type='host' network='0'/>
                <candidate foundation='3' component='1' protocol='udp' priority='2113932031' generation='0' id='31' ip='10.168.71.219' port='5007' type='host' network='0'/>
                <candidate foundation='4' component='1' protocol='udp' priority='1677724415' generation='0' id='32' ip='42.60.7.13' port='5007' type='srflx' rel-addr='192.168.1.167' rel-port='5007' network='0'/>
                <fingerprint xmlns='urn:xmpp:jingle:apps:dtls:0' hash='sha-256' setup='actpass'>
                  2D:2B:8E:3E:CD:E4:8B:D9:9F:D4:18:3C:11:F8:72:F5:62:92:C0:A8:1B:06:55:36:54:A7:59:D2:22:33:9A:C3
                </fingerprint>
              </transport>
            </content>
          </jingle>
        </iq>
    
    2022-03-02 08:17:37.344 5702-6136/org.atalk.android D/SMACK: RECV (0): 
        <iq xml:lang='en-GB' to='[email protected]/atalk' from='[email protected]/atalk' type='result' id='7FUY4-17'/>
    
    
    2022-03-02 08:17:37.734 5702-6136/org.atalk.android D/SMACK: RECV (0): 
        <iq xml:lang='en-GB' to='[email protected]/atalk' from='[email protected]/atalk' type='set' id='D4YPW-70'>
          <jingle xmlns='urn:xmpp:jingle:1' initiator='[email protected]/atalk' action='transport-info' sid='mfifd5cm6vh9'>
            <content creator='initiator' name='audio'>
              <transport xmlns='urn:xmpp:jingle:transports:ice-udp:1' ufrag='6pov41ft3vqml4' pwd='4j8lih1qf01o74ar6ou0a7cdq4'>
                <rtcp-mux/>
                <candidate foundation='1' component='1' protocol='udp' priority='2130706431' generation='0' id='97' ip='fe80::362d:dff:fe00:ae96' port='5032' type='host' network='0'/>
                <candidate foundation='2' component='1' protocol='udp' priority='2130706431' generation='0' id='98' ip='192.168.1.37' port='5032' type='host' network='0'/>
                <candidate foundation='3' component='1' protocol='udp' priority='1677724415' generation='0' id='99' ip='42.60.7.13' port='5032' type='srflx' rel-addr='192.168.1.37' rel-port='5032' network='0'/>
              </transport>
            </content>
          </jingle>
        </iq>
    
    2022-03-02 08:17:37.758 5702-6135/org.atalk.android D/SMACK: SENT (0): 
        <iq to='[email protected]/atalk' id='D4YPW-70' type='result'>
        </iq>
    
    2022-03-02 08:17:38.491 5702-6136/org.atalk.android D/SMACK: RECV (0): 
        <iq xml:lang='en-GB' to='[email protected]/atalk' from='[email protected]/atalk' type='set' id='D4YPW-71'>
          <jingle xmlns='urn:xmpp:jingle:1' initiator='[email protected]/atalk' action='transport-info' sid='mfifd5cm6vh9'>
            <content creator='initiator' name='video' senders='initiator'>
              <transport xmlns='urn:xmpp:jingle:transports:ice-udp:1' ufrag='6pov41ft3vqml4' pwd='4j8lih1qf01o74ar6ou0a7cdq4'>
                <rtcp-mux/>
                <candidate foundation='1' component='1' protocol='udp' priority='2130706431' generation='0' id='100' ip='fe80::362d:dff:fe00:ae96' port='5033' type='host' network='0'/>
                <candidate foundation='2' component='1' protocol='udp' priority='2130706431' generation='0' id='101' ip='192.168.1.37' port='5033' type='host' network='0'/>
                <candidate foundation='3' component='1' protocol='udp' priority='1677724415' generation='0' id='102' ip='42.60.7.13' port='5033' type='srflx' rel-addr='192.168.1.37' rel-port='5033' network='0'/>
              </transport>
            </content>
          </jingle>
        </iq>
    
    2022-03-02 08:17:38.513 5702-6135/org.atalk.android D/SMACK: SENT (0): 
        <iq to='[email protected]/atalk' id='D4YPW-71' type='result'>
        </iq>
    
    2022-03-02 08:17:38.587 5702-6136/org.atalk.android D/SMACK: RECV (0): 
        <iq xml:lang='en-GB' to='[email protected]/atalk' from='[email protected]/atalk' type='set' id='D4YPW-72'>
          <jingle xmlns='urn:xmpp:jingle:1' initiator='[email protected]/atalk' action='session-info' sid='mfifd5cm6vh9'>
            <ringing xmlns='urn:xmpp:jingle:apps:rtp:info:1'/>
          </jingle>
        </iq>
    
    2022-03-02 08:17:38.604 5702-6135/org.atalk.android D/SMACK: SENT (0): 
        <iq to='[email protected]/atalk' id='D4YPW-72' type='result'>
        </iq>
    
    2022-03-02 08:17:38.916 5702-6136/org.atalk.android D/SMACK: RECV (0): 
        <iq xml:lang='en-GB' to='[email protected]/atalk' from='[email protected]/atalk' type='set' id='D4YPW-73'>
          <jingle xmlns='urn:xmpp:jingle:1' responder='[email protected]/atalk' action='session-accept' sid='mfifd5cm6vh9'>
            <content creator='initiator' name='audio'>
              <description xmlns='urn:xmpp:jingle:apps:rtp:1' media='audio' ssrc='1928004519'>
                <payload-type id='96' name='opus' channels='2' clockrate='48000'>
                  <parameter name='useinbandfec' value='1'/>
                  <parameter name='usedtx' value='1'/>
                  <parameter name='ptime' value='20'/>
                </payload-type>
                <payload-type id='97' name='SILK' channels='1' clockrate='24000'/>
                <payload-type id='98' name='SILK' channels='1' clockrate='16000'/>
                <payload-type id='100' name='speex' channels='1' clockrate='32000'/>
                <payload-type id='102' name='speex' channels='1' clockrate='16000'/>
                <payload-type id='0' name='PCMU' channels='1' clockrate='8000'/>
                <payload-type id='8' name='PCMA' channels='1' clockrate='8000'/>
                <payload-type id='103' name='iLBC' channels='1' clockrate='8000'/>
                <payload-type id='3' name='GSM' channels='1' clockrate='8000'/>
                <payload-type id='104' name='speex' channels='1' clockrate='8000'/>
                <payload-type id='101' name='telephone-event' channels='1' clockrate='8000'/>
                <rtp-hdrext xmlns='urn:xmpp:jingle:apps:rtp:rtp-hdrext:0' uri='urn:ietf:params:rtp-hdrext:ssrc-audio-level' senders='both' id='1'>
                  <parameter name='attributes'/>
                </rtp-hdrext>
                <rtp-hdrext xmlns='urn:xmpp:jingle:apps:rtp:rtp-hdrext:0' uri='urn:ietf:params:rtp-hdrext:csrc-audio-level' senders='none' id='2'>
                  <parameter name='attributes'/>
                </rtp-hdrext>
                <rtcp-mux/>
                <encryption>
                  <zrtp-hash xmlns='urn:xmpp:jingle:apps:rtp:zrtp:1' version='1.10'>
                    015f636c40d9cbb431be09612ec309203776d0d43115ab175c948697532bb357
                  </zrtp-hash>
                </encryption>
                <source xmlns='urn:xmpp:jingle:apps:rtp:ssma:0' ssrc='1928004519'>
                  <parameter name='cname' value='05e900d8-46ee-4d1f-8b6f-ec21b6dc90e0'/>
                  <parameter name='msid' value='082cdfe1-1fb7-409e-864d-740349055a81 audio108491334'/>
                  <parameter name='mslabel' value='082cdfe1-1fb7-409e-864d-740349055a81'/>
                  <parameter name='label' value='audio108491334'/>
                </source>
              </description>
              <inputevt xmlns='http://jitsi.org/protocol/inputevt'/>
              <transport xmlns='urn:xmpp:jingle:transports:ice-udp:1' ufrag='6pov41ft3vqml4' pwd='4j8lih1qf01o74ar6ou0a7cdq4'/>
            </content>
            <content creator='initiator' name='video' senders='both'>
              <description xmlns='urn:xmpp:jingle:apps:rtp:1' media='video' ssrc='1974578385'>
                <payload-type id='106' name='VP8' clockrate='90000'/>
                <payload-type id='107' name='VP9' clockrate='90000'/>
                <rtcp-mux/>
                <encryption>
                  <zrtp-hash xmlns='urn:xmpp:jingle:apps:rtp:zrtp:1' version='1.10'>
                    daf5a5f92b9713ab023d2e847874a6209ccf8152532df9a1915a1f3d3512154d
                  </zrtp-hash>
                </encryption>
                <source xmlns='urn:xmpp:jingle:apps:rtp:ssma:0' ssrc='1974578385'>
                  <parameter name='cname' value='05e900d8-46ee-4d1f-8b6f-ec21b6dc90e0'/>
                  <parameter name='msid' value='082cdfe1-1fb7-409e-864d-740349055a81 video108491334'/>
                  <parameter name='mslabel' value='082cdfe1-1fb7-409e-864d-740349055a81'/>
                  <parameter name='label' value='video108491334'/>
                </source>
              </description>
              <inputevt xmlns='http://jitsi.org/protocol/inputevt'/>
              <transport xmlns='urn:xmpp:jingle:transports:ice-udp:1' ufrag='6pov41ft3vqml4' pwd='4j8lih1qf01o74ar6ou0a7cdq4'/>
            </content>
          </jingle>
        </iq>
    
    2022-03-02 08:17:38.946 5702-6135/org.atalk.android D/SMACK: SENT (0): 
        <iq to='[email protected]/atalk' id='D4YPW-73' type='result'>
        </iq>
    
    
    2022-03-02 08:17:39.239 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.comment() Building flow graph for: null
    2022-03-02 08:17:39.242 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.comment() Building Track: 0
    2022-03-02 08:17:39.249 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.comment() Input: opus/rtp, 48000.0 Hz, Stereo
    2022-03-02 08:17:39.252 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.comment() Custom options specified.
    2022-03-02 08:17:39.255 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.comment() A custom codec is specified: org.atalk.impl.neomedia.audiolevel.AudioLevelEffect@b9299c6
    2022-03-02 08:17:39.259 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.comment() A custom renderer is specified: org.atalk.impl.neomedia.jmfext.media.renderer.audio.AudioTrackRenderer@d69fd87
    2022-03-02 08:17:39.410 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.write()     
    2022-03-02 08:17:39.420 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.comment() Here's the completed flow graph:
    2022-03-02 08:17:39.425 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.write()       net.sf.fmj.media.parser.RawPushBufferParser@eca44b4
    2022-03-02 08:17:39.428 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.write()          connects to: org.atalk.impl.neomedia.codec.audio.opus.JNIDecoder@44648dd
    2022-03-02 08:17:39.432 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.write()          format: opus/rtp, 48000.0 Hz, Stereo
    2022-03-02 08:17:39.437 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.write()       org.atalk.impl.neomedia.codec.audio.opus.JNIDecoder@44648dd
    2022-03-02 08:17:39.441 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.write()          connects to: org.atalk.impl.neomedia.audiolevel.AudioLevelEffect@b9299c6
    2022-03-02 08:17:39.445 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.write()          format: LINEAR, 48000.0 Hz, 16-bit, Mono, LittleEndian, Signed, FrameSize=16 bits
    2022-03-02 08:17:39.449 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.write()       org.atalk.impl.neomedia.audiolevel.AudioLevelEffect@b9299c6
    2022-03-02 08:17:39.453 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.write()          connects to: org.atalk.impl.neomedia.jmfext.media.renderer.audio.AudioTrackRenderer@d69fd87
    2022-03-02 08:17:39.458 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.write()          format: LINEAR, 48000.0 Hz, 16-bit, Mono, LittleEndian, Signed, FrameSize=16 bits
    2022-03-02 08:17:39.463 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.write()     
    2022-03-02 08:17:39.466 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.profile() Profile: graph building: 224 ms
    2022-03-02 08:17:39.470 5702-8507/org.atalk.android D/aTalk: [746] net.sf.fmj.media.Log.profile() Profile: realize, post graph building: 1 ms
    
    2022-03-02 08:17:39.567 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.comment() Building flow graph for: audiorecord:
    2022-03-02 08:17:39.573 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.comment() Building Track: 0
    2022-03-02 08:17:39.579 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.comment() Input: LINEAR, 44100.0 Hz, 16-bit, Mono, LittleEndian, Signed
    2022-03-02 08:17:39.582 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.comment() Custom options specified.
    2022-03-02 08:17:39.584 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.comment() A custom codec is specified: org.atalk.impl.neomedia.audiolevel.AudioLevelEffect2@25eeb23
    2022-03-02 08:17:39.588 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.comment() An output format is specified: opus/rtp, 48000.0 Hz, Stereo
    2022-03-02 08:17:39.591 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.comment() An output content type is specified: raw.rtp
    2022-03-02 08:17:39.644 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()     
    2022-03-02 08:17:39.648 5702-8528/org.atalk.android D/AudioTrack: setVolume(1.000000, 1.000000) pid : 5702
    2022-03-02 08:17:39.662 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.comment() Here's the completed flow graph:
    2022-03-02 08:17:39.668 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()       com.sun.media.parser.RawPullBufferParser@e20f820
    2022-03-02 08:17:39.670 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()          connects to: org.atalk.impl.neomedia.audiolevel.AudioLevelEffect2@25eeb23
    2022-03-02 08:17:39.673 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()          format: LINEAR, 44100.0 Hz, 16-bit, Mono, LittleEndian, Signed
    2022-03-02 08:17:39.675 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()       org.atalk.impl.neomedia.audiolevel.AudioLevelEffect2@25eeb23
    2022-03-02 08:17:39.678 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()          connects to: org.atalk.impl.neomedia.codec.audio.speex.SpeexResampler@86395d9
    2022-03-02 08:17:39.680 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()          format: LINEAR, 44100.0 Hz, 16-bit, Mono, LittleEndian, Signed, FrameSize=16 bits
    2022-03-02 08:17:39.683 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()       org.atalk.impl.neomedia.codec.audio.speex.SpeexResampler@86395d9
    2022-03-02 08:17:39.687 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()          connects to: org.atalk.impl.neomedia.codec.audio.opus.JNIEncoder@8e51b9e
    2022-03-02 08:17:39.690 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()          format: LINEAR, 48000.0 Hz, 16-bit, Mono, LittleEndian, Signed
    2022-03-02 08:17:39.692 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()       org.atalk.impl.neomedia.codec.audio.opus.JNIEncoder@8e51b9e
    2022-03-02 08:17:39.694 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()          connects to: com.sun.media.multiplexer.RTPSyncBufferMux@22b167f
    2022-03-02 08:17:39.697 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()          format: opus/rtp, 48000.0 Hz, Stereo
    2022-03-02 08:17:39.699 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.write()     
    2022-03-02 08:17:39.701 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.profile() Profile: graph building: 131 ms
    2022-03-02 08:17:39.704 5702-8536/org.atalk.android D/aTalk: [754] net.sf.fmj.media.Log.profile() Profile: realize, post graph building: 1 ms
    
    
    2022-03-02 08:17:39.923 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.comment() Building flow graph for: null
    2022-03-02 08:17:39.932 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.comment() Building Track: 0
    2022-03-02 08:17:39.941 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.comment() Input: VP8/RTP, fmtps={}
    2022-03-02 08:17:39.974 5702-8577/org.atalk.android D/vpx_jni: VPX decode using: WebM Project VP8 Decoder v1.10.0
    2022-03-02 08:17:39.974 5702-8577/org.atalk.android D/(VP8Decoder.java:124)#doOpen: VP8 decoder opened successfully
    2022-03-02 08:17:39.991 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write() 
    2022-03-02 08:17:40.000 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.comment() Here's the completed flow graph:
    2022-03-02 08:17:40.009 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write()   net.sf.fmj.media.parser.RawPushBufferParser@dfa18b
    2022-03-02 08:17:40.016 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write()      connects to: org.atalk.impl.neomedia.codec.video.vp8.DePacketizer@ef25268
    2022-03-02 08:17:40.024 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write()      format: VP8/RTP, fmtps={}
    2022-03-02 08:17:40.031 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write()   org.atalk.impl.neomedia.codec.video.vp8.DePacketizer@ef25268
    2022-03-02 08:17:40.038 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write()      connects to: org.atalk.impl.neomedia.codec.video.vp8.VP8Decoder@6b8f681
    2022-03-02 08:17:40.045 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write()      format: VP8
    2022-03-02 08:17:40.050 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write()   org.atalk.impl.neomedia.codec.video.vp8.VP8Decoder@6b8f681
    2022-03-02 08:17:40.055 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write()      connects to: org.atalk.impl.neomedia.codec.video.SwScale@d6b6f05
    2022-03-02 08:17:40.063 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write()      format: AVFRAME, class org.atalk.impl.neomedia.codec.video.AVFrame, pixFmt 0
    2022-03-02 08:17:40.071 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write()   org.atalk.impl.neomedia.codec.video.SwScale@d6b6f05
    2022-03-02 08:17:40.082 5702-8560/org.atalk.android D/aTalk: [769] net.sf.fmj.media.Log.comment() RTP video buffer size: 36 pkts, 15934 bytes.
    2022-03-02 08:17:40.088 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write()      connects to: org.atalk.impl.neomedia.jmfext.media.renderer.video.JAWTRenderer@56ffb5a
    2022-03-02 08:17:40.094 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write()      format: RGB, 32-bit, Masks=255:65280:16711680, LineStride=-1, class [I
    2022-03-02 08:17:40.100 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.write() 
    2022-03-02 08:17:40.106 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.profile() Profile: graph building: 177 ms
    2022-03-02 08:17:40.114 5702-8577/org.atalk.android D/aTalk: [783] net.sf.fmj.media.Log.profile() Profile: realize, post graph building: 0 ms
    
    2022-03-02 08:17:40.329 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.comment() Building flow graph for: null
    2022-03-02 08:17:40.333 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.comment() Building Track: 0
    2022-03-02 08:17:40.362 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.comment() Input: YUV Video Format: Size = [width=1280, height=720] MaxDataLength = -1 DataType = class [B yuvType = -1 StrideY = -1 StrideUV = -1 OffsetY = -1 OffsetU = -1 OffsetV = -1
    2022-03-02 08:17:40.368 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.comment() Custom options specified.
    2022-03-02 08:17:40.372 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.comment() An output format is specified: VP8/RTP
    2022-02-21 11:24:18.357 1402-2510/org.atalk.android D/aTalk: [404] net.sf.fmj.media.Log.comment() An output content type is specified: raw.rtp
    2022-03-02 08:17:40.441 5702-8607/org.atalk.android D/(VP8Encoder.java:158)#doOpen: VP8 encode video size: [width=1280, height=720]
    2022-03-02 08:17:40.442 5702-8607/org.atalk.android D/vpx_jni: VPX encode using: WebM Project VP8 Encoder v1.10.0
    2022-03-02 08:17:40.455 5702-8607/org.atalk.android D/(VP8Encoder.java:200)#doOpen: VP8 encoder opened successfully
    2022-03-02 08:17:40.480 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.write()       net.sf.fmj.media.parser.RawPushBufferParser@70d0fb0
    2022-03-02 08:17:40.485 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.write()          connects to: org.atalk.impl.neomedia.codec.video.vp8.VP8Encoder@d777e29
    2022-03-02 08:17:40.492 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.write()          format: YUV Video Format: Size = [width=1280, height=720] MaxDataLength = -1 DataType = class [B yuvType = -1 StrideY = -1 StrideUV = -1 OffsetY = -1 OffsetU = -1 OffsetV = -1
    2022-03-02 08:17:40.497 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.write()       org.atalk.impl.neomedia.codec.video.vp8.VP8Encoder@d777e29
    2022-03-02 08:17:40.503 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.write()          connects to: org.atalk.impl.neomedia.codec.video.vp8.Packetizer@10765ae
    2022-03-02 08:17:40.511 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.write()          format: VP8, 1280x720, FrameRate=2.0
    2022-03-02 08:17:40.518 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.write()       org.atalk.impl.neomedia.codec.video.vp8.Packetizer@10765ae
    2022-03-02 08:17:40.526 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.write()          connects to: com.sun.media.multiplexer.RTPSyncBufferMux@3b57f4f
    2022-03-02 08:17:40.530 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.write()          format: VP8/RTP
    2022-03-02 08:17:40.534 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.write()     
    2022-03-02 08:17:40.540 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.profile() Profile: graph building: 206 ms
    2022-03-02 08:17:40.545 5702-8607/org.atalk.android D/aTalk: [796] net.sf.fmj.media.Log.profile() Profile: realize, post graph building: 0 ms
    
    2022-03-02 08:17:47.475 5702-6135/org.atalk.android D/SMACK: SENT (0): 
        <iq to='[email protected]/atalk' id='7FUY4-18' type='set'>
          <jingle xmlns='urn:xmpp:jingle:1' action='session-terminate' sid='mfifd5cm6vh9'>
            <reason>
              <success/>
              <text>
                Nice talking to you!
              </text>
            </reason>
          </jingle>
        </iq>
    
    
    opened by cmeng-git 10
Owner
Ignite Realtime
Ignite Realtime is the community for the users and developers of open source Real Time Communications projects.
Ignite Realtime
Open-source modular Android App IDE for Android

Blokkok Blokkok is an open-source modular Android App IDE for Android. Every components of the IDE are separated from each other by modules, every mod

null 14 Dec 16, 2022
📚 Sample Android Components Architecture on a modular word focused on the scalability, testability and maintainability written in Kotlin, following best practices using Jetpack.

Android Components Architecture in a Modular Word Android Components Architecture in a Modular Word is a sample project that presents modern, 2020 app

Madalin Valceleanu 2.3k Jan 3, 2023
Twire is an alternative and open source Twitch client for Android

Twire This is a fork of the Pocket Plays for Twitch Android application. More information in this issue. Twire is an open source, ad-free Twitch brows

Twire 749 Jan 2, 2023
Free and Open Source, full-featured torrent client for Android

Free and Open Source, full-featured torrent client for Android

Yaroslav Pronin 1.3k Jan 8, 2023
An open source Hacker News client for Android.

Hacker News Come chat with us on Gitter.im! An open source Hacker News client for Android phones & tablets. Available on the Google Play Store How to

Matthew Bishop 227 Dec 11, 2022
Modular android app for searching Movies on Filmnet.ir and show the details of each Move based on MVVM.

Movie_Search Modular android app for searching Movies on Filmnet.ir and show the details of each Move based on MVVM. Android MVVM Architecture Table o

ehsan kolivand 3 Nov 26, 2022
A Modular Firebase plugin (Android) for godot

GDFirebase GDFirebase is a Modular Godot Plugin for using Firebase Depends on Godot game engine: git clone https://github.com/godotengine/godot Avail

FrogSquare 10 Dec 9, 2022
A multi-modular Gradle project that encapsulates various modules to learn Kotlin language, tools and frameworks.

KotlinLearn This is a gradle project for the sole basis of exploring and learning Kotlin language, tools and frameworks. The root project wil encapsul

Victor Kiprop 2 Oct 10, 2021
This is a Reddit client on Android written in Java

Infinity-For-Reddit This is a Reddit client on Android written in Java. It does not have any ads and it features clean UI and smooth browsing experien

null 2.6k Jan 9, 2023
Freegemas libGDX is an Android and Java desktop port of Freegemas, which in turn is an open source version of the well known Bejeweled.

freegemas-gdx Freegemas libGDX is an Android, HTML 5 and Java desktop port of Freegemas, which in turn is an open source version of the well known Bej

David Saltares 144 Jun 21, 2022
Freegemas libGDX is an Android and Java desktop port of Freegemas, which in turn is an open source version of the well known Bejeweled.

freegemas-gdx Freegemas libGDX is an Android, HTML 5 and Java desktop port of Freegemas, which in turn is an open source version of the well known Bej

David Saltares 144 Jun 21, 2022
🚧 A fully open-source project for creating and maintaining a Kotlin-based Minecraft: Java Edition server.

Hexalite: Java Edition ⚠️ WARNING: The Hexalite Network is a work in progress. It is not yet ready for production. You may encounter bugs and other is

Hexalite Studios 38 Nov 28, 2022
🚧 A fully open-source project for creating and maintaining a Kotlin-based Minecraft: Java Edition server.

Hexalite: Java Edition ⚠️ WARNING: The Hexalite Network is a work in progress. It is not yet ready for production. You may encounter bugs and other is

Hexalite Network 38 Nov 28, 2022
Open-source ‌‌Android library to connect Alsat pardakht peyment API

Open-source ‌‌Android library to connect Alsat pardakht peyment API

Alsat Pardakht 4 Apr 4, 2022
This is a open source library on kotlin for Solana protocol.

Solana + RxSolana This is a open source library on kotlin for Solana protocol. The objective is to create a cross platform, fully functional, highly t

Arturo Jamaica 48 Jan 9, 2023
Open-source Kotlin library to connect Alsat pardakht peyment API (Core)

Alsat IPG Core با استفاده از این کتابخانه میتوانید پروژه جاوا یا کاتلین خودتون رو به شبکه پرداخت آل‌سات پرداخت وصل کنید و به راحتی محصولات خودتون رو د

Alsat Pardakht 4 Mar 14, 2022
ArchGuard Scanner for scan Git change history, scan source code by Chapi for Java, TypeScript, Kotlin, Go..、Java bytecode use for JVM languages, scan Jacoco test coverage.

Arch Scanner Requirements: JDK 12 Scanner: scan_git - Git commit history scan scan_jacoco - Jacoco scan scan_bytecode - for JVM languages known issues

ArchGuard 27 Jul 28, 2022
An Open-Source repository that contains all the Android Dev and Kotlin concepts and several projects on android ranging in difficulty making this repo completely beginner-friendly.

An Open-Source repository that contains all the Android Dev and Kotlin concepts and several projects on android ranging in difficulty making this repo completely beginner-friendly. The main aim of this repository is to help students who are learning Android Development or preparing for an Android Developer role-based job.

Mimo Patra 15 Dec 29, 2022
A simple android Twitter client written in Kotlin

Blum Blum is an unofficial, simple, fast Twitter client written in Kotlin. This project is a complete rewrite of the Java version. Screenshot Build To

Andrea Pivetta 77 Nov 29, 2022