我正在开发一个UWP应用程序,它必须从远程PC接收视频流。 现在我从PC的网络摄像头捕获视频,将其发送到远程服务器,通过TCP套接字将其返回给我。 我已经能够通过音频流成功地做到这一点。
当我将一部分视频流作为字节数组接收并尝试创建一个必须在XAML Image元素中表示的SoftwareBitmap时,会出现问题。
源代码的结构是在捕获视频帧时触发事件,然后将其转换为byte [],将其写入TCP套接字;当在套接字上收到消息时,会触发另一个事件,以便为UI提供单个图像。
这里是我得到例外的代码部分:
var reader = (DataReader)sender;
try
{
SoftwareBitmap img = new SoftwareBitmap(BitmapPixelFormat.Bgra8, 1280, 720);
img.CopyFromBuffer(reader.ReadBuffer(reader.UnconsumedBufferLength));
ImageReadyEvent(SoftwareBitmap.Convert(img,
BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Ignore), null);
}
catch (Exception ex)
{
throw;
}
当 img.CopyFromBuffer(reader.ReadBuffer(reader.UnconsumedBufferLength)); 被调用时会触发异常。
此时 reader.UnconsumedBufferLength 的值为55000字节。
如果我在视频帧准备就绪后立即执行它,而不通过套接字发送它,相同的代码可以正常工作。
我还尝试了一个BitmapDecoder但它每次都失败,同时可能覆盖BitmapDecoder.CreateAsync();
我没有弄清楚如何解决这个问题,任何人都有建议让这件事有用吗?
答案 0 :(得分:0)
您的代码是正确的,通过TCP套接字传输时缓冲区可能不匹配。请尝试将接收的数据与源数据进行比较。并优化您的传输协议。