使用Media Foundation SDK进行直播

有没有一种简单的方法来使用我使用Media Foundation编码的数据并通过networking进行stream式传输,而不是将其写入WMV文件?

首先,我想,你需要知道什么格式(编码为/包含在)你要流。

我在想h264。 使用Windows 7媒体基础创建h264辅助函数。 您需要创建一个拓扑。 源读取文件和接收器将解码和编码格式转换为h264。 所有你需要的是源和一个接收器。 你实际上不需要一个解码器和一个编码器。 拓扑生成器计算需要插入的内容。

有一个CreateTranscodeTopology函数,但不会帮你,因为它将编码的数据写入文件。 这就是为什么你需要创建自己的拓扑。

只有你需要编写的是一个实现了IMFByteStream的类。

你的接收器应该把你的这个字节流的实现。 您的实现“写入”功能将写入您要发送数据的套接字。 所以也许你可以将你的套接字传递给你的IMFByteStream实现或回调函数的构造函数。

我也建议你把一些打印语句放在你需要在IMFByteStream中实现的另一个函数中,因为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传递给接收器。