Ejemplo n.º 1
0
 private DummySink(UsageEnvironment env, MediaSubsession subsession, string streamId) :
     base(env)
 {
     fSubsession    = subsession;
     fStreamId      = streamId;
     fReceiveBuffer = new string('\0', RECEIVE_BUFFER_SIZE);
 }
Ejemplo n.º 2
0
        private void subsessionByeHandler(IntPtr clientData)
        {
            var subsession = new MediaSubsession(clientData);
            var rtspClient = new RTSPClient(subsession.miscPtr);

            Console.Error.WriteLine(rtspClient + "Received RTCP \"BYE\" on \"" + subsession + "\" subsession");

            // Now act as if the subsession had closed:
            SubsessionAfterPlaying(subsession.Native.Native);
        }
Ejemplo n.º 3
0
        private void SubsessionAfterPlaying(IntPtr clientData)
        {
            var subsession = new MediaSubsession(clientData);
            var rtspClient = new RTSPClient(subsession.miscPtr);

            // Begin by closing this subsession's stream:
            Medium.Close(subsession.sink);
            subsession.sink = null;

            // Next, check whether *all* subsessions' streams have now been closed:
            var session = subsession.ParentSession();
            var iter    = new MediaSubsessionIterator(session);

            while ((subsession = iter.Next()) != null)
            {
                if (subsession.sink != null)
                {
                    return;                          // this subsession is still active
                }
            }

            // All subsessions' streams have now been closed, so shutdown the client:
            ShutdownStream(rtspClient);
        }
Ejemplo n.º 4
0
        private void subsessionByeHandler(IntPtr clientData)
        {
            var subsession = new MediaSubsession (clientData);
            var rtspClient = new RTSPClient (subsession.miscPtr);

            Console.Error.WriteLine (rtspClient + "Received RTCP \"BYE\" on \"" + subsession + "\" subsession");

            // Now act as if the subsession had closed:
            SubsessionAfterPlaying (subsession.Native.Native);
        }
Ejemplo n.º 5
0
        private void SubsessionAfterPlaying(IntPtr clientData)
        {
            var subsession = new MediaSubsession (clientData);
            var rtspClient = new RTSPClient (subsession.miscPtr);

            // Begin by closing this subsession's stream:
            Medium.Close (subsession.sink);
            subsession.sink = null;

            // Next, check whether *all* subsessions' streams have now been closed:
            var session = subsession.ParentSession ();
            var iter = new MediaSubsessionIterator (session);
            while ((subsession = iter.Next ()) != null) {
                if (subsession.sink != null) return; // this subsession is still active
            }

            // All subsessions' streams have now been closed, so shutdown the client:
            ShutdownStream (rtspClient);
        }
Ejemplo n.º 6
0
 public static MediaSink CreateNew(UsageEnvironment env, MediaSubsession subsession, string streamId)
 {
     return(new DummySink(env, subsession, streamId));
 }