0

我正在为网络摄像机开发视频流服务。我已经为 DirectShow 实现了 RTSP 源过滤器(在 Live555 上),它旨在用于我公司主要产品中的 WPF MediaElement。在我的开发机器上它工作正常(Vista),所以我可以在 Windows Media Player 或任何其他使用 DirectShow 进行渲染的软件中观看流式 H.264 视频。

但是:在其他机器(Windows 7)上,没有视频显示。我发现,在收到上游过滤器 IBaseFilter::Pause 和 IBaseFilter::Run 方法的“播放”命令调用后,Vista 中的增强型视频渲染器(渲染器文件版本 6.0.6002.18005)最终路由到我的源过滤器。在 Windows 7 中,EVR 有不同的版本(6.1.7601.17514),它的行为也不同:它只调用 IBaseFilter::Pause,而不发出 IBaseFilter::Run。结果,一切都停止在 CSourceStream::FillBuffer 方法上,直到超时返回 E_FAIL,并且 EndOfStream 被下游发送到渲染器。有时,EndOfStream IBaseFilter::Run 发出后,但此时没有任何意义。

我试图通过在 CreateInstance 方法中手动创建并将其添加到图形来提供另一个渲染器。它与 Haali Video Renderer 配合使用,Windows Media Player 成功地在其他机器上播放流式视频。但是,据我所知,MediaElement(里面的MediaPlayer)默认使用EVR,它忽略了我创建的HVR(似乎是这样),所以任何机器上都没有视频。

我错过了使用 EVR 的东西吗?任何帮助表示赞赏。

4

1 回答 1

0

我忘了重新实现 IMediaFilter::GetState() 方法以在 State_Paused 中返回 VFW_S_CANT_CUE。这样做解决了问题。

于 2013-10-14T14:17:55.823 回答