{"id":22281833,"url":"https://github.com/wireapp/wire-avs","last_synced_at":"2026-02-19T14:01:27.908Z","repository":{"id":38416706,"uuid":"53571392","full_name":"wireapp/wire-avs","owner":"wireapp","description":"Audio Video Signaling (AVS)","archived":false,"fork":false,"pushed_at":"2026-01-28T16:36:15.000Z","size":30094,"stargazers_count":142,"open_issues_count":9,"forks_count":57,"subscribers_count":23,"default_branch":"main","last_synced_at":"2026-01-29T06:57:34.347Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://wire.com","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wireapp.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.txt","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-03-10T09:19:37.000Z","updated_at":"2026-01-12T15:43:15.000Z","dependencies_parsed_at":"2023-10-17T10:17:27.568Z","dependency_job_id":"79bf2b79-beed-434a-8ba2-78596bafa54a","html_url":"https://github.com/wireapp/wire-avs","commit_stats":null,"previous_names":[],"tags_count":557,"template":false,"template_full_name":null,"purl":"pkg:github/wireapp/wire-avs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wireapp%2Fwire-avs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wireapp%2Fwire-avs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wireapp%2Fwire-avs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wireapp%2Fwire-avs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wireapp","download_url":"https://codeload.github.com/wireapp/wire-avs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wireapp%2Fwire-avs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29166229,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T14:37:12.680Z","status":"ssl_error","status_checked_at":"2026-02-06T14:36:22.973Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-03T16:22:35.482Z","updated_at":"2026-02-06T15:13:33.304Z","avatar_url":"https://github.com/wireapp.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"Wire - Audio, Video, and Signaling (AVS)\n=============================\n\nThis repository is part of the source code of Wire. You can find more information at wire.com or by contacting opensource@wire.com.\n\nYou can find the published source code at github.com/wireapp.\n\nFor licensing information, see the attached LICENSE file and the list of third-party licenses at wire.com/legal/licenses/.\n\n\nBuild Requirements\n------------------\n\nApart from the basic toolchain for each system, you need these:\n\n* clang, libc++\n* readline (for building zcall, only)\n* yasm (for video only)\n* alsa (for Linux only).\n\nFor **OSX** and **iOS**, you should have Xcode and the Command Line Tools\nfor your specific version of both OSX and Xcode. Things *will* break if\nyou have the wrong version. You can install the latter via menu Xcode,\nthen Open Developer Tool, then More Developer Tools.\n\nFor getting autoconf, automake, libtool, readline and yasm, we suggest [Homebrew](http://brew.sh/).\nFollow the instructions there, then:\n\n```bash\n$ brew install \\\n  autoconf \\\n  automake \\\n  jq \\\n  libsodium \\\n  libtool \\\n  rust \\\n  pkg-config \\\n  protobuf-c \\\n  readline\n```\n\nFor **Android**, you need both the\n[Android SDK](https://developer.android.com/sdk/index.html) as well as the\n[Android NDK](https://developer.android.com/tools/sdk/ndk/index.html).\nJust get the latest versions and install them somewhere cozy. You need to\nexport two environment variables ``ANDROID_SDK_ROOT`` and\n``ANDROID_NDK_ROOT`` pointing to the respective location. Unless you do a\none-off, you probably want to add them to your ``.bash_profile``.\n\nFor **Linux**, you need to install the packages for the stuff mentioned\nabove or, of course, build it all from scratch. If you are on a\nDebian-esque system, do this: \n\n```bash\n$ sudo apt-get install \\\n  autoconf \\\n  automake \\\n  clang \\\n  libasound2-dev \\\n  libc++-dev \\\n  libc++abi-dev \\\n  libevent-dev \\\n  libprotobuf-c-dev \\\n  libreadline-dev \\\n  libsodium-dev \\\n  libtool \\\n  libx11-dev \\\n  libxcomposite-dev \\\n  libxdamage-dev \\\n  libxrender-dev \\\n  make \\\n  pkgconf \\\n  protobuf-c-compiler \\\n  yasm \\\n  zlib1g-dev \\\n  zip \\\n  libglib2.0-dev \\\n  cargo\n```\nWhich should be working for\n- Ubuntu 24.04.2 wire LTS amd64 (Cubic 2025-02-23 17:20)\n- Ubuntu 24.04.3 LTS\n\n\nFor **Windows**, you will have to start by adding your system to the build\nsystem. Good luck!\n\n\nBuild Instructions\n------------------\n\nAVS uses pre-built Google WebRTC by default that are pulled from the [prebuilt webrtc repository](https://github.com/wireapp/prebuilt-webrtc-binaries) as a part of the make process. For information about building your own WebRTC see the \"Using a Locally Built WebRTC\" section below.\n\nAVS has more dependencies that need to be updated. The first time you need to fetch the submodules by doing:\n\n```bash\n$ ./prepare.sh\n```\n\nNext step is to build AVS itself. When building AVS with the prebuilt WebRTC, invoke make with:\n\n```bash\nmake\n```\n\nThis will build a selection of tools or your host machine. You probably want ``zcall``, the AVS command line client. You can only build that by saying ``make zcall``. Similarly, you can build any other tool by giving its name to make.\n\nThe deliverables are being built with the command ``make dist``.\nYou can limit this to only select target platforms through ``make dist_android``,\n``make dist_osx`` and ``make dist_ios``. All of them take quite a while on a\nfresh checkout.\n\nYou'll find the deliverables in ``build/dist/{android,ios,osx}``.\n\nYou can also build just the wrappers for a given architecture by saying\n``make wrappers AVS_OS=\u003cos\u003e AVS_ARCH=\u003carch\u003e`` where ``\u003cos\u003e`` is one of\n``android``, ``ios``, or ``osx``. There is no wrappers for Linux, so you\nare out of luck there. For ``\u003carch\u003e`` there are several possible values\ndepending on the OS. You can just leave the whole thing out and will\nreceive reasonable defaults (ARMv7 or X86-64). Have a look at\n``mk/target.mk`` for more on this.\n\nIf you want to have a local version of a ``dist_*`` target that hasn't\nall the necessary architectures but builds quicker, you can pass\n``DIST_ARCH=\u003cyour_arch\u003e`` to make and will only built for that\narchitecture:\n\n```bash\n$ make dist_ios DIST_ARCH=arm64\n```\n\nwill build an iOS distribution that will only contain arm64 instead of\nthe usual five architectures.\n\nUsing a Locally Built WebRTC\n----------------------------\n\nIt is possible to use your own locally built WebRTC libraries instead, by following the instructions in the readme file of the [prebuilt webrtc repository](https://github.com/wireapp/prebuilt-webrtc-binaries).\n\nOnce built and packaged you should have the following files:\n\n```\ncontrib/webrtc/webrtc_\u003cversion\u003e_android.zip\ncontrib/webrtc/webrtc_\u003cversion\u003e_headers.zip\ncontrib/webrtc/webrtc_\u003cversion\u003e_ios.zip\ncontrib/webrtc/webrtc_\u003cversion\u003e_linux.zip\ncontrib/webrtc/webrtc_\u003cversion\u003e_osx.zip\n```\n\nThese files should be copied to the contrib/webrtc directory and the ``WEBRTC_VER`` variable set when making AVS, for example:\n\n```bash\nmake WEBRTC_VER=20200603.local\n```\n\nYou can also modify the version set in the ``mk/target.mk`` file, as follows:\n\n```\nifeq ($(WEBRTC_VER),)\nWEBRTC_VER := 20200603.local\nendif\n```\n\nRunning `make` should then unpack and use the locally built version of WebRTC.\n\nUsing the Library\n-----------------\n\nDuring the build, a set of static libraries is being built. You can use\nthis library in your own projects.\n\nYou'll find the APIs in ``include/*.h``. ``avs.h`` is your catchall\ninclude file. Always use that to protect yourself agains reorganizations.\n\nLinking is a bit tricky, we'll add instructions soon. The easiest is\nprobably to add ``build/$(your-platform)/lib`` to your library path and\nthen add all ``.a`` files in there as ``-l`` arguments.\n\n\nUsing the Command Line Client (zcall)\n-------------------------------------\n\nStart the command line client provding the email address of an existing\naccount using the ``-e`` option. You can switch to staging (aka dev) by\nadding the ``-D`` option and to edge by adding the ``-E`` option. Since\ncaching is currently a little broken, you probably want to add the ``-f``\noption, too. For further information on available options, try the ever\nhelpful ``-h`` option.\n\nOnce started, hit ``h`` to see a list of key strokes available and\ntype ``:help`` and enter to see a list of commands. All commands are\nentered by typing ``:`` first.\n\n**Creating a Client**\n\nThe first thing you will need is a clientid. This can be done as follows:\n\n`:get_clients`    lists clients for this user, the current one for zcall is marked with a `*`\n`:reg_client`     register a new client\n\nThere is a limit of 8 clients per user, if all are used you will need to remove one with:\n\n`:delete_cient \u003cclientid\u003e`\n\nBeware that there is no \"are you sure\" question, use this only if you know what you are doing! If you delete an in-use client by accident bad things may happen.\n\n**Managing Conversations**\n\nKeys for listing, selecting and showing conversations are:\n\n`l` list conversations, the selected one is marked with `-\u003e`\n`j` select previous conversation\n`k` select next conversation\n`i` show selected conversation ID and members\n\nYou can also select a conversation with the `:switch` command and send basic chat messages to the selected conversation with `:say`\n\n**Calling**\n\nKeys for calling are:\n\n`c` start a call in the selected conversation\n`a` answer the most recent incoming call\n`e` end/leave the call\n`m` toggle mute\n`V` toggle video sending\n\nIncoming calls are indicated by the following line:\n```\ncalling: incoming audio call in conv: Conversation (conference) from \"test_user:0123456789abcdef\" ring: yes ts: 1614244695\n```\n\n\nArchitecture overview:\n----------------------\n\n\n```\n           .-----------.                            .---------.  .----------.\n           |   wcall   |                            | engine  |  | mediamgr |\n           '-----------'                            '---------'  '----------'\n            /    |    \\                                  |\n  .-----------.  |  .-----------.   .----------.    .---------.\n  |  egcall   |  |  |   ccall   |---| keystore |    |  REST   |\n  '-----------'  |  '-----------'   '----------'    |  nevent |\n            \\    |    /                             | protobuf|\n           .-----------.   .-----------.            '---------'\n           |   ecall   |---|  econn    |\n           '-----------'   '-----------'\n             /        \\\n     mobile /          \\ web\n  .-----------.     .-----------.\n  | peerflow  |     |  jsflow   |\n  '-----------'     '-----------'\n        |                 |\n  .-----------.     .-----------.\n  |webrtc(C++)|     | avs_pc(JS)|\n  | peerconn  |     '-----------'\n  '-----------'           |\n                    .-----------.\n                    | webrtc(JS)|\n                    | peerconn  |\n                    '-----------'\n\n    .------------------------------.\n    | Low-level utility modules:   |\n    | - audummy (Dummy audio-mod)  |\n    | - base (Base module)         |\n    | - cert (Certificates)        |\n    | - dict (Dictionary)          |\n    | - jzon (Json wrappers)       |\n    | - log (Logging framework)    |\n    | - queue (Packet queue)       |\n    | - sem (Semaphores)           |\n    | - store (Persistent Storage) |\n    | - trace (Tracing tool)       |\n    | - uuid (UUID helpers)        |\n    | - zapi (ZETA-protocol API)   |\n    | - ztime (Timestamp helpers)  |\n    '------------------------------'\n```\n\n\nSome specifications implemented:\n-------------------------------\n\n* https://tools.ietf.org/html/draft-ietf-mmusic-trickle-ice-01\n* https://tools.ietf.org/html/draft-ietf-rtcweb-stun-consent-freshness-11\n* https://tools.ietf.org/html/rfc7845\n* https://tools.ietf.org/html/draft-ietf-rtcweb-data-channel-13\n\n\nReporting bugs\n--------------\n\nWhen reporting bugs against AVS please include the following:\n\n- Wireshark PCAP trace ([download Wireshark](https://www.wireshark.org/download.html))\n- Full logs from client\n- Session-ID\n- Which Backend was used\n- Exact version of client\n- Exact time when call was started/stopped\n- Name/OS of device\n- Adb logcat for Android\n\nRun-time libraries\n------------------\nFROM ubuntu:16.04\nRUN apt-get install -qqy --no-install-recommends \\\n    \tlibprotobuf-c-dev \\\n    \tlibc6-dev-i386 \\\n        libreadline-dev \\\n        libx11-dev \\\n        libxcomposite-dev \\\n        libxdamage-dev \\\n        libxrender-dev \\\n        libc++-dev \\\n        libc++abi-dev\n\n\nUpload to sonatype\n------------------\n\nTo manually upload to sonatype create a local.properties with the following values:\n\n```\nsonatype.username=\nsonatype.password=\nsigningKeyFile=\u003cpath to asc file\u003e\nsigningPassword=\u003cgpg key passphrase\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwireapp%2Fwire-avs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwireapp%2Fwire-avs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwireapp%2Fwire-avs/lists"}