2,225
edits
mNo edit summary |
No edit summary |
||
Line 3: | Line 3: | ||
[[GstWebRTC - API Reference | API Reference]]| | [[GstWebRTC - API Reference | API Reference]]| | ||
This page provides the basics on how to implement custom signalers. In particular, this page describes how to integrate the custom signaler with the project's build system. The [[GstWebRTC - API Reference | API Reference]] shows how to develop a custom signaler that interacts with | This page provides the basics on how to implement custom signalers. In particular, this page describes how to integrate the custom signaler with the project's build system. The [[GstWebRTC - API Reference | API Reference]] shows how to develop a custom signaler that interacts with GstRrWebRTC state machine. | ||
==Custom Signaling Basics== | ==Custom Signaling Basics== | ||
Custom signalers are implemented by subclassing the GstBaseSignaler class. By doing so, the new signaler is integrated into | Custom signalers are implemented by subclassing the GstBaseSignaler class. By doing so, the new signaler is integrated into GstRrWebRTC state machine logic. The diagram in Figure 1 summarizes the concept: | ||
[[File:gstwebrtc-uml-signaler.png|800px|center|Figure 1. UML Diagram of Concrete Signalers]] | [[File:gstwebrtc-uml-signaler.png|800px|center|Figure 1. UML Diagram of Concrete Signalers]] | ||
Line 14: | Line 14: | ||
==Integrating a Custom Signaler== | ==Integrating a Custom Signaler== | ||
There are two ways a custom signaler can be integrated into the project. The first one is to build the new signaler along with the | There are two ways a custom signaler can be integrated into the project. The first one is to build the new signaler along with the GstRrWebRTC project. In this case the signaler will be part of the project's binaries and the signaler's properties will be shown in the inspect output. The second way to integrate an external signaler is by doing it at runtime via the '''signaler-obj'''. In this case the signaler is built in an independent project and passed to the WebRTC state machine at runtime. The following subsections present further details. | ||
===Integrating Into | ===Integrating Into GstRrWebRTC Project=== | ||
The easiest way to integrate a custom signaler is to extend the project's build system to construct the new code. The following points summarize the steps necessary to integrate a custom signaler named '''GstExampleSignaler'''. | The easiest way to integrate a custom signaler is to extend the project's build system to construct the new code. The following points summarize the steps necessary to integrate a custom signaler named '''GstExampleSignaler'''. | ||
Line 26: | Line 26: | ||
At the end of ''gst/webrtc/Makefile.am'': | At the end of ''gst/webrtc/Makefile.am'': | ||
<syntaxhighlight lang=bash lines=1> | <syntaxhighlight lang=bash lines=1> | ||
libgstrrwebrtc_la_SOURCES += gstexamplesignaler.c | |||
noinst_HEADERS += gstexamplesignaler.h | noinst_HEADERS += gstexamplesignaler.h | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 35: | Line 35: | ||
At the end of ''gst/webrtc/Makefile.am'': | At the end of ''gst/webrtc/Makefile.am'': | ||
<syntaxhighlight lang=bash lines=1> | <syntaxhighlight lang=bash lines=1> | ||
libgstrrwebrtc_la_CFLAGS += -I/usr/include/dependency | |||
libgstrrwebrtc_la_LIBADD += -L/usr/lib/dependency -ldependency | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 54: | Line 54: | ||
===Integrating From ExternalProject=== | ===Integrating From ExternalProject=== | ||
An alternative way to integrate an external signaler is to do it at runtime via the '''signaler-obj''' property. This is specially useful for signalers whose licensing is different and more restrictive than the one shipped with | An alternative way to integrate an external signaler is to do it at runtime via the '''signaler-obj''' property. This is specially useful for signalers whose licensing is different and more restrictive than the one shipped with GstRrWebRTC. As such, the signaler can be distributed independently. | ||
If both the '''signaler-obj''' and the built-in '''signaler''' properties are set, the last property set will be the one finally configured. | If both the '''signaler-obj''' and the built-in '''signaler''' properties are set, the last property set will be the one finally configured. | ||
Programmatically, an application would set the new signaler in the | Programmatically, an application would set the new signaler in the GstRrWebRTC element similar to the following: | ||
<syntaxhighlight lang=c lines=1> | <syntaxhighlight lang=c lines=1> | ||
GstElement * webrtcbin; | GstElement * webrtcbin; |