Group PJMEDIA_VID_CONF

group PJMEDIA_VID_CONF

Video conference bridge implementation destination.

This describes the video conference bridge implementation in PJMEDIA. The conference bridge provides powerful and efficient mechanism to route the video flow and combine multiple video data from multiple video sources.

Typedefs

typedef struct pjmedia_vid_conf pjmedia_vid_conf

Opaque type for video conference bridge.

Enums

enum pjmedia_vid_conf_layout

Enumeration of video conference layout mode.

Values:

enumerator PJMEDIA_VID_CONF_LAYOUT_DEFAULT

In mixing video from multiple sources, each source will occupy about the same size in the mixing result frame at all time.

enumerator PJMEDIA_VID_CONF_LAYOUT_SELECTIVE_FOCUS

Warning: this is not implemented yet.

In mixing video from multiple sources, one specified participant (or source port) will be the focus (i.e: occupy bigger portion than the others).

enumerator PJMEDIA_VID_CONF_LAYOUT_INTERVAL_FOCUS

Warning: this is not implemented yet.

In mixing video from multiple sources, one participant will be the focus at a time (i.e: occupy bigger portion than the others), and after some interval the focus will be shifted to another participant, so each participant will have the same focus duration.

enumerator PJMEDIA_VID_CONF_LAYOUT_CUSTOM

Warning: this is not implemented yet.

In mixing video from multiple sources, each participant (or source port) will have specific layout configuration.

Functions

void pjmedia_vid_conf_setting_default(pjmedia_vid_conf_setting *opt)

Initialize video conference settings with default values.

Parameters:

opt – The settings to be initialized.

pj_status_t pjmedia_vid_conf_create(pj_pool_t *pool, const pjmedia_vid_conf_setting *opt, pjmedia_vid_conf **p_vid_conf)

Create a video conference bridge.

Parameters:
  • pool – The memory pool.

  • opt – The video conference settings.

  • p_vid_conf – Pointer to receive the video conference bridge.

Returns:

PJ_SUCCESS on success, or the appropriate error code.

pj_status_t pjmedia_vid_conf_destroy(pjmedia_vid_conf *vid_conf)

Destroy video conference bridge.

Parameters:

vid_conf – The video conference bridge.

Returns:

PJ_SUCCESS on success.

pj_status_t pjmedia_vid_conf_add_port(pjmedia_vid_conf *vid_conf, pj_pool_t *pool, pjmedia_port *port, const pj_str_t *name, void *opt, unsigned *p_slot)

Add a media port to the video conference bridge.

Parameters:
  • vid_conf – The video conference bridge.

  • pool – The memory pool, the brige will create new pool based on this pool factory for this media port.

  • port – The media port to be added.

  • name – Name to be assigned to the slot. If not set, it will be set to the media port name.

  • opt – The option, for future use, currently this must be NULL.

  • p_slot – Pointer to receive the slot index of the port in the conference bridge.

Returns:

PJ_SUCCESS on success, or the appropriate error code.

pj_status_t pjmedia_vid_conf_remove_port(pjmedia_vid_conf *vid_conf, unsigned slot)

Remove a media port from the video conference bridge.

Parameters:
  • vid_conf – The video conference bridge.

  • slot – The media port’s slot index to be removed.

Returns:

PJ_SUCCESS on success, or the appropriate error code.

unsigned pjmedia_vid_conf_get_port_count(pjmedia_vid_conf *vid_conf)

Get number of ports currently registered in the video conference bridge.

Parameters:

vid_conf – The video conference bridge.

Returns:

Number of ports currently registered to the video conference bridge.

pj_status_t pjmedia_vid_conf_enum_ports(pjmedia_vid_conf *vid_conf, unsigned slots[], unsigned *count)

Enumerate occupied slots in the video conference bridge.

Parameters:
  • vid_conf – The video conference bridge.

  • slots – Array of slot to be filled in.

  • count – On input, specifies the maximum number of slot in the array. On return, it will be filled with the actual number of slot.

Returns:

PJ_SUCCESS on success.

pj_status_t pjmedia_vid_conf_get_port_info(pjmedia_vid_conf *vid_conf, unsigned slot, pjmedia_vid_conf_port_info *info)

Get port info.

Parameters:
  • vid_conf – The video conference bridge.

  • slot – Slot index.

  • info – Pointer to receive the info.

Returns:

PJ_SUCCESS on success.

pj_status_t pjmedia_vid_conf_connect_port(pjmedia_vid_conf *vid_conf, unsigned src_slot, unsigned sink_slot, void *opt)

Enable unidirectional video flow from the specified source slot to the specified sink slot.

Parameters:
  • vid_conf – The video conference bridge.

  • src_slot – Source slot.

  • sink_slot – Sink slot.

  • opt – The option, for future use, currently this must be NULL.

Returns:

PJ_SUCCES on success.

pj_status_t pjmedia_vid_conf_disconnect_port(pjmedia_vid_conf *vid_conf, unsigned src_slot, unsigned sink_slot)

Disconnect unidirectional video flow from the specified source to the specified sink slot.

Parameters:
  • vid_conf – The video conference bridge.

  • src_slot – Source slot.

  • sink_slot – Sink slot.

Returns:

PJ_SUCCESS on success.

pj_status_t pjmedia_vid_conf_update_port(pjmedia_vid_conf *vid_conf, unsigned slot)

Update or refresh port states from video port info. Some port may change its port info in the middle of a session, for example when a video stream decoder learns that incoming video size or frame rate has changed, video conference needs to be informed to update its internal states.

Parameters:
  • vid_conf – The video conference bridge.

  • slot – The media port’s slot index to be updated.

Returns:

PJ_SUCCESS on success, or the appropriate error code.

struct pjmedia_vid_conf_setting
#include <vid_conf.h>

Video conference bridge settings.

Public Members

unsigned max_slot_cnt

Maximum number of slots or media ports can be registered to the bridge.

Default: 32

unsigned frame_rate

Frame rate the bridge will operate at. For video playback smoothness, ideally the bridge frame rate should be the common multiple of the frame rates of the ports. Otherwise, ports whose unaligned frame rates may experience jitter. For example, if the application will work with frame rates of 10, 15, and 30 fps, setting this to 30 should be okay. But if it also needs to handle 20 fps, better setting this to 60.

Default: 60 (frames per second)

unsigned layout

Layout setting, see pjmedia_vid_conf_layout.

Default: PJMEDIA_VID_CONF_LAYOUT_DEFAULT

struct pjmedia_vid_conf_port_info
#include <vid_conf.h>

Video conference bridge port info.

Public Members

unsigned slot

Slot index.

pj_str_t name

Port name.

pjmedia_format format

Format.

unsigned listener_cnt

Number of listeners.

unsigned *listener_slots

Array of listeners.

unsigned transmitter_cnt

Number of transmitter.

unsigned *transmitter_slots

Array of transmitter.