static int amr_init(Track *track) { char *config = NULL; char *sdp_value; /*get config content if has*/ if(track->properties.extradata_len) { config = extradata2config(&track->properties); if (!config) return ERR_PARSE; sdp_value = g_strdup_printf("octet-align=1; config=%s", config); g_free(config); } else { sdp_value = g_strdup_printf("octet-align=1"); } track_add_sdp_field(track, fmtp, sdp_value); track->properties.clock_rate = 8000; track_add_sdp_field(track, rtpmap, g_strdup_printf ("AMR/%d", track->properties.clock_rate)); return ERR_NOERROR; }
static int h263_init(Track *track) { track_add_sdp_field(track, rtpmap, g_strdup_printf ("H263-1998/%d", track->properties.clock_rate)); return ERR_NOERROR; }
static int h264_init(Track *track) { h264_priv *priv; char *sprop = NULL; int err = ERR_ALLOC; if (track->properties.extradata_len == 0) { fnc_log(FNC_LOG_WARN, "[h264] No Extradata, unsupported\n"); return ERR_UNSUPPORTED_PT; } priv = g_slice_new(h264_priv); if(track->properties.extradata[0] == 1) { if (track->properties.extradata_len < 7) goto err_alloc; priv->nal_length_size = (track->properties.extradata[4]&0x03)+1; priv->is_avc = 1; sprop = encode_avc1_header(track->properties.extradata, track->properties.extradata_len, FU_A); if (sprop == NULL) goto err_alloc; } else { sprop = encode_header(track->properties.extradata, track->properties.extradata_len, FU_A); if (sprop == NULL) goto err_alloc; } track_add_sdp_field(track, fmtp, sprop); track_add_sdp_field(track, rtpmap, g_strdup_printf ("H264/%d",track->properties.clock_rate)); track->private_data = priv; return ERR_NOERROR; err_alloc: g_slice_free(h264_priv, priv); return err; }
static int jma_init(Track *track) { gchar *rtpmap_str, *sdp_rtpmap; struct codec_t *code; gint pt; code = (struct codec_t*)track->properties.extradata; printf("jma_init()..\n"); if (code->len3) { rtpmap_str = (gchar*)&code->data[0] + code->len1 + code->len2; sscanf(rtpmap_str, "%d", &pt); if (pt == PCMA_PT || pt == PCMU_PT) track->properties.payload_type = pt; rtpmap_str = strstr(rtpmap_str, " "); /* skip pt */ if (rtpmap_str) { ++rtpmap_str; sdp_rtpmap = g_strdup(rtpmap_str); } else sdp_rtpmap = g_strdup("PCMX/8000/1"); strcpy(track->properties.encoding_name, "PCMX"); track_add_sdp_field(track, rtpmap, sdp_rtpmap); } else { strcpy(track->properties.encoding_name, "PCMA"); sdp_rtpmap = g_strdup_printf("%s/%d/%d", track->properties.encoding_name, 8000 /* sample_rate */, 1 /* audio channels */); track->properties.payload_type = PCMA_PT; track_add_sdp_field(track, rtpmap, sdp_rtpmap); } return 0; }
static int simple_init(Track *track) { char encodingParamsPart[21]; memset(encodingParamsPart, 0, sizeof(encodingParamsPart)); if(track->properties.media_type == MP_audio){ if(track->properties.audio_channels > 1){ sprintf(encodingParamsPart, "/%d", track->properties.audio_channels); } } track_add_sdp_field(track, rtpmap, g_strdup_printf ("%s/%d%s", track->properties.encoding_name, track->properties.clock_rate, encodingParamsPart)); return ERR_NOERROR; }