我如何用DeflateStream解压直播流数据

本文关键字:直播 数据 何用 DeflateStream | 更新日期: 2023-09-27 17:53:34

我有一个接收数据时触发的事件。接收到的数据是一个大压缩流的一个片段。

目前,我维护一个MemoryStream,每当我接收到数据时就调用Write。然而,为了解压缩这个数据,我需要在它周围包裹一个DeflateStream。问题是,当您在DeflateStream上调用Read时,它读取零字节!

这是因为DeflateStream.BaseStream是我刚刚写入的MemoryStream,所以MemoryStream.Position已经更新,用于读取写入。

是否可以在每个MemoryStream.Write之后调用MemoryStream.Seek(-bytesJustWritten, SeekOrigin.Current) ?

我需要能够在不等待流关闭的情况下实时读取解压缩的字节。

我以为我可以只使用两个MemoryStream对象,一个缓冲我的输入,然后一个复制到,然后从读取,但我很快意识到它会提出同样的问题;

我如何用DeflateStream解压直播流数据

我通过使用一个MemoryStream并在每次调用MemoryStream.Write后调用MemoryStream.Seek(-bytesJustWritten, SeekOrigin.Current)来解决这个问题。

这将重置流的位置,以允许刚刚解压缩的数据被读取和稍后覆盖,同时保留DeflateStream的状态。