![]() |
![]() |
![]() |
Farstream Reference Manual | ![]() |
---|---|---|---|---|
Top | Description | Object Hierarchy | Properties | Signals |
#include <farstream/fs-conference.h> FsSession; struct FsSessionClass; enum FsDTMFEvent; enum FsDTMFMethod; FsStream * fs_session_new_stream (FsSession *session
,FsParticipant *participant
,FsStreamDirection direction
,GError **error
); gboolean fs_session_set_codec_preferences (FsSession *session
,GList *codec_preferences
,GError **error
); void fs_session_destroy (FsSession *session
); gboolean fs_session_start_telephony_event (FsSession *session
,guint8 event
,guint8 volume
); gboolean fs_session_stop_telephony_event (FsSession *session
); gboolean fs_session_set_send_codec (FsSession *session
,FsCodec *send_codec
,GError **error
); gchar ** fs_session_list_transmitters (FsSession *session
); GType fs_session_get_stream_transmitter_type (FsSession *session
,const gchar *transmitter
); GList * fs_session_codecs_need_resend (FsSession *session
,GList *old_codecs
,GList *new_codecs
); void fs_session_emit_error (FsSession *session
,gint error_no
,const gchar *error_msg
); gboolean fs_session_parse_codecs_changed (FsSession *session
,GstMessage *message
); gboolean fs_session_parse_send_codec_changed (FsSession *session
,GstMessage *message
,FsCodec **codec
,GList **secondary_codecs
); gboolean fs_session_parse_telephony_event_started (FsSession *session
,GstMessage *message
,FsDTMFMethod *method
,FsDTMFEvent *event
,guint8 *volume
); gboolean fs_session_parse_telephony_event_stopped (FsSession *session
,GstMessage *message
,FsDTMFMethod *method
);
"codec-preferences" FsCodecGList* : Read "codecs" FsCodecGList* : Read "codecs-without-config" FsCodecGList* : Read "conference" FsConference* : Read / Write / Construct Only "current-send-codec" FsCodec* : Read "id" guint : Read / Write / Construct Only "media-type" FsMediaType : Read / Write / Construct Only "sink-pad" GstPad* : Read "tos" guint : Read / Write
This object is the base implementation of a Farstream Session. It needs to be derived and implemented by a farstream conference gstreamer element. A Farstream session is defined in the same way as an RTP session. It can contain one or more participants but represents only one media stream (i.e. One session for video and one session for audio in an AV conference). Sessions contained in the same conference will be synchronised together during playback.
This will communicate asynchronous events to the user through GstMessage of type GST_MESSAGE_ELEMENT sent over the GstBus.
farstream-send-codec-changed
"
message"session" |
FsSession | The session that emits the message |
"codec" |
FsCodec | The new send codec |
"secondary-codecs" |
GList | A GList of FsCodec (to be freed with fs_codec_list_destroy() )
|
This message is sent on the bus when the value of the "current-send-codec" property changes.
farstream-codecs-changed
"
message"session" |
FsSession | The session that emits the message |
This message is sent on the bus when the value of the "codecs" or "codecs-without-config" properties change. If one is using codecs that have configuration data that needs to be transmitted reliably, one should fetch "codecs", otherwise, "codecs-without-config" should be enough.
farstream-telephony-event-started
"
message"session" |
FsSession | The session that emits the message |
"method" |
FsDTMFMethod | The method used to send the DTMF |
"event" |
FSDTMFEvent | The event number |
"volume" |
guchar | The volume of the event |
This message is emitted after a succesful call to
fs_session_start_telephony_event()
to inform the application that the
telephony event has started.
farstream-telephony-event-stopped
"
message"session" |
FsSession | The session that emits the message |
"method" |
FsDTMFMethod | The method used to send the DTMF |
This message is emitted after a succesful call to
fs_session_stop_telephony_event()
to inform the application that the
telephony event has stopped.
typedef struct _FsSession FsSession;
All members are private, access them using methods and properties
struct FsSessionClass { GstObjectClass parent_class; /*virtual functions */ FsStream *(* new_stream) (FsSession *session, FsParticipant *participant, FsStreamDirection direction, GError **error); gboolean (* start_telephony_event) (FsSession *session, guint8 event, guint8 volume); gboolean (* stop_telephony_event) (FsSession *session); gboolean (* set_send_codec) (FsSession *session, FsCodec *send_codec, GError **error); gboolean (* set_codec_preferences) (FsSession *session, GList *codec_preferences, GError **error); gchar** (* list_transmitters) (FsSession *session); GType (* get_stream_transmitter_type) (FsSession *session, const gchar *transmitter); GList* (* codecs_need_resend) (FsSession *session, GList *old_codecs, GList *new_codecs); };
You must override at least new_stream in a subclass.
GstObjectClass |
Our parent |
Create a new FsStream | |
Starts a telephony event | |
Stops a telephony event | |
Forces sending with a specific codec | |
Specifies the codec preferences | |
Returns a list of the available transmitters | |
Returns the GType of the stream transmitter | |
Returns the list of codecs that need resending |
typedef enum { } FsDTMFEvent;
An enum that represents the different DTMF event that can be sent to a FsSession. The values corresponds those those defined in RFC 4733 The rest of the possibles values are in the IANA registry at: http://www.iana.org/assignments/audio-telephone-event-registry
typedef enum { FS_DTMF_METHOD_RTP_RFC4733 = 1, FS_DTMF_METHOD_SOUND = 2 } FsDTMFMethod;
An enum that represents the different ways a DTMF event can be sent
FsStream * fs_session_new_stream (FsSession *session
,FsParticipant *participant
,FsStreamDirection direction
,GError **error
);
This function creates a stream for the given participant into the active session.
|
a FsSession |
|
FsParticipant of a participant for the new stream |
|
FsStreamDirection describing the direction of the new stream that will be created for this participant |
|
location of a GError, or NULL if no error occured |
Returns : |
the new FsStream that has been created. User must unref the FsStream when the stream is ended. If an error occured, returns NULL. [transfer full] |
gboolean fs_session_set_codec_preferences (FsSession *session
,GList *codec_preferences
,GError **error
);
Set the list of desired codec preferences. The user may change this value during an ongoing session. Note that doing this can cause the codecs to change. Therefore this requires the user to fetch the new codecs and renegotiate them with the peers. It is a GList of FsCodec. The changes are immediately effective. The function does not take ownership of the list.
The payload type may be a valid dynamic PT (96-127), FS_CODEC_ID_DISABLE
or FS_CODEC_ID_ANY
. If the encoding name is "reserve-pt", then the
payload type of the codec will be "reserved" and not be used by any
dynamically assigned payload type.
If the list of specifications would invalidate all codecs, an error will be returned.
void fs_session_destroy (FsSession *session
);
This will cause the session to remove all links to other objects and to remove itself from the FsConference, it will also destroy all FsStream inside this FsSession Once a FsSession has been destroyed, it can not be used anymore.
It is strongly recommended to call this function from the main thread because releasing the application's reference to a session.
|
a FsSession |
gboolean fs_session_start_telephony_event (FsSession *session
,guint8 event
,guint8 volume
);
This function will start sending a telephony event (such as a DTMF
tone) on the FsSession. You have to call the function
fs_session_stop_telephony_event()
to stop it.
If this function returns TRUE
, a "farstream-telephony-event-started" will
always be emitted when the event is actually played out.
|
a FsSession |
|
A FsStreamDTMFEvent or another number defined at http://www.iana.org/assignments/audio-telephone-event-registry |
|
The volume in dBm0 without the negative sign. Should be between 0 and 36. Higher values mean lower volume |
Returns : |
TRUE if sucessful, it can return FALSE if the FsStream
does not support this telephony event. |
gboolean fs_session_stop_telephony_event (FsSession *session
);
This function will stop sending a telephony event started by
fs_session_start_telephony_event()
. If the event was being sent
for less than 50ms, it will be sent for 50ms minimum. If the
duration was a positive and the event is not over, it will cut it
short.
If this function returns TRUE
, a "farstream-telephony-event-stopped" will
always be emitted when the event is actually stopped.
gboolean fs_session_set_send_codec (FsSession *session
,FsCodec *send_codec
,GError **error
);
This function will set the currently being sent codec for all streams in this
session. The given FsCodec must be taken directly from the codecs
property of the session. If the given codec is not in the codecs
list, error
will be set and FALSE
will be returned. The send_codec
will be
copied so it must be free'd using fs_codec_destroy()
when done.
gchar ** fs_session_list_transmitters (FsSession *session
);
Get the list of all available transmitters for this session.
|
A FsSession |
Returns : |
a newly-allocagted NULL terminated array of
named of transmitters or NULL if no transmitter is needed for this type of
session. It should be freed with g_strfreev() . [transfer full]
|
GType fs_session_get_stream_transmitter_type (FsSession *session
,const gchar *transmitter
);
Returns the GType of the stream transmitter, bindings can use it
to validate/convert the parameters passed to fs_session_new_stream()
.
GList * fs_session_codecs_need_resend (FsSession *session
,GList *old_codecs
,GList *new_codecs
);
Some codec updates need to be reliably transmitted to the other side because they contain important parameters required to decode the media. Other codec updates, caused by user action, don't.
|
a FsSession |
|
Codecs previously retrieved from the "codecs" property. [element-type FsCodec][transfer none] |
|
Codecs recently retrieved from the "codecs" property. [element-type FsCodec][transfer none] |
Returns : |
A new GList of
FsCodec that need to be resent or NULL if there are none. This
list must be freed with fs_codec_list_destroy() . [element-type FsCodec][transfer full]
|
void fs_session_emit_error (FsSession *session
,gint error_no
,const gchar *error_msg
);
This function emit the "error" signal on a FsSession, it should only be called by subclasses.
gboolean fs_session_parse_codecs_changed (FsSession *session
,GstMessage *message
);
Parses a "farstream-codecs-changed" message and checks if it matches
the session
parameters.
|
a FsSession to match against the message |
|
a GstMessage to parse |
Returns : |
TRUE if the message matches the session and is valid. |
gboolean fs_session_parse_send_codec_changed (FsSession *session
,GstMessage *message
,FsCodec **codec
,GList **secondary_codecs
);
Returns a GList of FsCodec of the message if not NULL
Parses a "farstream-send-codec-changed" message and checks if it matches
the session
parameters.
|
a FsSession to match against the message |
|
a GstMessage to parse |
|
Returns the FsCodec in the message if not
NULL . [out][transfer none]
|
|
. [out][transfer none][element-type FsCodec] |
Returns : |
TRUE if the message matches the session and is valid. |
gboolean fs_session_parse_telephony_event_started (FsSession *session
,GstMessage *message
,FsDTMFMethod *method
,FsDTMFEvent *event
,guint8 *volume
);
Parses a "farstream-telephony-event-started" message and checks if it matches
the session
parameters.
|
a FsSession to match against the message |
|
a GstMessage to parse |
|
Returns the FsDTMFMethod in the message if not NULL . [out]
|
|
Returns the FsDTMFEvent in the message if not NULL . [out]
|
|
Returns the volume in the message if not NULL . [out]
|
Returns : |
TRUE if the message matches the session and is valid. |
gboolean fs_session_parse_telephony_event_stopped (FsSession *session
,GstMessage *message
,FsDTMFMethod *method
);
Parses a "farstream-telephony-event-stopped" message and checks if it matches
the session
parameters.
|
a FsSession to match against the message |
|
a GstMessage to parse |
|
Returns the FsDTMFMethod in the message if not NULL . [out]
|
Returns : |
TRUE if the message matches the session and is valid. |
"codec-preferences"
property "codec-preferences" FsCodecGList* : Read
Type: GLib.List(FsCodec) Transfer: full
This is the current preferences list for the local codecs. It is
set by the user to specify the codec options and priorities. The user may
change its value with fs_session_set_codec_preferences()
at any time
during a session. It is a GList of FsCodec.
The user must free this codec list using fs_codec_list_destroy()
when done.
The payload type may be a valid dynamic PT (96-127), FS_CODEC_ID_DISABLE
or FS_CODEC_ID_ANY
. If the encoding name is "reserve-pt", then the
payload type of the codec will be "reserved" and not be used by any
dynamically assigned payload type.
"codecs"
property "codecs" FsCodecGList* : Read
Type: GLib.List(FsCodec) Transfer: full
This is the list of codecs used for this session. It will include the codecs and payload type used to receive media on this session. It will also include any configuration parameter that must be transmitted reliably for the other end to decode the content.
It may change when the codec preferences are set, when codecs are set on a FsStream in this session, when a FsStream is destroyed or asynchronously when new config data is discovered.
If any configuration parameter needs to be discovered, this property
will be NULL
until they have been discovered. One can always get
the codecs from "codecs-without-config".
The "farstream-codecs-changed" message will be emitted whenever the value
of this property changes.
It is a GList of FsCodec. User must free this codec list using
fs_codec_list_destroy()
when done.
"codecs-without-config"
property "codecs-without-config" FsCodecGList* : Read
Type: GLib.List(FsCodec) Transfer: full
This is the same list of codecs as "codecs" without the configuration information that describes the data sent. It is suitable for configurations where a list of codecs is shared by many senders. If one is using codecs such as Theora, Vorbis or H.264 that require such information to be transmitted, the configuration data should be included in the stream and retransmitted regularly.
It may change when the codec preferences are set, when codecs are set on a FsStream in this session, when a FsStream is destroyed or asynchronously when new config data is discovered.
The "farstream-codecs-changed" message will be emitted whenever the value of this property changes.
It is a GList of FsCodec. User must free this codec list using
fs_codec_list_destroy()
when done.
"conference"
property"conference" FsConference* : Read / Write / Construct Only
The FsConference parent of this session. This property is a construct param and is read-only.
"current-send-codec"
property"current-send-codec" FsCodec* : Read
Indicates the currently active send codec. A user can change the active
send codec by calling fs_session_set_send_codec()
. The send codec could
also be automatically changed by Farstream. This property is an
FsCodec. User must free the codec using fs_codec_destroy()
when done.
The "farstream-send-codec-changed" message is emitted on the bus when
the value of this property changes.
"id"
property"id" guint : Read / Write / Construct Only
The ID of the session, the first number of the pads linked to this session will be this id
Default value: 0
"media-type"
property"media-type" FsMediaType : Read / Write / Construct Only
The media-type of the session. This is either Audio, Video or both. This is a constructor parameter that cannot be changed.
Default value: FS_MEDIA_TYPE_AUDIO
"sink-pad"
property"sink-pad" GstPad* : Read
The Gstreamer sink pad that must be used to send media data on this session. User must unref this GstPad when done with it.
"tos"
property"tos" guint : Read / Write
Sets the IP ToS field (and if possible the IPv6 TCLASS field
Allowed values: <= 255
Default value: 0
"error"
signalvoid user_function (FsSession *self,
GObject *object,
FsError error_no,
gchar *error_msg,
gpointer user_data) : Run Last
This signal is emitted in any error condition, it can be emitted on any thread. Applications should listen to the GstBus for errors.
|
FsSession that emitted the signal |
|
The Gobject that emitted the signal |
|
The number of the error |
|
Error message |
|
user data set when the signal handler was connected. |