是否有一种简单的方法可以使用我使用Media Foundation编码的数据并通过网络流式传输而不是将其写入WMV文件?
答案 0 :(得分:2)
首先,我想,您需要知道要传输的格式(编码为/包含)。
我在想h264。借助Windows 7媒体基础创建h264辅助函数。 您需要创建拓扑。源读取文件并接收器将解码和编码的格式转换为h264。你需要的只是源和水槽。你实际上并不需要解码器和编码器。拓扑生成器可以确定需要插入的内容。
有一个CreateTranscodeTopology函数,但它不会帮助你,因为它将编码数据写入文件。这就是您需要创建自己的拓扑的原因。
只需要编写一个实现IMFByteStream的类。
您的接收器应该执行此字节流。您的实现“写入”功能将写入您要将数据发送到的套接字。所以也许你可以将套接字传递给IMFByteStream实现的构造函数或回调函数。
我还建议你在IMFByteStream中实现的另一个函数中加入一些print语句,因为SinkWriter会调用某些东西。 GetCapabilities所以你至少应该返回。
HRESULT STDMETHODCALLTYPE NetworkOutputStream::GetCapabilities(__RPC__out DWORD *pdwCapabilities){HRESULT hr=S_OK;
printf("GetCapabilities\n");
*pdwCapabilities= (MFBYTESTREAM_IS_READABLE|MFBYTESTREAM_IS_WRITABLE|MFBYTESTREAM_IS_SEEKABLE);
return hr;
}
话虽如此,如果您在客户端上安装了播放器(“HTML5浏览器”),我建议您使用“MFCopy”示例。
创建拓扑主要用于回放和填充。所以它解码和编码移动应该发挥的速度。但你需要的只是对文件进行编码并发送它。 因此,请查看MFCopy并实现您自己的IMFByteStream。而不是创建写入本地文件系统的接收器将IMFByteStream传递给接收器。