2012-07-02 60 views
0

我有一个客户端应用程序正在使用VMR9播放通过网络传输的在线电影。每当流由于问题而停止播放时,播放器将冻结显示上一次接收到的帧。 有什么办法可以在客户端检测到这种状态吗?我检查通过VMR9发送到我的ContainerForm的窗口消息:在VideoMixingRenderer中检测损坏的流

protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == PlayerMessageValue) 
    { 
     Program.log.AppendLine(string.Format("msg {0} {1} {2}", m.LParam, m.WParam, Environment.TickCount)); 
    } 
    base.WndProc(ref m); 
} 

该播放器增加了时间和玩家预期的时间间隔发送的消息,但没有实际收到。 这里是日志:

msg 0 0 1316437 
msg 0 0 1316515 
msg 0 0 1317515 
msg 0 0 1318515 
msg 0 0 1319515 
msg 0 0 1320515 
msg 0 0 1321531 
msg 0 0 1322531 
msg 0 0 1323531 
msg 0 0 1324531 
msg 0 0 1325531 
msg 0 0 1326546 
msg 0 0 1327546 
msg 0 0 1328546 
msg 0 0 1329546 

一段时间过去了,从现在开始流停止,但没有在VMR的行为改变:

msg 0 0 1351593 
msg 0 0 1352593 
msg 0 0 1353593 
msg 0 0 1354593 
msg 0 0 1355593 
msg 0 0 1356609 
msg 0 0 1357609 
msg 0 0 1358609 
msg 0 0 1359609 
msg 0 0 1360609 
msg 0 0 1361625 
msg 0 0 1362625 
msg 0 0 1363625 
msg 0 0 1364625 
msg 0 0 1365625 
msg 0 0 1366640 
msg 0 0 1367640 
msg 0 0 1368640 
msg 0 0 1369640 
msg 0 0 1370640 

收盘... 1371796

是还有我应该检查图形活动的图表的其他部分吗? (虽然图表正在运行)

回答

0

预计没有窗口消息会指示意外的行为。相反,您应该使用IMediaEvent::GetEvent来检查过滤器图形事件。此外,为了解决特定问题,您可能正在检查媒体样本(例如时间戳)或验证数据(如H.264比特流)。

+0

感谢罗马,虽然由于某种未知的原因,我无法通过rtsp协议与流媒体服务器通信,但至少我知道没有directshow方式来找到它。 – Bakhshi

+0

...您提到的事件没有提供任何此类情况的证据 – Bakhshi