Example #1
0
 void timer_Tick(object sender, EventArgs e)
 {
     currentImage = receiver.GetDevice("192.168.168.55").LatestImage;
     if (currentImage != previousImage)
     {
         fpsCalc++;
         previousImage = currentImage;
         if (pb.Image != null)
         {
             pb.Image.Dispose();
         }
         MemoryStream ms  = new MemoryStream(currentImage);
         Image        img = Bitmap.FromStream(ms);
         lblVideoData.Text = img.Width + "x" + img.Height;
         pb.Image          = img;
     }
     if (nextFpsSecond < DateTime.Now)
     {
         lblFrameRate.Text = fpsCalc.ToString();
         fpsCalc           = 0;
         nextFpsSecond     = DateTime.Now.AddSeconds(1);
     }
     // Unfortunately, I could not get audio to play using the NAudio library, so this test application only plays back video.
 }
Example #2
0
        public override void handleGETRequest(HttpProcessor p)
        {
            try
            {
                string requestedPage = Uri.UnescapeDataString(p.request_url.AbsolutePath.TrimStart('/'));

                string[] requestedPath   = p.request_url.Segments;
                string   requestedDevice = requestedPath[1].TrimStart('/').TrimEnd('/');
                string   requestedMedia  = requestedPath[2].TrimStart('/').TrimEnd('/');

                if (requestedMedia == "image.jpg")
                {
                    byte[] latestImage = receiver.GetDevice(requestedDevice).LatestImage;
                    if (latestImage == null)
                    {
                        latestImage = new byte[0];
                    }
                    p.writeSuccess("image/jpeg", latestImage.Length);
                    p.outputStream.Flush();
                    p.rawOutputStream.Write(latestImage, 0, latestImage.Length);
                }
                else if (requestedMedia.EndsWith("image.mjpg"))
                {
                    p.tcpClient.ReceiveBufferSize = 4;
                    p.tcpClient.SendBufferSize    = 4;
                    Console.WriteLine("Beginning mjpg stream");
                    p.writeSuccess("multipart/x-mixed-replace;boundary=hdmiextender");
                    byte[] previousImage = null;
                    byte[] currentImage;
                    while (!this.stopRequested)
                    {
                        try
                        {
                            currentImage = receiver.GetDevice(requestedDevice).LatestImage;
                            if (currentImage == previousImage)
                            {
                                Thread.Sleep(1);
                            }
                            else
                            {
                                previousImage = currentImage;

                                p.outputStream.WriteLine("--hdmiextender");
                                p.outputStream.WriteLine("Content-Type: image/jpeg");
                                p.outputStream.WriteLine("Content-Length: " + currentImage.Length);
                                p.outputStream.WriteLine();
                                p.outputStream.Flush();
                                p.rawOutputStream.Write(currentImage, 0, currentImage.Length);
                                p.rawOutputStream.Flush();
                                p.outputStream.WriteLine();
                                p.outputStream.Flush();
                            }
                        }
                        catch (Exception ex)
                        {
                            if (!p.isOrdinaryDisconnectException(ex))
                            {
                                Logger.Debug(ex);
                            }
                            break;
                        }
                    }

                    Console.WriteLine("Ending mjpg stream");
                }
                else if (requestedMedia == "audio.wav")
                {
                    Console.WriteLine("Beginning audio stream");
                    int?audioRegistrationId = null;
                    try
                    {
                        ConcurrentQueue <byte[]> audioData = new ConcurrentQueue <byte[]>();
                        audioRegistrationId = receiver.GetDevice(requestedDevice).RegisterAudioListener(audioData);

                        p.writeSuccess("audio/x-wav");
                        p.outputStream.Flush();
                        byte[] buffer;
                        while (!this.stopRequested)
                        {
                            while (audioData.TryDequeue(out buffer))
                            {
                                p.rawOutputStream.Write(buffer, 0, buffer.Length);
                            }
                            Thread.Sleep(1);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (!p.isOrdinaryDisconnectException(ex))
                        {
                            Logger.Debug(ex);
                        }
                    }
                    finally
                    {
                        Console.WriteLine("Ending audio stream");
                        if (audioRegistrationId != null)
                        {
                            receiver.GetDevice(requestedDevice).UnregisterAudioListener(audioRegistrationId.Value);
                        }
                    }
                }
                else if (requestedPage == "raw.html")
                {
                    p.writeSuccess();
                    p.outputStream.Write(@"<html>
<head>
	<title>Raw MJPEG view</title>
<style>
body
{
	background-color: Black;
}
</style>
</head>
<body>
<img src=""image.mjpg"" />
</body>
</html>");
                }
            }
            catch (Exception ex)
            {
                if (!p.isOrdinaryDisconnectException(ex))
                {
                    Logger.Debug(ex);
                }
            }
        }