我正在编写RTSP客户端并使用Media Foundation将多个IP摄像头视频源流式传输到Windows显示器。据我所知,内置的MF RTSP无法很好地处理IP摄像机,因此我必须编写自定义媒体资源:
撰写自定义媒体来源: https://msdn.microsoft.com/en-us/library/windows/desktop/ms700134(v=vs.85).aspx
以下帖子还提供了一些有用的提示,但没有太多的实现细节:
使用Media Foundation通过RTSP捕获H264 / AAC流: https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/8f67d241-7e72-4509-b5f8-e2ba3d1a33ad/capture-h264aac-stream-via-rtsp-using-media-foundation?forum=mediafoundationdevelopment
如果我在我的自定义媒体源对象中编写我的RTSP代码,它是否能够在其自己的线程中充分运行并使用阻止“recv”网络调用来接收相机流数据?或者COM对象不是真正可以处理此类任务的单独线程吗?阻止“recv”调用和阻止COM工作队列之间是否存在潜在冲突?
或者我应该使用“CreateThread”创建一个新线程,它将处理所有RTSP细节并将摄像机流数据转发到Media Source对象?
任何指出我正确方向的建议都会很棒!
答案 0 :(得分:1)
在实施中实施您的媒体资源:
如果需要,您还可以引入GAP,或者如果没有获得足够的数据,则重复上一个样本。
答案 1 :(得分:1)
媒体基金会通过其设计建议您异步实施处理。预计将启动工作队列,事件生成器,启动/停止和其他操作,并且不会与通知/事件异步完成阻塞。
遵循此设计,您不需要很多线程。 Media Foundation建议您使用其工作队列,根据需要实现线程池。
然而,这并不意味着你不能使用线程。当您实现Media Foundation源必需的接口/方法时,您必须实现异步模式,但如果您更喜欢在单独的工作线程上进行实际工作(在许多情况下会导致更简单的代码),那就没关系了。 p>