uwp softwarebitmap内存不足,调用copyfromBuffer()

时间:2018-03-09 16:48:01

标签: c# uwp

我正在开发一个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();

我没有弄清楚如何解决这个问题,任何人都有建议让这件事有用吗?

1 个答案:

答案 0 :(得分:0)

您的代码是正确的,通过TCP套接字传输时缓冲区可能不匹配。请尝试将接收的数据与源数据进行比较。并优化您的传输协议。