I'm trying to display an MJPEG video stream on my WPF C# application. The MJPEG decoder library I'm using is AForge.Video. So far I've managed to display video streamed over http with this:
using System.IO; using System.Windows; using System.Drawing; using System.Windows.Media.Imaging; using AForge.Video; namespace VideoControl { public partial class MainWindow : Window { MJPEGStream stream; public MainWindow() { InitializeComponent(); stream = new MJPEGStream("http://mylocaladdress:1220/video"); //Only works over http: and not ws:. stream.NewFrame += GetNewFrame; stream.Start(); } void GetNewFrame(object sender, NewFrameEventArgs e) { Bitmap bmp = (Bitmap)e.Frame.Clone(); Dispatcher.Invoke(() => {imgStream.Source = BitmapToImageSource(bmp);}); //Convert bitmap to image source first before applying to image. } BitmapImage BitmapToImageSource(Bitmap bitmap) { using (MemoryStream memory = new MemoryStream()) { bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp); memory.Position = 0; BitmapImage bitmapimage = new BitmapImage(); bitmapimage.BeginInit(); bitmapimage.StreamSource = memory; bitmapimage.CacheOption = BitmapCacheOption.OnLoad; bitmapimage.EndInit(); return bitmapimage; } } } } However, my goal is to get the video stream over websockets (ws) instead of http. How would i go about implementing the websocket (ws) protocol for this library? Simply replacing the http address with a websocket address doesn't work, since the library doesn't understand the websocket protocol.
I'm hosting my stream on a Node-RED server using this FFMPEG wrapper. The video stream shows up fine in browser, but not in C#. The earlier successful tests i conducted over http were streamed using streameye. Are there any alternative MJPEG decoders to AForge.Video that support websockets out of the box?