EricssonResearch / openwebrtc

A cross-platform WebRTC client framework based on GStreamer
http://www.openwebrtc.org
BSD 2-Clause "Simplified" License
1.8k stars 537 forks source link

Split libopenwebrtc library into libopenwebrtc and libopenwebrtc-bridge #159

Closed clementperon closed 9 years ago

clementperon commented 9 years ago

Hi,

Is there a way to build only the API of OpenWebRTC without Javascript binding and extra stuff ?

Thanks

stefanalund commented 9 years ago

OpenWebRTC has a pure C API as well as a higher level JavaScript API provided by a "bridge". The use of the bridge is optional. Native apps, for example, use the C API. Here is a simplified architecture picture:

arch

superdump commented 9 years ago

I've been thinking about that as an option, as well as GObject introspection language bindings. So you should be able to build just C/GObject, that with language bindings, that with the JavaScript bridge. And appropriate dependencies. I think this will be easier to do once we've moved the build system over to cerbero for the dependencies part.

ikonst commented 9 years ago

The server executable that enables JavaScript bindings is owr-bridge. You'll build it as part of the build process, but you don't have to use it. I'm developing an Objective-C app and I just link with libopenwebrtc, which is a GLib-based pure C API that knows nothing about JavaScript.

clementperon commented 9 years ago

@ikonst Yep, my issue is only at the build time, the configure script requires seed which requires webkitgtk-3.0 which requires gtk etc... and I'm trying to build a small embedded webrtc server :)

ikonst commented 9 years ago

I've been talking with the other developers about:

It will happen. For the time being, just build the dependencies once (it'll take 1-2 hours) and produce a tarball for other developers to use. It will be a better use of your time than getting hung up on this :)

superdump commented 9 years ago

1-2 hours on a reasonably-specced machine but not on, say a Raspberry Pi. Even the new RPi 2 is going to be pretty slow. And you probably have to sort something out for a fast swap file system in order to link JavaScriptCore, maybe. You can probably set up some cross compilation environment but that's also going to need some work in the current build system. Cerbero is the place to figure this out and do it properly.

superdump commented 9 years ago

Having said all that, we have demoed on the RPi though I'm not sure how @pererikb built everything.

ikonst commented 9 years ago

I think he's running it on Raspberry Pi, not building it :)

stefanalund commented 9 years ago

image

:-)

clementperon commented 9 years ago

Cool project, is it open source ?

I'm just looking for a simple server code example.

stefanalund commented 9 years ago

@frozeus do you mean the Raspberry Pi part? It could be, but we haven't made it available as one of our support platforms yet. It's still a bit of a hack :) If you are interested, and willing to get your hands dirty, maybe we can provide you with a patch.

We don't have any example code for running OpenWebRTC on a server, we try to limit our focus to clients. But in theory there is nothing preventing you from running the code on (Linux) server. In the picture above the RPI is running as a client.

clementperon commented 9 years ago

Yes i will be very interested. I think it could be a lovely solution for all raspberry pi owners, much more better than a simple rtp server with gstreamer :)

And by the way if someone is interested i successfully build with glib and gstreamer. You just need to remove dirs 'binding, bridge, test' from the configure.ac and Makefile.am and remove some PKG_config_check in configure.ac.

stefanalund commented 9 years ago

Cool, we will provide some patches soon, we just need to clean them up a bit first :)

Would be great if you would document your work on the Wiki: https://github.com/EricssonResearch/openwebrtc/wiki

Thanks

sdroege commented 9 years ago

@frozeus those are exactly the changes needed, yes. Now if you just make them conditional based on some --disable-bridge configure switch, this should be ready to merge :) Feel to ask here if you need any help.

clementperon commented 9 years ago

Thanks for you support, i'm a newbie with autools/autoconf but i will try.

Also as i have a hardware h264/opus encoder (without pulse/v4l2 interface) i'm editing owr_local_media_source to support appsrc and push data in this source. Not sure there is a generic way to do this. As soon as it's working i will try to push a patch if you think it can be usefull.

stefanalund commented 9 years ago

Cool, please do!

superdump commented 9 years ago

I think @ford-prefect has been doing some work to handle compressed media sources but I'm not sure how much he's managed to do. Maybe that work is useful to you and we can discuss how to continue with it if you're interested. :smile:

ford-prefect commented 9 years ago

I've left notes on my works so far at https://github.com/EricssonResearch/openwebrtc/issues/172#issuecomment-74239108

On 12 February 2015 at 22:17, Robert Swain notifications@github.com wrote:

I think @ford-prefect https://github.com/ford-prefect has been doing some work to handle compressed media sources but I'm not sure how much he's managed to do. Maybe that work is useful to you and we can discuss how to continue with it if you're interested. [image: :smile:]

— Reply to this email directly or view it on GitHub https://github.com/EricssonResearch/openwebrtc/issues/159#issuecomment-74105643 .

superdump commented 9 years ago

This is done. Closing.

ikonst commented 9 years ago

Did we split the openwebrtc recipe into openwebrtc and openwebrtc-bridge?

If we do this, we can eliminate the dependency of openwebrtc on Android/iOS on the host openwebrtc build, and so eliminate the annoying "You need to build openwebrtc for the host..." message (as long as you're just building the openwebrtc recipe -- not the whole package, since that'll probably still require the bridge).

superdump commented 9 years ago

No, but we can make variants in the openwebrtc.recipe so that if you do not want the bridge and its dependencies, you can disable them.