microsoft / ftl-sdk Goto Github PK
View Code? Open in Web Editor NEWSoftware Development Kit for Mixer's FTL Protocol
License: MIT License
Software Development Kit for Mixer's FTL Protocol
License: MIT License
Last commit was over a year ago, and recent PRs suggest that the repo may have moved, although the destination seems pretty old as well.
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.
i am intrested in this project
We need a written reference so someone could write a clean-room implementation of the Charon ingest protocol if they want. Bonus points for submitting it to the IETF and getting it approved.
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.
Hi,
Ist there an open source javascript player which is capable to playback my ftl_app.exe streaming?
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.
The code copies sizeof(status_queue_elmt_t)
into buffer that is only sizeof(stats_msg)
:
https://github.com/mixer/ftl-sdk/blob/d0c8469f66806b5ea738d607f7d2b000af8b1129/libftl/ftl_helpers.c#L196
Issue discovered through PVS Studio static analysis while building OBS Studio. Many other more minor issues were also identified, I suggest running your own analysis on the code to fix these.
When we specify auto for ingest_hostname, the API goes to access
https://mixer.com/api/v1/ingests/best
and the following message is returned in the HTTP header.
x-warning: Calls must be updated to include a Client-ID header by May 21st. See more: https://aka.ms/MixerDevIdentification
When it is unknown when May 21st, we need to know if we have to respond.
The code sends uninitialized stack memory dummy
to remote hosts:
https://github.com/mixer/ftl-sdk/blob/d0c8469f66806b5ea738d607f7d2b000af8b1129/libftl/ingest.c#L56
Issue discovered through PVS Studio static analysis while building OBS Studio.
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
There are important files that Microsoft projects should all have that are not present in this repository. A pull request has been opened to add the missing file(s). When the pr is merged this issue will be closed automatically.
Microsoft teams can learn more about this effort and share feedback within the open source guidance available internally.
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.
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.
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:
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
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
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.
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.
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.
this happen when internet connection breaks or gets much weak.
crash can be reproduced using XSplit Broadcaster.
Steps:
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.
The links to the video and audio files for the test app are broken.
Like FTL Studio, we should have a premade library ready to go.
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.
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:
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.
Nor is ftl->audio.mutex
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.
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.