2017-03-17 4 views
0

Je suis dans un projet uni de streaming en direct de la vidéo (prélevé sur une webcam) et de le diffuser sur le bureau en utilisant C# (UWP, Windows 10 IoT Core). Même si j'ai trouvé quelques projets en implémentation côté serveur en Java (pour Rasp) et côté client en utilisant UWP, je n'ai trouvé aucun projet concernant la programmation côté serveur en C#. De plus, est-il vraiment possible de faire une telle programmation côté serveur en utilisant C# pour la diffusion en direct comme ce lien Microsoft dit que ce n'est pas le cas. View the Microsoft LinkStreaming vidéo en direct en utilisant Raspberry Pi et C#

Toute aide serait grandement appréciée.

Cordialement, T.S.

+0

Avez-vous coché [ce projet] (https://github.com/davetoland/VideoSocketServer)? –

+0

Merci, Cela ferait –

Répondre

0

Même si je trouve certains projets qui font la mise en œuvre du côté serveur en Java (Pour Râpe) et côté client à l'aide UWP je ne pouvais pas trouver des projets concernant la programmation côté serveur en C#.

Il y a un autre projet que j'ai codé et testé avec succès. Vous pourriez avoir une référence si cela peut vous aider.

Dans l'application MyVideoServer, l'important est d'obtenir l'identifiant de la caméra et le previewFrame de la vidéo. previewFrame = await MyMediaCapture.GetPreviewFrameAsync(videoFrame); Ensuite, envoyez un flux vidéo au client via streamSocketClient. await streamSocketClient.sendBuffer(buffer); Ensuite, le code clé du serveur

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)); 
    } 

tente de créer un serveur et connectez-client par une communication de prise en fonction InitSocket. StreamSocketListenerServer doit être créé en tant qu'objet et démarré. En même temps, le port IP du serveur est configuré. streamSocketSrv = new StreamSocketListenerServer(); await streamSocketSrv.start("22333"); Dernier mais non le moindre, le Timer_Tick va envoyer un flux vidéo au client toutes les 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(); 
    } 

Après vous pouvez déployer MyVideoServer App sur Raspberry Pi 3. enter image description here Ensuite, vous pouvez déployer MyVideoClient App sur PC. Entrez ensuite l'adresse IP de Raspberry Pi 3 et cliquez sur le bouton Connect. Le flux vidéo s'affichera sur l'application. enter image description here

Ceci est le code sample et vous devriez prendre une référence.

+0

Merci beaucoup et je vais l'essayer :-) –

+0

Puis-je ajouter de l'audio à cette solution? Si je peux comment faire ça? –