Example #1
0
int main(int argv, char **argc)
{
    int ret;
    int mode = 0;
    if ( argv >= 2)
    {
        mode = atoi(argc[1]);
    }
    unsigned short port = 9999;
    av_register_all();
    RTSPServer x(port);
    cout << "Listen On Port: " << port << '\n';
   // FileDemux filedemux("h264_320_240_25.vob");
    FileDemux *filedemux;
    if ( !mode )
    {
        filedemux = new FileDemux("mpeg4_352_288_25.vob");
        cout << "MEPG4+Audio\n";
    }
    else
    {
        filedemux = new FileDemux("h264_320_240_25.vob");
        cout << "H.264+Audio\n";
    }
    filedemux->OpenStream();
    int videoindex = -1;
    int audioindex = -1;
    if ( filedemux->GetStreamNums(FileDemux::STREAM_VIDEO) > 0 )
    {
        videoindex = filedemux->GetStreamIndex(0, FileDemux::STREAM_VIDEO);
    }
    if ( filedemux->GetStreamNums(FileDemux::STREAM_AUDIO) > 0 )
    {
        audioindex = filedemux->GetStreamIndex(0, FileDemux::STREAM_AUDIO);
    }
    cout << "videoindex: " << videoindex << " " << "audioindex: " << audioindex << '\n';
    assert(videoindex >= 0);
    assert(audioindex >= 0);
    DemuxSource *videoSource = filedemux->GetDemuxSourceByStreamIndex(videoindex);
    DemuxSource *audioSource = filedemux->GetDemuxSourceByStreamIndex(audioindex);

    ServerMediaSubSession *demuxmpegaudioSession = InitMediaSubSession(audioSource);
    ServerMediaSubSession *demuxH264Session = InitMediaSubSession(videoSource);

    ret = demuxmpegaudioSession->InitRTPSession();
    CHECK_RET(ret);
    ret = demuxH264Session->InitRTPSession();
    CHECK_RET(ret);

    MP3MediaSubSession *mp3Session = new MP3MediaSubSession("test.mp3", 14, 6666);
    MP3MediaSubSession *mp3Session2 = new MP3MediaSubSession("test.mp3", 14, 6686);
    //G729DMediaSubSession *g729dSession = new G729DMediaSubSession("g729d.enc", 100, 6686);
    ret = mp3Session->InitRTPSession();
    CHECK_RET(ret);
    ret = mp3Session2->InitRTPSession();
    //ret = g729dSession->InitRTPSession();
    CHECK_RET(ret);

    MPEG4MediaSubSession *mpeg4Session = new MPEG4MediaSubSession("wwe.m4e", 96, 6668);
    H264MediaSubSession  *h264session = new H264MediaSubSession("H264.mpg", 96, 6688);
    ret = mpeg4Session->InitRTPSession();
    CHECK_RET(ret);
    ret = h264session->InitRTPSession();
    CHECK_RET(ret);

    string stremName = "test";
    string stremName2 = "voip";
    string demuxstreamName = "demux";

    ServerMediaSession *mediasession = new ServerMediaSession(stremName);
    ServerMediaSession *mediasession2 = new ServerMediaSession(stremName2);
    ServerMediaSession *demuxsession = new ServerMediaSession(demuxstreamName);

    string localIP = "192.168.88.245";
    vector<string> ipaddr;
    GetAllLocalIP(ipaddr);
    if ( ipaddr.size() > 0 )
    {
        localIP = ipaddr[0];
    }
    x.SetLoaclIPAddr(localIP);
    mediasession->SetLoaclAddr(localIP);
    mediasession2->SetLoaclAddr(localIP);
    demuxsession->SetLoaclAddr(localIP);

    mediasession->AddSubsession(mpeg4Session);
    mediasession->AddSubsession(mp3Session);

    mediasession2->AddSubsession(h264session);
    mediasession2->AddSubsession(mp3Session2);

    demuxsession->AddSubsession(demuxmpegaudioSession);
    demuxsession->AddSubsession(demuxH264Session);


    mediasession->AddDestinationAddr(string("239.168.168.168"));
    mediasession2->AddDestinationAddr(string("239.168.168.169"));
    demuxsession->AddDestinationAddr(string("239.168.168.188"));

    x.AddMediaSession(stremName, mediasession);
    x.AddMediaSession(stremName2, mediasession2);
    x.AddMediaSession(demuxstreamName, demuxsession);
    x.Start();
    sleep(3000);
    x.Stop();
    filedemux->Close();
    return 0;
}