SDP utilities. More...
Functions | |
void | janus_sdp_destroy (janus_sdp *sdp) |
Method to destroy a Janus SDP object. | |
void | janus_sdp_mline_destroy (janus_sdp_mline *m) |
Helper method to free a janus_sdp_mline instance. | |
void | janus_sdp_attribute_destroy (janus_sdp_attribute *a) |
Helper method to free a janus_sdp_attribute instance. | |
janus_sdp_mline * | janus_sdp_mline_create (janus_sdp_mtype type, guint16 port, const char *proto, janus_sdp_mdirection direction) |
Helper method to quickly create a janus_sdp_mline instance. | |
janus_sdp_mline * | janus_sdp_mline_find (janus_sdp *sdp, janus_sdp_mtype type) |
Helper method to get the janus_sdp_mline associated to a media type. | |
janus_sdp_mline * | janus_sdp_mline_find_by_index (janus_sdp *sdp, int index) |
Helper method to get the janus_sdp_mline by its index. | |
int | janus_sdp_mline_remove (janus_sdp *sdp, janus_sdp_mtype type) |
Helper method to remove the janus_sdp_mline associated to a media type from the SDP. | |
janus_sdp_attribute * | janus_sdp_attribute_create (const char *name, const char *value,...) |
int | janus_sdp_attribute_add_to_mline (janus_sdp_mline *mline, janus_sdp_attribute *attr) |
Helper method to add an attribute to a media line. | |
janus_sdp_mtype | janus_sdp_parse_mtype (const char *type) |
Helper method to get a janus_sdp_mtype from a string. | |
const char * | janus_sdp_mtype_str (janus_sdp_mtype type) |
Helper method to get the string associated to a janus_sdp_mtype value. | |
janus_sdp_mdirection | janus_sdp_parse_mdirection (const char *direction) |
Helper method to get a janus_sdp_mdirection from a string. | |
const char * | janus_sdp_mdirection_str (janus_sdp_mdirection direction) |
Helper method to get the string associated to a janus_sdp_mdirection value. | |
const char * | janus_sdp_oa_type_str (janus_sdp_oa_type type) |
janus_sdp * | janus_sdp_parse (const char *sdp, char *error, size_t errlen) |
Method to parse an SDP string to a janus_sdp object. | |
int | janus_sdp_remove_payload_type (janus_sdp *sdp, int index, int pt) |
Helper method to quickly remove all traces (m-line, rtpmap, fmtp, etc.) of a payload type. | |
int | janus_sdp_get_codec_pt (janus_sdp *sdp, int index, const char *codec) |
Helper to get the payload type associated to a specific codec in an m-line. | |
int | janus_sdp_get_codec_pt_full (janus_sdp *sdp, int index, const char *codec, const char *profile) |
Helper to get the payload type associated to a specific codec, in an m-line, taking into account a codec profile as a hint as well. | |
const char * | janus_sdp_get_codec_name (janus_sdp *sdp, int index, int pt) |
Helper to get the codec name associated to a specific payload type in an m-line. | |
const char * | janus_sdp_get_rtpmap_codec (const char *rtpmap) |
Helper to get the codec name associated to a specific rtpmap. | |
const char * | janus_sdp_get_codec_rtpmap (const char *codec) |
Helper to get the rtpmap associated to a specific codec. | |
const char * | janus_sdp_get_fmtp (janus_sdp *sdp, int index, int pt) |
Helper to get the fmtp associated to a specific payload type. | |
char * | janus_sdp_get_video_profile (janus_videocodec codec, const char *fmtp) |
Helper to extract the H.264 or VP9 profile from a fmtp string. | |
int | janus_sdp_get_opusred_pt (janus_sdp *sdp, int index) |
Helper to get the opus/red payload type from an SDP, if present. | |
char * | janus_sdp_write (janus_sdp *imported) |
Method to serialize a janus_sdp object to an SDP string. | |
void | janus_sdp_find_preferred_codec (janus_sdp *sdp, janus_sdp_mtype type, int index, const char **codec) |
Helper method to return the preferred audio or video codec in an SDP offer or answer, (where by preferred we mean the codecs we prefer ourselves, and not the m-line SDP order) as long as the m-line direction is not disabled (port=0 or direction=inactive) in the SDP. | |
void | janus_sdp_find_first_codec (janus_sdp *sdp, janus_sdp_mtype type, int index, const char **codec) |
Helper method to return the first audio or video codec in an SDP offer or answer, (no matter whether we personally prefer them ourselves or not) as long as the m-line direction is not disabled (port=0 or direction=inactive) in the SDP. | |
const char * | janus_sdp_match_preferred_codec (janus_sdp_mtype type, char *codec) |
Helper method to match a codec to one of the preferred codecs. | |
janus_sdp * | janus_sdp_new (const char *name, const char *address) |
Method to quickly generate a janus_sdp instance from a few selected fields. | |
janus_sdp * | janus_sdp_generate_offer (const char *name, const char *address,...) |
Method to generate a janus_sdp offer, using variable arguments to dictate what to negotiate (e.g., in terms of media to offer, directions, etc.). Variable arguments are in the form of a sequence of name-value terminated by a JANUS_SDP_OA_DONE, e.g.: | |
int | janus_sdp_generate_offer_mline (janus_sdp *offer,...) |
Method to add a single m-line to a new offer, using the same variable arguments janus_sdp_generate_offer supports. This is useful whenever you need to create a new offer, but don't know in advance how many m-lines you'll need, or it would be hard to do programmatically in a single call to janus_sdp_generate_offer. The first argument MUST be JANUS_SDP_OA_MLINE, specifying the type of the media. | |
janus_sdp * | janus_sdp_generate_answer (janus_sdp *offer) |
Method to generate a janus_sdp answer to a provided janus_sdp offer. Notice that this doesn't address the individual m-lines: it will just create an empty response, create the corresponding m-lines, but leave them all "rejected". To answer each m-line you'll have to iterate on the offer m-lines and call janus_sdp_generate_answer_mline instead, e.g.: | |
int | janus_sdp_generate_answer_mline (janus_sdp *offer, janus_sdp *answer, janus_sdp_mline *offered,...) |
Method to respond to a single m-line in an offer, using the same variable arguments janus_sdp_generate_offer_mline supports. The first argument MUST be JANUS_SDP_OA_MLINE, specifying the type of the media, e.g.: | |
Variables | |
const char * | janus_preferred_audio_codecs [] |
uint | janus_audio_codecs = sizeof(janus_preferred_audio_codecs)/sizeof(*janus_preferred_audio_codecs) |
const char * | janus_preferred_video_codecs [] |
uint | janus_video_codecs = sizeof(janus_preferred_video_codecs)/sizeof(*janus_preferred_video_codecs) |
SDP utilities.
Implementation of an internal SDP representation. Allows to parse SDP strings to an internal janus_sdp object, the manipulation of such object by playing with its properties, and a serialization to an SDP string that can be passed around. Since they don't have any core dependencies, these utilities can be used by plugins as well.
int janus_sdp_attribute_add_to_mline | ( | janus_sdp_mline * | mline, |
janus_sdp_attribute * | attr ) |
Helper method to add an attribute to a media line.
[in] | mline | The m-line to add the attribute to |
[in] | attr | The attribute to add |
janus_sdp_attribute * janus_sdp_attribute_create | ( | const char * | name, |
const char * | value, | ||
... ) |
void janus_sdp_attribute_destroy | ( | janus_sdp_attribute * | attr | ) |
Helper method to free a janus_sdp_attribute instance.
[in] | attr | The janus_sdp_attribute instance to free |
void janus_sdp_destroy | ( | janus_sdp * | sdp | ) |
Method to destroy a Janus SDP object.
[in] | sdp | The Janus SDP object to free |
void janus_sdp_find_first_codec | ( | janus_sdp * | sdp, |
janus_sdp_mtype | type, | ||
int | index, | ||
const char ** | codec ) |
Helper method to return the first audio or video codec in an SDP offer or answer, (no matter whether we personally prefer them ourselves or not) as long as the m-line direction is not disabled (port=0 or direction=inactive) in the SDP.
[in] | sdp | The Janus SDP object to parse |
[in] | type | Whether we're looking at an audio or video codec |
[in] | index | The m-line to refer to (use -1 for the first m-line that matches) |
[out] | codec | The audio or video codec that was found |
void janus_sdp_find_preferred_codec | ( | janus_sdp * | sdp, |
janus_sdp_mtype | type, | ||
int | index, | ||
const char ** | codec ) |
Helper method to return the preferred audio or video codec in an SDP offer or answer, (where by preferred we mean the codecs we prefer ourselves, and not the m-line SDP order) as long as the m-line direction is not disabled (port=0 or direction=inactive) in the SDP.
[in] | sdp | The Janus SDP object to parse |
[in] | type | Whether we're looking at an audio or video codec |
[in] | index | The m-line to refer to (use -1 for the first m-line that matches) |
[out] | codec | The audio or video codec that was found |
Method to generate a janus_sdp answer to a provided janus_sdp offer. Notice that this doesn't address the individual m-lines: it will just create an empty response, create the corresponding m-lines, but leave them all "rejected". To answer each m-line you'll have to iterate on the offer m-lines and call janus_sdp_generate_answer_mline instead, e.g.:
janus_sdp *answer = janus_sdp_generate_answer(offer); GList *temp = offer->m_lines; while(temp) { janus_sdp_mline *m = (janus_sdp_mline *)temp->data; janus_sdp_generate_answer_mline(offer, answer, m, [..] JANUS_SDP_OA_DONE); temp = temp->next; }
to only accept the audio stream being offered, but as recvonly
, use Opus and reject both video and datachannels. Refer to the property names in the header file for a complete list of how you can drive the answer. The default, if not specified, is to accept everything as sendrecv
.
[in] | offer | The Janus SDP offer to respond to |
int janus_sdp_generate_answer_mline | ( | janus_sdp * | offer, |
janus_sdp * | answer, | ||
janus_sdp_mline * | offered, | ||
... ) |
Method to respond to a single m-line in an offer, using the same variable arguments janus_sdp_generate_offer_mline supports. The first argument MUST be JANUS_SDP_OA_MLINE, specifying the type of the media, e.g.:
janus_sdp_generate_answer_mline(offer, answer, offer_mline, JANUS_SDP_OA_MLINE, JANUS_SDP_AUDIO, JANUS_SDP_OA_CODEC, "opus", JANUS_SDP_OA_DIRECTION, JANUS_SDP_RECVONLY, JANUS_SDP_OA_DONE);
to respond to an offered m-line with recvonly audio and use Opus.
[in] | offer | The Janus SDP offer |
[in] | answer | The Janus SDP answer to add the new m-line to |
[in] | offered | The Janus SDP m-line from the offer to respond to |
janus_sdp * janus_sdp_generate_offer | ( | const char * | name, |
const char * | address, | ||
... ) |
Method to generate a janus_sdp offer, using variable arguments to dictate what to negotiate (e.g., in terms of media to offer, directions, etc.). Variable arguments are in the form of a sequence of name-value terminated by a JANUS_SDP_OA_DONE, e.g.:
janus_sdp *offer = janus_sdp_generate_offer("My session", "127.0.0.1", JANUS_SDP_OA_MLINE, JANUS_SDP_AUDIO, JANUS_SDP_OA_PT, 100, JANUS_SDP_OA_DIRECTION, JANUS_SDP_SENDONLY, JANUS_SDP_OA_CODEC, "opus", JANUS_SDP_OA_MLINE, JANUS_SDP_VIDEO, JANUS_SDP_OA_PT, 101, JANUS_SDP_OA_DIRECTION, JANUS_SDP_RECVONLY, JANUS_SDP_OA_CODEC, "vp8",
to offer a sendonly
Opus audio stream being offered with 100 as payload type, and a recvonly
VP8 video stream with 101 as payload type. Refer to the property names in the header file for a complete list of how you can drive the offer. Other media streams can be added, as long as you prefix/specify them with JANUS_SDP_OA_MLINE as done here. The default, if not specified, is to not offer anything, meaning it will be up to you to add m-lines subsequently.
[in] | name | The session name (if NULL, a default value will be set) |
[in] | address | The IP to set in o= and c= fields (if NULL, a default value will be set) |
int janus_sdp_generate_offer_mline | ( | janus_sdp * | offer, |
... ) |
Method to add a single m-line to a new offer, using the same variable arguments janus_sdp_generate_offer supports. This is useful whenever you need to create a new offer, but don't know in advance how many m-lines you'll need, or it would be hard to do programmatically in a single call to janus_sdp_generate_offer. The first argument MUST be JANUS_SDP_OA_MLINE, specifying the type of the media.
sendrecv
. [in] | offer | The Janus SDP offer to add the new m-line to |
const char * janus_sdp_get_codec_name | ( | janus_sdp * | sdp, |
int | index, | ||
int | pt ) |
Helper to get the codec name associated to a specific payload type in an m-line.
sdp | The Janus SDP instance to process |
index | The m-line to refer to (use -1 for the first m-line that matches) |
pt | The payload type to find |
int janus_sdp_get_codec_pt | ( | janus_sdp * | sdp, |
int | index, | ||
const char * | codec ) |
Helper to get the payload type associated to a specific codec in an m-line.
sdp | The Janus SDP instance to process |
index | The m-line to refer to (use -1 for the first m-line that matches) |
codec | The codec to find, as a string |
int janus_sdp_get_codec_pt_full | ( | janus_sdp * | sdp, |
int | index, | ||
const char * | codec, | ||
const char * | profile ) |
Helper to get the payload type associated to a specific codec, in an m-line, taking into account a codec profile as a hint as well.
sdp | The Janus SDP instance to process |
index | The m-line to refer to (use -1 for the first m-line that matches) |
codec | The codec to find, as a string |
profile | The codec profile to use as a hint, as a string |
const char * janus_sdp_get_codec_rtpmap | ( | const char * | codec | ) |
Helper to get the rtpmap associated to a specific codec.
codec | The codec name, as a string (e.g., "opus") |
const char * janus_sdp_get_fmtp | ( | janus_sdp * | sdp, |
int | index, | ||
int | pt ) |
Helper to get the fmtp associated to a specific payload type.
sdp | The Janus SDP instance to process |
index | The m-line to refer to (use -1 for the first m-line that matches) |
pt | The payload type to find |
int janus_sdp_get_opusred_pt | ( | janus_sdp * | sdp, |
int | index ) |
Helper to get the opus/red payload type from an SDP, if present.
sdp | The Janus SDP instance to process |
index | The m-line to refer to (use -1 for the first m-line that matches) |
const char * janus_sdp_get_rtpmap_codec | ( | const char * | rtpmap | ) |
Helper to get the codec name associated to a specific rtpmap.
rtpmap | The rtpmap, as a string (e.g., "VP8/90000") |
char * janus_sdp_get_video_profile | ( | janus_videocodec | codec, |
const char * | fmtp ) |
Helper to extract the H.264 or VP9 profile from a fmtp string.
codec | The video codec to refer to |
fmtp | The fmtp value to parse |
const char * janus_sdp_match_preferred_codec | ( | janus_sdp_mtype | type, |
char * | codec ) |
Helper method to match a codec to one of the preferred codecs.
[in] | type | The type of media to match |
[in] | codec | The codec to match |
const char * janus_sdp_mdirection_str | ( | janus_sdp_mdirection | direction | ) |
Helper method to get the string associated to a janus_sdp_mdirection value.
[in] | direction | The direction to stringify |
janus_sdp_mline * janus_sdp_mline_create | ( | janus_sdp_mtype | type, |
guint16 | port, | ||
const char * | proto, | ||
janus_sdp_mdirection | direction ) |
Helper method to quickly create a janus_sdp_mline instance.
type_str
property of the new m-line is created automatically depending on the provided type
attribute. If type
is JANUS_SDP_OTHER, though, type_str
will NOT we allocated, and will be up to the caller. [in] | type | Type of the media (audio/video/application) as a janus_sdp_mtype |
[in] | port | Port to advertise |
[in] | proto | Profile to advertise |
[in] | direction | Direction of the media as a janus_sdp_direction |
void janus_sdp_mline_destroy | ( | janus_sdp_mline * | mline | ) |
Helper method to free a janus_sdp_mline instance.
[in] | mline | The janus_sdp_mline instance to free |
janus_sdp_mline * janus_sdp_mline_find | ( | janus_sdp * | sdp, |
janus_sdp_mtype | type ) |
Helper method to get the janus_sdp_mline associated to a media type.
[in] | sdp | The Janus SDP object to search |
[in] | type | The type of media to search |
janus_sdp_mline * janus_sdp_mline_find_by_index | ( | janus_sdp * | sdp, |
int | index ) |
Helper method to get the janus_sdp_mline by its index.
[in] | sdp | The Janus SDP object to search |
[in] | index | The index of the m-line in the SDP |
int janus_sdp_mline_remove | ( | janus_sdp * | sdp, |
janus_sdp_mtype | type ) |
Helper method to remove the janus_sdp_mline associated to a media type from the SDP.
[in] | sdp | The Janus SDP object to modify |
[in] | type | The type of media to remove |
const char * janus_sdp_mtype_str | ( | janus_sdp_mtype | type | ) |
Helper method to get the string associated to a janus_sdp_mtype value.
[in] | type | The type to stringify |
janus_sdp * janus_sdp_new | ( | const char * | name, |
const char * | address ) |
Method to quickly generate a janus_sdp instance from a few selected fields.
o_addr
, s_name
and c_addr
properties: if you want to replace them, don't forget to g_free
the original pointers first. [in] | name | The session name (if NULL, a default value will be set) |
[in] | address | The IP to set in o= and c= fields (if NULL, a default value will be set) |
const char * janus_sdp_oa_type_str | ( | janus_sdp_oa_type | type | ) |
janus_sdp * janus_sdp_parse | ( | const char * | sdp, |
char * | error, | ||
size_t | errlen ) |
Method to parse an SDP string to a janus_sdp object.
[in] | sdp | The SDP string to parse |
[in,out] | error | Buffer to receive a reason for an error, if any |
[in] | errlen | The length of the error buffer |
janus_sdp_mdirection janus_sdp_parse_mdirection | ( | const char * | direction | ) |
Helper method to get a janus_sdp_mdirection from a string.
[in] | direction | The direction to parse as a string (e.g., "sendrecv") |
janus_sdp_mtype janus_sdp_parse_mtype | ( | const char * | type | ) |
Helper method to get a janus_sdp_mtype from a string.
[in] | type | The type to parse as a string (e.g., "audio") |
int janus_sdp_remove_payload_type | ( | janus_sdp * | sdp, |
int | index, | ||
int | pt ) |
Helper method to quickly remove all traces (m-line, rtpmap, fmtp, etc.) of a payload type.
[in] | sdp | The janus_sdp object to remove the payload type from |
[in] | index | The m-line to remove the payload type from (use -1 for the first m-line that matches) |
[in] | pt | The payload type to remove |
char * janus_sdp_write | ( | janus_sdp * | sdp | ) |
uint janus_audio_codecs = sizeof(janus_preferred_audio_codecs)/sizeof(*janus_preferred_audio_codecs) |
const char* janus_preferred_audio_codecs[] |
const char* janus_preferred_video_codecs[] |
uint janus_video_codecs = sizeof(janus_preferred_video_codecs)/sizeof(*janus_preferred_video_codecs) |