Code Monkey home page Code Monkey logo

ftl-sdk's People

Contributors

comex avatar connor4312 avatar dgarrett-microsoft avatar dhkamra-microsoft avatar dmitry-me avatar jgh- avatar nathanielvonsprecken-ms avatar ncommander avatar quinndamerell avatar quinndamerell-ms avatar rohangop avatar shaomicrosoft avatar sslivins avatar surzhynskyi avatar swooshycueb avatar tyiki-badwell avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ftl-sdk's Issues

Semaphores crash when linked into obs-studio-ftl on Linux

This is a very weird bug, but in fact the only thing that stands in the way of obs-studio-ftl+ftl-sdk working flawlessly on Linux.

ftl-sdk uses functions named os_sem_post, os_sem_pend, etc, to wrap semaphores, and similar functions to wrap mutexes. obs uses identically-named functions. Because of how shared object files work on Linux (and all ELF-using Unixes), and because obs for some reason I'm unaware of uses -rdynamic and thus exposes all of its own symbols, when libftl.so is linked into obs, the obs host's implementation of those functions will be used instead of libftl's. In the case of the mutex code this is fine since obs's implementations are identical, but the semaphore code is not. When os_sem_post is called, there's an internal error in pthread's sem_post and the whole thing crashes and burns.

The quickfix: Just use different function names. I accomplished this by adding the following block to libftl/posix/threads.h, before the relevant function prototypes:

/* Avoid clashing with host binary functions */
#define os_sem_create ftl_os_sem_create
#define os_sem_pend ftl_os_sem_pend
#define os_sem_post ftl_os_sem_post
#define os_sem_delete ftl_os_sem_delete

With that block in place, obs-studio-ftl works flawlessly on Linux.

A better solution would be to actually change the names, and a betterer solution would be in obs-ftl instead of here, being to not use the big -rdynamic hammer when surely something else would do. It's also quite conceivable that -rdynamic is a specific consequence of some odd configuration of my particular build, of course, but as I believe my build is fairly usual, surely other people will have the same issue.

Didn't post this as a pull request because (a) it's trivial and (b) the solution I've presented is sufficient but not ideal.

Implement VP8 Video Encoder Interface

FTL should hide most of the details (and pain) of taking video input, and spitting out RTP/VP8 data. We need to determine the easiest colorspace to work with, and then feed packets into the video encoder and generate a RTP stream from it.

No instructions on how to build for iOS

The instruction provide do not clear state how to build for iOS. Have tried what is documented but always ends in error. I am build on OSX 10.11.6 using XCode 8.1. Using non-brew managed cmake.

Bumping the SDK version

Hello,

There was no version bump for a while. Is it possible to make a new release (v0.9.15) that will include recent changes from the master branch?

Thanks

Implement Test Suite for Charon

What it says on the tin. Should work against real beam and allow a user to slot their credentials and successfully test all the possible code paths.

Implement Core RTP encoder infrastructure

While each codec has their own "quirks" for RTP, the basic packet is the same across multiple codecs, allowing code to be shared such as setting the timebase, marker bits, etc. This should be abstracted as a private API for use within libftl.

Research Transport Medium Solutions

Right now, video and audio RTP streams are transmitted over UDP as that's all FFmpeg/GStreamer support. While the RFCs allow for the use of TCP, there is no pre-existing solution for this that I'm aware of. We should work out various solutions to handling actual transport on semi-unreliable links.

Some ideas:

  • Allow use the both of TCP and UDP, and allow the user to select
  • Use SCTP (also used by WebRTC) over UDP
  • Implement reliable UDP (i.e. libudt)

To fulfill this task we need to do research on the best options, and it must able to work under MIT license, and be portable

Use jansson from system if available

I plan to package this on Arch Linux. Currently it is being blocked by the fact that jansson needs to be build from in-tree.

It would be better to check if libjansson exists system wide and compile against that if it exists. This might be achieved by pkgconfig

implicit declaration of function ‘isdigit’

When building as part of obs-studio-ftl 18.0.0 on Arch with gcc 6.3.1, build fails in libftl/ftl_helpers.c because isdigit is not defined. Adding #include <ctype.h> to ftl_helpers.c seems to fix this.

sem_timedwait is not available on macOS and BSD-based systems.

In the version of ftl-sdk that's compiled as a plugin in obs-studio-ftl, obs-studio-ftl/plugins/libftl/ftl-sdk/libftl/ftl_helpers.c (ln252), sem_timedwait, a function unavailabe in BSD-based systems is used. This prevents a successful compilation of ftl-sdk on BSD-based systems.

Design Encoder API Design

Right now, the initial design for FTL is to be able to use multiple encoders, and be relatively simple to use them and slot them in for third party applications. Right now, we want to support VP8, and Opus. Longer term, possibly support x264, and VP9, and possibly other audio codecs such as Speex/iBLS.

ftl library crashes in FTL_LOG enqueue_status_msg

this happen when internet connection breaks or gets much weak.
crash can be reproduced using XSplit Broadcaster.
Steps:

  1. Start FTL stream from XSplit Broadcaster to Mixer.
  2. Limit XSplit Broadcaster upload speed to 1kbps using NetBalancer software.
  3. Stop FTL stream.

I debugged this problem and found that ftl->status_q.mutex
was deleted by ftl_ingest_disconnect function, while some threads like ping_thread
are still alive and continue calling FTL_LOG with deleted ftl->status_q.mutex.

Implement SRTP authethication in the bitstreams

Right now, RTP data is only protected by origin (connecting IP). It is possible for someone who is technically inclined to hijack a FTL stream by injecting bad data from the same IP address. Implementing SRTP will FTL from this, and is a requirement for public availability for FTL. libsrtp implements most of the work required.

Implement Mac OS X Build

Theoretically, Mac OS X should be able to use the pre-existing POSIX code we wrote, but someone needs to testbuild it and see if it works.

Acceptence:

  • Working Mac OS X build of ftl.dylib + charon
  • Tested that authentication and disconnection work

Fix Charon Heap Corruption Bug on Win32

Charon currently has a heap corruption bug which causes random hangs on disconnection. It should be relatively easy to run this down, I just haven't had an opportunity to get this done.

Implement Opus Audio Encoder Stack

Opus is the primary audio codec used by FTL for the time being. The C API should abstract as much detail as possible to be encoder agnonstic, then using that API, take raw PCM audio, and covert it to Opus audio.

Implement a "dummy" charon server for testing

Right now, the only implementation of Charon exists in light-styx. For development purposes, it would be helpful if we had a "dummy" version of ingest that did nothing except do the same responses as for authentication. This probably will require me (NCommander) to implement it using the closed-source styx as a reference.

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.