使用 Media Foundation SDK 进行直播
Posted
技术标签:
【中文标题】使用 Media Foundation SDK 进行直播【英文标题】:live streaming using Media Foundation SDK 【发布时间】:2011-11-22 08:02:50 【问题描述】:是否有一种简单的方法来使用我正在使用 Media Foundation 编码的数据并通过网络将其流式传输,而不是将其写入 WMV 文件?
【问题讨论】:
【参考方案1】:首先,我想,您需要知道您将流式传输的格式(编码为/包含)。
我在想 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 传递给接收器。
【讨论】:
谢谢 - 我最好以 WMV 格式流式传输(VC-1、Windows Media 9 视频编解码器、Windows Media 音频编解码器)。在那种情况下,这种方法仍然可行吗?以上是关于使用 Media Foundation SDK 进行直播的主要内容,如果未能解决你的问题,请参考以下文章
使用 Microsoft Media Foundation 从文件播放视频
Windows Media Foundation 枚举音频设备