root/applications/testapps/broadcaster/sdp_generator.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. 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;
}

/* [<][>][^][v][top][bottom][index][help] */