我正在使用C#(UWP,Windows 10 IoT Core)将视频流(流入网络摄像头)并将其流式传输到桌面。尽管我发现一些使用UWP在Java(用于Rasp)和客户端执行服务器端实现的项目中,我找不到任何有关C#中服务器端编程的项目。使用Raspberry Pi和C的实时视频流#
另外,是否真的有可能使用C#进行实时流式服务器端编程,因为此链接并非如此。 View the Microsoft Link
任何帮助将深表谢意。
Regards, T.S.
我正在使用C#(UWP,Windows 10 IoT Core)将视频流(流入网络摄像头)并将其流式传输到桌面。尽管我发现一些使用UWP在Java(用于Rasp)和客户端执行服务器端实现的项目中,我找不到任何有关C#中服务器端编程的项目。使用Raspberry Pi和C的实时视频流#
另外,是否真的有可能使用C#进行实时流式服务器端编程,因为此链接并非如此。 View the Microsoft Link
任何帮助将深表谢意。
Regards, T.S.
即使我发现了一些项目在做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. 然后,你可以在PC上部署MyVideoClient应用。然后输入Raspberry Pi 3 IP地址并点击连接按钮。视频流将显示在应用程序上。
这是sample代码,您可以参考。
非常感谢,我会尝试:-) –
我可以添加音频到这个解决方案吗?如果我能如何做到这一点? –
你有没有检查[这个项目](https://github.com/davetoland/VideoSocketServer)? –
谢谢,这会做 –