gpt4 book ai didi

c++ - 使用 Media Foundation SDK 进行直播

转载 作者:可可西里 更新时间:2023-11-01 09:25:59 24 4
gpt4 key购买 nike

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

最佳答案

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

我在考虑 h264。使用 Windows 7 Media Foundation 创建 h264 辅助函数。您需要创建拓扑。 Source 读取文件,Sink 将解码和编码格式转换为 h264。您只需要一个源和一个接收器。您实际上不需要解码器和编码器。 Topology builder 计算出需要在两者之间插入什么。

有一个 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 传递到接收器。

关于c++ - 使用 Media Foundation SDK 进行直播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8223654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com