Ejemplo n.º 1
0
        //Tear down button is clicked
        public void Teardown(object sender, EventArgs e)
        {
            //Determine which view to control
            view = (View)((Button)sender).FindForm();

            //send the request message to the server
            rtspModel.Send(new RtspRequest
            {
                RequestType = RtspRequest.RtspRequestType.TEARDOWN,
                FileName    = VideoName,
                SessionID   = sessionNum
            });

            //wait for the reply from the server
            try
            {
                var response = rtspModel.Listen();
                sessionNum = response.Session;

                UpdateServerBox(response.ToString() + Environment.NewLine);
                UpdateClientBox("New RTSP State: TEARDOWN" + Environment.NewLine);
                //reset sequence number
                rtspModel.CSeqNum = 1;

                //disable & enable appropriate buttons
                view.EnableButton(View.Buttons.Setup);
                view.DisableButton(View.Buttons.Play);
                view.DisableButton(View.Buttons.Pause);
                view.DisableButton(View.Buttons.Teardowm);
            }
            catch (ArgumentException ex)
            {
                UpdateServerBox($"Error: {ex.Message}{Environment.NewLine}");
            }
        }
Ejemplo n.º 2
0
        //communications thread for UDP socket to receive video frames
        public void Communications()
        {
            //used to receive video frames from server
            rtpModel = new RtpModel(this.ServerIP, this.ServerPort, ClientPort);

            while (true)
            {
                //converts the video frame into an image
                var currentVideoFrame = rtpModel.GetImage(ref videoFrame);

                //break out of loop if video is over
                if (currentVideoFrame == null)
                {
                    view.DisableButton(View.Buttons.Pause);
                    break;
                }

                //store the video header
                var videoFrameHeader = new byte[12];
                Buffer.BlockCopy(videoFrame, 0, videoFrameHeader, 0, videoFrameHeader.Length);

                //if packet report is checked, display packet report
                if (view.IsPacketReportChecked)
                {
                    //get sequence number
                    var sequenceNum = new byte[2];
                    Buffer.BlockCopy(videoFrameHeader, 2, sequenceNum, 0, sequenceNum.Length);
                    Array.Reverse(sequenceNum);
                    BitArray sequenceNumBits = new BitArray(sequenceNum);
                    int      seqNumBitsStr   = GetIntFromBitArray(sequenceNumBits);

                    //get time stamp
                    var timeStamp = new byte[4];
                    Buffer.BlockCopy(videoFrameHeader, 4, timeStamp, 0, timeStamp.Length);
                    Array.Reverse(timeStamp);
                    var timeStampBits    = new BitArray(timeStamp);
                    var timeStampBitsStr = GetIntFromBitArray(timeStampBits);

                    //get payload type
                    var type = new byte[1];
                    Buffer.BlockCopy(videoFrameHeader, 1, type, 0, type.Length);
                    var typeBits = new BitArray(type);
                    typeBits.Set(7, false);
                    var timeBitsStr = GetIntFromBitArray(typeBits);

                    this.UpdateClientBox(Environment.NewLine + "Got RTP packet with SeqNum #" + seqNumBitsStr
                                         + ", Timestamp: " + timeStampBitsStr + " of type " + timeBitsStr + Environment.NewLine);
                }

                //display the image
                view.SetImageBox(currentVideoFrame);
            }
        }
Ejemplo n.º 3
0
        //Play button is clicked
        public void Play(object sender, EventArgs e)
        {
            //Determine which view to control
            view = (View)((Button)sender).FindForm();

            //send the request message to the server
            rtspModel.Send(new RtspRequest
            {
                RequestType = RtspRequest.RtspRequestType.PLAY,
                FileName    = VideoName,
                SessionID   = sessionNum
            });

            //wait for the reply from the server
            try
            {
                var response = rtspModel.Listen();

                UpdateServerBox(response.ToString() + Environment.NewLine);
                //Start UDP video thread to start receiving images
                if (videoTimerThread == null)
                {
                    this.videoTimerThread         = new Thread(Communications);
                    videoTimerThread.IsBackground = true; //to stop all threads with application is terminated
                    this.videoTimerThread.Start();
                }
                UpdateClientBox("New RTSP State: PLAYING" + Environment.NewLine);
                //disable & enable appropriate buttons
                view.DisableButton(View.Buttons.Play);
                view.EnableButton(View.Buttons.Pause);
                view.EnableButton(View.Buttons.Teardowm);
            }
            catch (ArgumentException ex)
            {
                UpdateServerBox($"Error: {ex.Message}{Environment.NewLine}");
            }
        }