This source file includes following definitions.
- sdp_generator
#include "sdp_generator.h"
#include "debug.h"
int sdp_generator(PNC_CallbackData *data, char *ip_dest, char *sdp_fmt)
{
GF_SceneEngine *codec;
GF_ESD *esd = NULL;
u32 size,size64;
char *buffer;
char buf64[5000];
FILE *fp;
int ret;
char temp[5000];
u16 port;
u32 socket_type;
gf_sk_get_local_info(data->chan->rtp, &port, &socket_type);
fp = gf_fopen("broadcaster.sdp", "w+");
if(fp == NULL) {
fprintf(stderr, "Cannot open SDP file broadcaster.sdp\n");
exit(1);
}
ret = gf_fwrite("v=0\n", 1, 4, fp);
sprintf(temp, "o=GpacBroadcaster 3326096807 1117107880000 IN IP%d %s\n", gf_net_is_ipv6(ip_dest) ? 6 : 4, ip_dest);
ret = gf_fwrite(temp, 1, strlen(temp), fp);
ret = gf_fwrite("s=MPEG4Broadcaster\n", 1, 19, fp);
sprintf(temp, "c=IN IP%d %s\n", gf_net_is_ipv6(ip_dest) ? 6 : 4, ip_dest);
ret = gf_fwrite(temp, 1, strlen(temp), fp);
ret = gf_fwrite("t=0 0\n", 1, 6, fp);
codec = (GF_SceneEngine *) data->codec;
if (codec) {
buffer = NULL;
size = 0;
gf_odf_desc_write((GF_Descriptor *) codec->ctx->root_od, &buffer, &size);
esd = gf_list_get(codec->ctx->root_od->ESDescriptors, 0);
size64 = gf_base64_encode((unsigned char *) buffer, size, (unsigned char *) buf64, 2000);
buf64[size64] = 0;
free(buffer);
sprintf(temp, "a=mpeg4-iod:\"data:application/mpeg4-iod;base64,%s\"\n", buf64);
ret = gf_fwrite(temp, 1, strlen(temp), fp);
}
sprintf(temp, "m=application %d RTP/AVP 96\n", port);
ret = gf_fwrite(temp, 1, strlen(temp), fp);
ret = gf_fwrite("a=rtpmap:96 mpeg4-generic/1000\n", 1, 31, fp);
if (esd) {
sprintf(temp, "a=mpeg4-esid:%d\n", esd->ESID);
ret = gf_fwrite(temp, 1, strlen(temp), fp);
}
sprintf(temp, "%s\n", sdp_fmt);
ret = gf_fwrite(temp, 1, strlen(temp), fp);
fflush(fp);
gf_fclose(fp);
dprintf(DEBUG_sdp_generator, "SDP file generated in broadcaster.sdp\n");
return GF_OK;
}