2017-03-17 94 views
0

我正在使用C#(UWP,Windows 10 IoT Core)将视频流(流入网络摄像头)并将其流式传输到桌面。尽管我发现一些使用UWP在Java(用于Rasp)和客户端执行服务器端实现的项目中,我找不到任何有关C#中服务器端编程的项目。使用Raspberry Pi和C的实时视频流#

另外,是否真的有可能使用C#进行实时流式服务器端编程,因为此链接并非如此。 View the Microsoft Link

任何帮助将深表谢意。

Regards, T.S.

+0

你有没有检查[这个项目](https://github.com/davetoland/VideoSocketServer)? –

+0

谢谢,这会做 –

回答

0

即使我发现了一些项目在做Java的服务器端实现(锉)和客户端使用UWP我找不到关于C#服务器端编程的任何项目。

还有另一个项目我已经编码和测试成功。如果它可以帮助你,你可以有一个参考。

在MyVideoServer应用程序中,重要的是获取视频的相机ID和预览帧。 previewFrame = await MyMediaCapture.GetPreviewFrameAsync(videoFrame);然后通过streamSocketClient将视频流发送到客户端。 await streamSocketClient.sendBuffer(buffer);

public MainPage() 
    { 
     this.InitializeComponent(); 
     InitializeCameraAsync(); 
     InitSocket(); 
    } 

    MediaCapture MyMediaCapture; 
    VideoFrame videoFrame; 
    VideoFrame previewFrame; 
    IBuffer buffer; 

    DispatcherTimer timer; 
    StreamSocketListenerServer streamSocketSrv; 
    StreamSocketClient streamSocketClient; 

    private async void InitializeCameraAsync() 
    { 
     var allVideoDevices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture); 
     DeviceInformation cameraDevice = allVideoDevices.FirstOrDefault(); 
     var mediaInitSettings = new MediaCaptureInitializationSettings { VideoDeviceId = cameraDevice.Id }; 
     MyMediaCapture = new MediaCapture(); 

     try 
     { 
      await MyMediaCapture.InitializeAsync(mediaInitSettings); 
     } 
     catch (UnauthorizedAccessException) 
     { 

     } 

     PreviewControl.Height = 180; 
     PreviewControl.Width = 240; 
     PreviewControl.Source = MyMediaCapture; 

     await MyMediaCapture.StartPreviewAsync(); 
     videoFrame = new VideoFrame(BitmapPixelFormat.Bgra8, 240, 180, 0); 
     buffer = new Windows.Storage.Streams.Buffer((uint)(240 * 180 * 8)); 
    } 

然后密钥服务器代码试图创建一个服务器,并通过在InitSocket功能套接字通信连接的客户端。 StreamSocketListenerServer应该创建为一个对象并启动。同时,服务器IP端口被设置。 streamSocketSrv = new StreamSocketListenerServer(); await streamSocketSrv.start("22333");最后但并非最不重要的一点,Timer_Tick会每隔100ms向客户端发送视频流。

private async void InitSocket() 
    { 
     streamSocketSrv = new StreamSocketListenerServer(); 
     await streamSocketSrv.start("22333"); 

     streamSocketClient = new StreamSocketClient(); 

     timer = new DispatcherTimer(); 
     timer.Interval = TimeSpan.FromMilliseconds(100); 
     timer.Tick += Timer_Tick; 
     timer.Start(); 
    } 

下面,你可以在树莓派部署MyVideoServer应用3. enter image description here 然后,你可以在PC上部署MyVideoClient应用。然后输入Raspberry Pi 3 IP地址并点击连接按钮。视频流将显示在应用程序上。 enter image description here

这是sample代码,您可以参考。

+0

非常感谢,我会尝试:-) –

+0

我可以添加音频到这个解决方案吗?如果我能如何做到这一点? –