【问题标题】:Live Video Streaming using Raspberry Pi and C#使用 Raspberry Pi 和 C# 的实时视频流
【发布时间】:2017-08-08 13:29:55
【问题描述】:

我在一个直播视频(取自网络摄像头)的 uni 项目中,并使用 C#(UWP、Windows 10 IoT Core)将其流式传输到桌面。尽管我发现一些项目在 Java (For Rasp) 和客户端使用 UWP 进行服务器端实现,但我找不到任何关于 C# 中服务器端编程的项目。

另外,真的有可能使用 C# 进行这样的服务器端编程来进行实时流媒体,因为这个 Microsoft 链接说它不是。 View the Microsoft Link

任何帮助将不胜感激。

问候, T.S.

【问题讨论】:

  • 你检查this project了吗?
  • 谢谢,这样就可以了

标签: c# .net raspberry-pi live-streaming windows-10-iot-core


【解决方案1】:

尽管我发现一些项目在 Java(对于 Rasp)和客户端使用 UWP 进行服务器端实现,但我找不到任何关于 C# 中服务器端编程的项目。

我已经成功编码和测试了另一个项目。如果对您有帮助,您可以提供参考。

在 MyVideoServer 应用程序中,重要的是获取视频的相机 ID 和 previewFrame。 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函数中通过socket通信创建一个服务器和连接客户端。 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();
    }

您可以在 Raspberry Pi 3 上部署 MyVideoServer 应用程序。 然后您可以在 PC 上部署 MyVideoClient 应用程序。然后输入 Raspberry Pi 3 IP 地址并单击连接按钮。视频流将显示在应用程序上。

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

【讨论】:

  • 非常感谢,我会试试看 :-)
  • 我可以在这个解决方案中添加音频吗?如果我可以怎么做?
猜你喜欢
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 2018-08-21
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
相关资源
最近更新 更多