2011-11-22 141 views

回答

2

首先,我想,你需要知道什么格式(编码/所含的)你要流中。

我在想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到水槽

+0

谢谢 - 最好我会WMV格式(VC-1,Windows媒体9视频编解码器,W流indows媒体音频编解码器)。那种方法在这种情况下仍然可行吗? – Warpin