示例#1
0
        public override void RunThread()
        {
            while (mRun)
            {
                Byte[] receiveBytes = mUdpClient.Receive(ref mIPEndPoint);
                DebugFunctions.PrintChars("receive bytes:" + receiveBytes.Length.ToString() + "\n");
                NewData(this, new DataEventArgs(ref receiveBytes));

                using (var fileStream = new FileStream("data.bin", FileMode.Append, FileAccess.Write, FileShare.None))
                {
                    using (var bw = new BinaryWriter(fileStream))
                    {
                        Byte[] len = BitConverter.GetBytes(receiveBytes.Length);
                        bw.Write(len, 0, 2);
                        bw.Write(receiveBytes, 0, receiveBytes.Length);
                    }
                }

                /*
                 * int fragment_type = receiveBytes[12] & 0x1f;
                 * int nal_type = receiveBytes[13] & 0x1f;
                 * int start_bit = Convert.ToInt32((receiveBytes[13] & 0x80) != 0);
                 * int end_bit = Convert.ToInt32((receiveBytes[13] & 0x20) != 0);
                 */
            }
        }
示例#2
0
        public void ReceivingData()
        {
            while (!stopEvent.WaitOne(0, true))
            {
                if (mServerStream.DataAvailable)
                {
                    byte[] readBuffer = new byte[ReceiveBufferSize];
                    int    numberOfBytesRead = 0, pos = 0;

                    if (parsing_mode == ParsingMode.HEADER)
                    {
                        StringBuilder complegeMessage = new StringBuilder();
                        while (mServerStream.DataAvailable)
                        {
                            numberOfBytesRead = mServerStream.Read(readBuffer, 0, readBuffer.Length);
                            complegeMessage.Append(Encoding.ASCII.GetString(readBuffer, 0, numberOfBytesRead));
                        }
                        pos = parseData(complegeMessage.ToString());

                        DebugFunctions.PrintChars(complegeMessage.ToString());

                        if (pos == complegeMessage.Length)
                        {
                            SetCommand(current_command);
                        }

                        if (current_command == RtspCommand.PLAY)
                        {
                            if (CommandIsDone(current_command))
                            {
                                nsvideo.SetDecodeParameter(sprop);
                                nsvideo.Start();
                                parsing_mode = ParsingMode.DATA;
                            }
                        }
                    }

                    if (parsing_mode == ParsingMode.DATA)
                    {
                        while (mServerStream.DataAvailable)
                        {
                            numberOfBytesRead = mServerStream.Read(readBuffer, 0, readBuffer.Length);
                            DebugFunctions.PrintChars("receieve " + numberOfBytesRead.ToString() + "\n");

                            /*using (var fileStream = new FileStream("data.bin", FileMode.Append, FileAccess.Write, FileShare.None))
                             * {
                             *  using (var bw = new BinaryWriter(fileStream))
                             *  {
                             *      bw.Write(readBuffer, 0, numberOfBytesRead);
                             *  }
                             * }*/
                            data.AddRange(readBuffer.SubArray(0, numberOfBytesRead));
                            if (data.Count > 4)
                            {
                                RTSPInterleavedFrame iFrame = new RTSPInterleavedFrame(data.GetRange(0, 4).ToArray());

                                if (data.Count >= (iFrame.Length + 4))
                                {
                                    nsvideo.PushMediaPacket(data.GetRange(4, iFrame.Length).ToArray());
                                    data.RemoveRange(0, iFrame.Length + 4);
                                }
                            }
                        }
                    }
                } //end of if(mServerStream.DataAvailable) statement
            }     //end of while(!stopEvent.WaitOne(0, true)) statement
        }