Hi,

We are working on application, which is based on IOS platform, to send Video 
and Audio to Wowza streaming server.
Video & Audio data are captured and encoded at IOS library APIs in H.264 & AAC 
format then encoded Video and Audio bitstream data are passed to Wowza 
streaming server using Darwin-injector class.

Please find below code snippet of implementation.
We are facing issue of Video stuck on Wowza streaming server when Video and 
Audio both are enabled for streaming but if Video is only enabled then issue 
isn't observed.
Please provide your input if miss any settings.

//Function to create Client session
{
           exitEventLoop = 0;

            //CREATE SCHEDULER
    BasicTaskScheduler* scheduler = BasicTaskScheduler::createNew();
    uenv = BasicUsageEnvironment::createNew(*scheduler);

    injector = DarwinInjector::createNew(*uenv, "live");

    struct in_addr dummyDestAddress;

    dummyDestAddress.s_addr = 0;

    //set Groupsock for video
    Groupsock rtpGroupsockVideo(*uenv, dummyDestAddress, 0, 0);
    Groupsock rtcpGroupsockVideo(*uenv, dummyDestAddress, 0, 0);

    //set Groupsock for audio
    Groupsock rtpGroupsockAudio(*uenv, dummyDestAddress, 0, 0);
    Groupsock rtcpGroupsockAudio(*uenv, dummyDestAddress, 0, 0);


     //set buffer size for High resolutin.
    OutPacketBuffer::maxSize = 600000;

    //For Video Sink
    rtpVideoSink = H264VideoRTPSink::createNew(*uenv, &rtpGroupsockVideo, 96, 
spsByte, [sps length], ppsByte, [pps length]);
    //For Audio Sink
    rtpAudioSink = MPEG4GenericRTPSink::createNew(*uenv, &rtpGroupsockAudio, 
97,44100,"audio","AAC-hbr", ConfigStr, 2);

    if( rtpVideoSink == NULL )
    {
        return;
    }

    if(rtpAudioSink == NULL )
    {

        return;
    }

    // Create (and start) a 'RTCP instance' for this RTP sink:
    const unsigned estimatedSessionBandwidthVideo = 4500; // in kbps; for RTCP 
b/w share
    const unsigned maxCNAMElen = 100;
    unsigned char CNAME[maxCNAMElen+1];
    gethostname((char*)CNAME, maxCNAMElen);
    CNAME[maxCNAMElen] = '\0'; // just in case

    const unsigned estimatedSessionBandwidthAudio = 160;
    //Crate RTSP client instance.
    RTCPInstance* videoRTCP =RTCPInstance::createNew(*uenv, 
&rtcpGroupsockVideo, estimatedSessionBandwidthVideo, CNAME, rtpVideoSink, NULL 
/* we're a server */);

    RTCPInstance* audioRTCP= RTCPInstance::createNew(*uenv, 
&rtcpGroupsockAudio, estimatedSessionBandwidthAudio, CNAME, rtpAudioSink,NULL 
/* we're a server */);

    // Note: This starts RTCP running automatically
    // Add audio and video stream to 'Darwin injector':
    injector->addStream(rtpVideoSink, videoRTCP);
    injector->addStream(rtpAudioSink, audioRTCP);

    //Try to connect with server with given ip ann username password.
    if(!injector->setDestination(ipaddress, appStreamName, "live","", port, 
username, password))
    {
            printf("Connection failed !!!!\n");

    }
    else
    {
            printf("Connection Done !!!!\n");

     }

    play();

    *uenv << "Play this stream (from the Darwin Streaming Server) using the 
URL:\n"
    << "\trtsp://" << "localhost" << "/" << "test.sdp" << "\n";

 env->taskScheduler().doEventLoop(&exitEventLoop); // does not return

  return 0; // only to prevent compiler warning    }

//Start playing to send data to server
void play()
{
            //VIDEO FRAMED SOURCE
    videoFramedSource = LiveSourceWithx264::createNew(*uenv);
    if(videoFileSource == NULL)
    {
        return;
    }
    FramedSource* videoES = videoFramedSource;
    videoSource = H264VideoStreamDiscreteFramer::createNew(*uenv, videoES);
    // Finally, start playing:
    rtpVideoSink->startPlaying(*videoSource, afterPlaying, rtpVideoSink);


            //AUDIO FRAMED SOURCE
    audioSource = AACFramedSource::createNew(*uenv);
    if (audioSource == NULL)
    {
        return;
    }
    // Finally, start playing:
    rtpAudioSink->startPlaying(*audioSource, afterPlaying, rtpAudioSink);
}

Here VideoFrameSource and AudioFrameSource class are derived class of 
FramedSource class.


Regards,
Rachit
*************************************************************************************************************************************************************
 eInfochips Business Disclaimer: This e-mail message and all attachments 
transmitted with it are intended solely for the use of the addressee and may 
contain legally privileged and confidential information. If the reader of this 
message is not the intended recipient, or an employee or agent responsible for 
delivering this message to the intended recipient, you are hereby notified that 
any dissemination, distribution, copying, or other use of this message or its 
attachments is strictly prohibited. If you have received this message in error, 
please notify the sender immediately by replying to this message and please 
delete it from your computer. Any views expressed in this message are those of 
the individual sender unless otherwise stated. Company has taken enough 
precautions to prevent the spread of viruses. However the company accepts no 
liability for any damage caused by any virus transmitted by this email. 
*************************************************************************************************************************************************************
_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to