GithubHelp home page GithubHelp logo

oudommeas / avs Goto Github PK

View Code? Open in Web Editor NEW

This project forked from wireapp/wire-avs

1.0 2.0 0.0 21.16 MB

AVS

License: GNU General Public License v3.0

Makefile 5.45% Java 3.27% C++ 27.27% C 56.51% Objective-C 4.23% CMake 0.14% Python 0.18% Objective-C++ 1.62% Shell 0.21% MATLAB 1.13%

avs's Introduction

Wire - Audio, Video, and Signaling (AVS)

This repository is part of the source code of Wire. You can find more information at wire.com or by contacting [email protected].

You can find the published source code at github.com/wireapp.

For licensing information, see the attached LICENSE file and the list of third-party licenses at wire.com/legal/licenses/.

Build Requirements

Apart from the basic toolchain for each system, you need these:

  • clang, libc++
  • yasm (for video only)
  • alsa (for Linux only).

For OSX and iOS, you should have Xcode and the Command Line Tools for your specific version of both OSX and Xcode. Things will break if you have the wrong version. You can install the latter via menu Xcode, then Open Developer Tool, then More Developer Tools.

For getting autoconf, automake, libtool, and yasm, we suggest Homebrew. Follow the instructions there, then:

$ brew install \
  autoconf \
  automake \
  libsodium \
  libtool \
  multirust \
  protobuf-c \
  yasm
$ multirust default nightly

For Android, you need both the Android SDK as well as the Android NDK. Just get the latest versions and install them somewhere cozy. You need to export two environment variables ANDROID_SDK_ROOT and ANDROID_NDK_ROOT pointing to the respective location. Unless you do a one-off, you probably want to add them to your .bash_profile.

For Linux, you need to install the packages for the stuff mentioned above or, of course, build it all from scratch. If you are on a Debian-esque system, do this:

$ sudo apt-get install \
  autoconf \
  automake \
  clang \
  libasound2-dev \
  libc++-dev \
  libc++abi-dev \
  libreadline-dev \
  libsodium-dev \
  libtool \
  libx11-dev \
  libxcomposite-dev \
  libxdamage-dev \
  libxrender-dev \
  make \
  pkgconf \
  protobuf-c-compiler \
  yasm \
  zlib1g-dev \
  zip

$ curl -sSf https://static.rust-lang.org/rustup.sh | sh -s -- --channel=nightly

For Windows, you will have to start by adding your system to the build system. Good luck!

Build Instructions

The first time you need to fetch the submodules by doing:

$ ./prepare.sh

If you simply say make, a selection of tools is being built for 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.

The deliverables are being built by saying make dist. You can limit this to only select target platforms through make dist_android, make dist_osx and make dist_ios. All of them take quite a while on a fresh checkout.

You'll find the deliverables in build/dist/{android,ios,osx}.

You can also build just the wrappers for a given architecture by saying make wrappers AVS_OS=<os> AVS_ARCH=<arch> where <os> is one of android, ios, or osx. There is no wrappers for Linux, so you are out of luck there. For <arch> there are several possible values depending on the OS. You can just leave the whole thing out and will receive reasonable defaults (ARMv7 or X86-64). Have a look at mk/target.mk for more on this.

If you want to have a local version of a dist_* target that hasn't all the necessary architectures but builds quicker, you can pass DIST_ARCH=<your_arch> to make and will only built for that architecture:

$ make dist_ios DIST_ARCH=armv7

will build an iOS distribution that will only contain armv7 instead of the usual five architectures.

Using the Library

During the build, a set of static libraries is being built. You can use this library in your own projects.

You'll find the APIs in include/*.h. avs.h is your catchall include file. Always use that to protect yourself agains reorganizations.

Linking is a bit tricky, we'll add instructions soon. The easiest is probably to add build/$(your-platform)/lib to your library path and then add all .a files in there as -l arguments.

Architecture overview:

                      .----------.  .------.
                      |  Engine  |  | Mill |
                      '----------'  '------'
                     /      |
                    /       |
    .--------------.  .----------.  .-----------.  .----------.
    | Flow-Manager |  | REST     |  | Media-mgr |  | Netprobe |
    '--------------'  | Nevent   |  '-----------'  '----------'
       |      |       '----------'
       |      |                                    .----------.
  .---------. |                                    |   RTG    |
  |Mediaflow| |                                    '----------'
  '---------'\|
       |      |\                                   .----------.
   .-------.  | \.--------.                        | Protobuf |
   |aucodec|  |  |vidcodec|                        '----------'
   '-------'  |  '--------'
       |     / \     |                             .----------.
   .-------./   \.--------.                        | Conf-Pos |
   |  VOE  |     |  VIE   |                        '----------'
   '-------'     '--------'



    .------------------------------.
    | Low-level utility modules:   |
    | - audummy (Dummy audio-mod)  |
    | - base (Base module)         |
    | - cert (Certificates)        |
    | - dict (Dictionary)          |
    | - jzon (Json wrappers)       |
    | - log (Logging framework)    |
    | - queue (Packet queue)       |
    | - sem (Semaphores)           |
    | - store (Persistent Storage) |
    | - trace (Tracing tool)       |
    | - uuid (UUID helpers)        |
    | - zapi (ZETA-protocol API)   |
    | - ztime (Timestamp helpers)  |
    '------------------------------'

Some specifications implemented:

Reporting bugs

When reporting bugs against AVS please include the following:

avs's People

Contributors

alfredhz avatar raphaelrobert avatar z-dule avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.