使用Media Foundation SDK进行直播

时间:2011-11-22 08:02:51

标签: c++ windows ms-media-foundation

是否有一种简单的方法可以使用我使用Media Foundation编码的数据并通过网络流式传输而不是将其写入WMV文件?

1 个答案:

答案 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传递给接收器。