Beispiel #1
0
        /// <summary>
        /// Each client connection will be served by this thread.
        /// </summary>
        /// <param name="client"></param>
        private void ClientThread(object client)
        {
            Socket socket = ( Socket )client;

            System.Diagnostics.Debug.WriteLine(string.Format("New client from {0}", socket.RemoteEndPoint.ToString()));

            lock (_Clients)
                _Clients.Add(socket);

            try {
                using (MjpegWriter wr = new MjpegWriter(new NetworkStream(socket, true))) {
                    // Writes the response header to the client.
                    wr.WriteHeader();

                    // Streams the images from the source to the client.
                    foreach (var imgStream in Screen.Streams(this.ImagesSource))
                    {
                        if (this.Interval > 0)
                        {
                            Thread.Sleep(this.Interval);
                        }

                        wr.Write(imgStream);
                    }
                }
            } catch { } finally {
                lock (_Clients)
                    _Clients.Remove(socket);
            }
        }
Beispiel #2
0
        public void Init(Camera c, int w, int h, float aviFrameRate, int gameFrameRate, int jpgQuality)
        {
            if (writer != null)
            {
                writer.Close();
                writer = null;
            }

            MemoryStream m = new MemoryStream();

            gFrameRate = gameFrameRate;
            fps        = aviFrameRate;

            if (c == null)
            {
                cam = Camera.main;
            }
            else
            {
                cam = c;
            }

            rt      = new RenderTexture(w, h, 24);
            tex     = new Texture2D(rt.width, rt.height);
            quality = jpgQuality;

            writer = new MjpegWriter(m, rt.width, rt.height, fps);
        }
        /// <summary>
        /// Each client connection will be served by this thread.
        /// </summary>
        /// <param name="client"></param>
        private void ClientThread(object client)
        {
            System.Net.Sockets.Socket socket = (System.Net.Sockets.Socket)client;
            System.Diagnostics.Debug.WriteLine(string.Format("New client from {0}", socket.RemoteEndPoint.ToString()));

            lock (_Clients)
            {
                _Clients.Add(socket);
            }

            try
            {
                using (MjpegWriter wr = new MjpegWriter(new System.Net.Sockets.NetworkStream(socket, true)))
                {
                    // Writes the response header to the client.
                    wr.WriteHeader();

                    // Streams the images from the source to the client.


                    //foreach (System.IO.MemoryStream imgStream in this.m_imageSource.Streams)
                    //{
                    //    if (this.Interval > 0)
                    //        System.Threading.Thread.Sleep(this.Interval);

                    //    wr.Write(imgStream);
                    //} // Next imgStream


                    foreach (byte[] buffer in this.m_imageSource.Buffers)
                    {
                        if (this.Interval > 0)
                        {
                            System.Threading.Thread.Sleep(this.Interval);
                        }

                        wr.WriteWithHeader(buffer);

#if false
                        byte[] compressed = Compress(buffer);
                        wr.WriteWithHeader(compressed);
#endif
                    } // Next buffer
                }     // End Using wr
            }
            catch (System.Exception ex)
            {
                System.Console.WriteLine(ex.Message);
            }
            finally
            {
                lock (_Clients)
                    _Clients.Remove(socket);
            }
        } // End Sub ClientThread
Beispiel #4
0
        /// <summary>
        /// Starts a thread to handle clients.
        /// </summary>
        /// <param name="client">Client socket.</param>
        private void StartClientThread(object client)
        {
            var clientSocket = (Socket)client;

            clientSocket.SendTimeout = 10000;

            Clients.Add(clientSocket);

            try
            {
                using var mjpegWriter = new MjpegWriter(new NetworkStream(clientSocket, true));
                // Writes the response header to the client.
                mjpegWriter.WriteHeaders();

                // Streams the images from the source to the client.
                foreach (var imgStream in _images.GetMjpegStream())
                {
                    Thread.Sleep(Delay);

                    mjpegWriter.WriteImage(imgStream);
                }
            }
            catch (SocketException)
            {
            }
            catch (IOException)
            {
            }
            catch (Exception)
            {
            }
            finally
            {
                try
                {
                    clientSocket.Shutdown(SocketShutdown.Both);
                }
                catch (ObjectDisposedException)
                {
                    clientSocket.Close();
                }

                lock (Clients)
                {
                    Clients.Remove(clientSocket);
                }
            }
        }
Beispiel #5
0
        private void StartH264Encoder()
        {
            int fps = 15;
            //Bitmap firstFrame = new Bitmap(1280, 720);//set the values programmatically

            // AVIに出力するライターを作成(create AVI writer)
            var aviPath = destFile;
            var aviFile = System.IO.File.OpenWrite(aviPath);

            Debug.WriteLine(aviPath);
            //writer = new H264Writer(aviFile, firstFrame.Width, firstFrame.Height, fps);
            writer = new MjpegWriter(aviFile, 1280, 720, fps);

            // H264エンコーダーを作成(create H264 encoder)
            //encoder = new OpenH264Lib.Encoder("openh264-2.0.0-win32.dll");

            // 1フレームエンコードするごとにライターに書き込み(write frame data for each frame encoded)
            OpenH264Lib.Encoder.OnEncodeCallback onEncode = (data, length, frameType) =>
            {
                var keyFrame = (frameType == OpenH264Lib.Encoder.FrameType.IDR) || (frameType == OpenH264Lib.Encoder.FrameType.I);

                //arrayList.Add(data);
                int arrcount        = arrayList.Count;
                int necessary_count = fps * array_time_length;
                if (arrcount > necessary_count)
                {
                    arrayList.RemoveRange(0, arrcount - necessary_count);
                }
                //writer.AddImage(data, keyFrame);
                //Console.WriteLine("Encode {0} frametype", frameType);
            };

            // H264エンコーダーの設定(encoder setup)
            int   bps = 5000 * 1000;       // target bitrate. 5Mbps.
            float keyFrameInterval = 2.0f; // insert key frame interval. unit is second.

            //encoder.Setup(firstFrame.Width, firstFrame.Height, bps, fps, keyFrameInterval, onEncode);

            // 1フレームごとにエンコード実施(do encode)

            //encoder.Encode(firstFrame);
            writer.AddImage(cameraMan.GetRawBytes());

            //writer.Close();
            //MessageBox.Show(string.Format("{0}\n is created.", aviPath));
        }
Beispiel #6
0
    private void ServerMain()
    {
        Socket Server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        Server.Bind(new IPEndPoint(IPAddress.Any, portNumber));
        Server.Listen(1);

        while (true)
        {
            Socket socket = Server.Accept();

            using (MjpegWriter wr = new MjpegWriter(new NetworkStream(socket, true))) {
                wr.WriteHeader();
                while (socket.Connected)
                {
                    if (newFrame)
                    {
                        //Debug.Log($"   new frame read");
                        byte[] bytes;
                        bool   gotFrame = false;
                        lock (lockObject) {
                            bytes    = frameBytes.ToArray();
                            newFrame = false;
                            gotFrame = true;
                            //Debug.Log($"   got frame");
                        }

                        if (gotFrame)
                        {
                            try {
                                wr.Write(bytes);
                                //Debug.Log($"   frame written");
                            }
                            catch {
                            }
                        }
                    }
                }
            }
            Debug.Log($"socket no longer connected");
        }
    }
Beispiel #7
0
 public byte[] getAVIByteArray()
 {
     byte[] b = writer.Close();
     writer = null;
     return(b);
 }