4

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

4

1 回答 1

3

首先,我想,您需要知道您要流式传输的格式(编码为/包含在其中)。

我在想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 传递给接收器。

于 2012-08-20T19:08:22.670 回答