我有一个 WebM编写器实例,它将视频帧作为来自 VP8编码器实例的字节数组(媒体缓冲区)并连续将它们写入{ {1}}将它们打包成 WebM容器 r。
我还有一个MemoryStream
异步等待http请求。当客户端到达时,会创建一个新的HttpListener
,其中包含要在响应流(HttpListenerContext
)中写入的Stream
实例。现在我想要多路复用'我的内存流,例如不断阅读并分享给不同的连接http客户端。所以:
- > 我在这里
整个任务是针对HTTP直播服务器。不幸的是,由于专有组件,我无法显示WebM编写器/ VP8编码器等的来源,但我希望您能理解。
我已经尝试使用Context.Response.OutputStream
,但似乎stream.CopyTo()
将复制操作理解为整理,因此只返回应发送的一大块内容。此外,使用HttpListenerContext
从流中读取设置每个操作的位置,因此这也是无用的。
答案 0 :(得分:1)
对于#3,您需要一个像FIFO队列一样的流。 .NET Framework不提供此类流。但是,几年前我创建了一个完全符合您要求的产品。它允许一个线程读取而另一个线程正在写入。您可以找到完整的来源,对其工作原理的解释以及Building a new type of stream上的示例。
基本上,它只是一个很大的内存缓冲区,我把它当成循环队列。如果缓冲区填满,则写入器将阻塞,直到读取一些数据。如果没有要读取的数据,读取器会阻塞,直到写入一些数据或直到流被标记为已完成(即流结束)。
另一个例子是this answer。
在列表中解决#4只是一个写入每个响应流的循环问题。
答案 1 :(得分:1)
就像吉姆的答案一样,我写了Nerdbank.FullDuplexStream,听起来好像是您想要的。