| | |
| | | * @{ |
| | | */ |
| | | |
| | | struct _MSAudioConference; |
| | | struct _MSAudioEndpoint; |
| | | |
| | | typedef void (*MSAudioConferenceNotifyActiveTalker)(struct _MSAudioConference *, struct _MSAudioEndpoint *ep); |
| | | |
| | | /** |
| | | * Structure that holds audio conference parameters |
| | | **/ |
| | | struct _MSAudioConferenceParams{ |
| | | int samplerate; /**< Conference audio sampling rate in Hz: 8000, 16000 ...*/ |
| | | MSAudioConferenceNotifyActiveTalker active_talker_callback; |
| | | void *user_data; |
| | | }; |
| | | |
| | | /** |
| | |
| | | **/ |
| | | MS2_PUBLIC void ms_audio_conference_remove_member(MSAudioConference *obj, MSAudioEndpoint *ep); |
| | | |
| | | |
| | | /** |
| | | * Process events of the audio conference. |
| | | * Calling this method periodically (for example every 50 ms), is necessary |
| | | * to receive the active talker notifications to the callback set in the MSAudioConferenceParams. |
| | | * @param obj the conference |
| | | **/ |
| | | MS2_PUBLIC void ms_audio_conference_process_events(MSAudioConference *obj); |
| | | /** |
| | | * Mutes or unmutes a participant. |
| | | * |
| | |
| | | MS2_PUBLIC MSAudioEndpoint * ms_audio_endpoint_get_from_stream(AudioStream *st, bool_t is_remote); |
| | | |
| | | /** |
| | | * Associate a user pointer to the endpoint. |
| | | * @param ep the endpoint |
| | | * @param user_data the user data |
| | | */ |
| | | MS2_PUBLIC void ms_audio_endpoint_set_user_data(MSAudioEndpoint *ep, void *user_data); |
| | | |
| | | /** |
| | | * Get the user pointer associated to the endpoint. |
| | | * @param ep the endpoint |
| | | * @return the user data |
| | | */ |
| | | MS2_PUBLIC void * ms_audio_endpoint_get_user_data(const MSAudioEndpoint *ep); |
| | | |
| | | |
| | | /** |
| | | * Destroys a MSAudioEndpoint that was created from an AudioStream with ms_audio_endpoint_get_from_stream(). |
| | | * The AudioStream can then be destroyed if needed. |
| | | **/ |
| | |
| | | * @} |
| | | */ |
| | | |
| | | /** |
| | | * @addtogroup mediastreamer2_video_conference |
| | | * @{ |
| | | */ |
| | | |
| | | /** |
| | | * Structure that holds audio conference parameters |
| | | **/ |
| | | struct _MSVideoConferenceParams{ |
| | | int min_switch_interval; |
| | | const char *codec_mime_type; |
| | | }; |
| | | |
| | | /** |
| | | * Typedef to structure that holds conference parameters |
| | | **/ |
| | | typedef struct _MSVideoConferenceParams MSVideoConferenceParams; |
| | | |
| | | /** |
| | | * The MSVideoConference is the object representing a video conference. |
| | | * |
| | | * First, the conference has to be created with ms_video_conference_new(), with parameters supplied. |
| | | * Then, participants to the conference can be added with ms_video_conference_add_member(). |
| | | * Participants can be removed from the conference with ms_video_conference_remove_member(). |
| | | * The conference processing is performed in a new thread run by a MSTicker object, which is owned by the conference. |
| | | * When all participants are removed, the MSVideoConference object can then be safely destroyed with ms_video_conference_destroy(). |
| | | **/ |
| | | typedef struct _MSVideoConference MSVideoConference; |
| | | |
| | | |
| | | /** |
| | | * The MSVideoEndpoint represents a participant in the conference. |
| | | * It can be constructed from an existing VideoStream object with |
| | | * ms_video_endpoint_get_from_stream(). |
| | | **/ |
| | | typedef struct _MSVideoEndpoint MSVideoEndpoint; |
| | | |
| | | |
| | | |
| | | |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /** |
| | | * Creates a conference. |
| | | * @param params a MSVideoConferenceParams structure, containing conference parameters. |
| | | * @returns a MSVideoConference object. |
| | | **/ |
| | | MS2_PUBLIC MSVideoConference * ms_video_conference_new(MSFactory *factory, const MSVideoConferenceParams *params); |
| | | |
| | | /** |
| | | * Gets conference's current parameters. |
| | | * @param obj the conference. |
| | | * @returns a read-only pointer to the conference parameters. |
| | | **/ |
| | | MS2_PUBLIC const MSVideoConferenceParams *ms_video_conference_get_params(MSVideoConference *obj); |
| | | |
| | | /** |
| | | * Adds a participant to the conference. |
| | | * @param obj the conference |
| | | * @param ep the participant, represented as a MSVideoEndpoint object |
| | | **/ |
| | | MS2_PUBLIC void ms_video_conference_add_member(MSVideoConference *obj, MSVideoEndpoint *ep); |
| | | |
| | | /** |
| | | * Removes a participant from the conference. |
| | | * @param obj the conference |
| | | * @param ep the participant, represented as a MSVideoEndpoint object |
| | | **/ |
| | | MS2_PUBLIC void ms_video_conference_remove_member(MSVideoConference *obj, MSVideoEndpoint *ep); |
| | | |
| | | |
| | | /** |
| | | * Switch the focus of the video conf on a given member. |
| | | * @param obj the conference |
| | | * @param ep the participant, represented as a MSVideoEndpoint object |
| | | */ |
| | | MS2_PUBLIC void ms_video_conference_set_focus(MSVideoConference *obj, MSVideoEndpoint *ep); |
| | | |
| | | /** |
| | | * Get the video placeholder member, as MSVideoEndpoint. |
| | | * @param obj the conference |
| | | * @return a MSVideoEndpoint object. |
| | | */ |
| | | MS2_PUBLIC MSVideoEndpoint *ms_video_conference_get_video_placeholder_member(const MSVideoConference *obj); |
| | | |
| | | /** |
| | | * Get the list of members, as MSVideoEndpoints. |
| | | * @param obj the conference |
| | | * @return a list of MSVideoEndpoint objects. |
| | | */ |
| | | MS2_PUBLIC const bctbx_list_t* ms_video_conference_get_members(const MSVideoConference *obj); |
| | | |
| | | /** |
| | | * Put an audio conference and a video conference in relationship. |
| | | * The audio conference will monitor the active speaker, and notify the video conference. |
| | | * @param obj the video conference |
| | | * @param obj the audio conference |
| | | */ |
| | | MS2_PUBLIC void ms_video_conference_set_audio_conference(MSVideoConference *obj, MSAudioConference *audioconf); |
| | | |
| | | /** |
| | | * Returns the size (ie the number of participants) of a conference. |
| | | * @param obj the conference |
| | | **/ |
| | | MS2_PUBLIC int ms_video_conference_get_size(MSVideoConference *obj); |
| | | |
| | | /** |
| | | * Destroys a conference. |
| | | * @param obj the conference |
| | | * All participants must have been removed before destroying the conference. |
| | | **/ |
| | | MS2_PUBLIC void ms_video_conference_destroy(MSVideoConference *obj); |
| | | |
| | | /** |
| | | * Creates an MSVideoEndpoint from an existing VideoStream. |
| | | * |
| | | * In order to create graphs for video processing of each participant, the VideoStream object is used, because |
| | | * this object already handles all the processing for encoding, decoding, etc... |
| | | * |
| | | * The construction of the participants depends whether it is a remote participant, that is somebody in the network |
| | | * sending and receiving video through RTP, or a local participant, that is somebody using the local camera to capture |
| | | * and local screen to display video. |
| | | * |
| | | * To create a remote participant, first create and start a VideoStream for the participant with video_stream_new() and |
| | | * video_stream_start() with NULL MSWebCam argument. |
| | | * Then, create a MSVideoEndpoint representing this participant by calling ms_video_endpoint_get_from_stream() with |
| | | * is_remote=TRUE. |
| | | * |
| | | * To create a local participant, first create and start a VideoStream with video_stream_new() and video_stream_start(), |
| | | * with the correct MSWebCam to use. |
| | | * Arguments controlling RTP should be filled with placeholders value and will not be used for conferencing. |
| | | * Then, create a MSVideoEndpoint representing this local participant by calling ms_video_endpoint_get_from_stream() |
| | | * with the video stream and is_remote=FALSE.<br> |
| | | * For example:<br> |
| | | * <PRE> |
| | | * VideoStream *st=video_stream_new(65000,65001,FALSE); |
| | | * video_stream_start(st, conf->local_dummy_profile, |
| | | * "127.0.0.1", |
| | | * 65000, |
| | | * "127.0.0.1", |
| | | * 65001, |
| | | * 0, |
| | | * 40, |
| | | * webcam |
| | | * ); |
| | | * MSVideoEndpoint *local_endpoint=ms_video_endpoint_get_from_stream(st,FALSE); |
| | | * </PRE> |
| | | **/ |
| | | MS2_PUBLIC MSVideoEndpoint * ms_video_endpoint_get_from_stream(VideoStream *st, bool_t is_remote); |
| | | |
| | | |
| | | /** |
| | | * Associate a user pointer to the endpoint. |
| | | * @param ep the endpoint |
| | | * @param user_data the user data |
| | | */ |
| | | MS2_PUBLIC void ms_video_endpoint_set_user_data(MSVideoEndpoint *ep, void *user_data); |
| | | |
| | | /** |
| | | * Get the user pointer associated to the endpoint. |
| | | * @param ep the endpoint |
| | | * @return the user data |
| | | */ |
| | | MS2_PUBLIC void * ms_video_endpoint_get_user_data(const MSVideoEndpoint *ep); |
| | | |
| | | |
| | | /** |
| | | * Destroys a MSVideoEndpoint that was created from a VideoStream with ms_video_endpoint_get_from_stream(). |
| | | * The VideoStream can then be destroyed if needed. |
| | | **/ |
| | | MS2_PUBLIC void ms_video_endpoint_release_from_stream(MSVideoEndpoint *obj); |
| | | |
| | | |
| | | #ifdef __cplusplus |
| | | } |
| | | #endif |
| | | |
| | | /** |
| | | * @} |
| | | */ |
| | | |
| | | #endif |
| | | |