我正在准备Media Foundation会话,该会话从网络安全摄像头读取视频流,将其显示在屏幕上并将其编码到磁盘。我有一切都在使用网络摄像头,现在我尝试使用IMFSourceResolver
CreateObjectFromURL()
连接到网络摄像头。问题是相机需要登录名和密码并将URL格式化为:
rtsp://login:password@IPaddr
仍会导致"权限被拒绝"响应。
MSDN有一些关于使用IMFNetCredentialManager
提供用户名和密码的页面,但它无效,我仍然被拒绝许可。使用WireShark我可以看到相机以" Unauthorized" RTSP对第一次MF连接尝试的响应,然后MF放弃并且不检查凭据管理器,以失败告终。
我在那里找不到使用IMFNetCredentialManager
的任何其他示例。看起来从IP摄像机读取需要密码的视频流应该是一项常见的任务,但我没有发现它在实践中完成的证据。是否有可能与媒体基金会合作,还是我错过了另一种方法?
答案 0 :(得分:0)
完成我的研究后,这是我达成的结论。
Windows Media Foundation为USB网络摄像头和基本流媒体提供了良好(但不彻底)的支持。它只是一个基础。与网络IP摄像机通信更先进的任何事情都需要程序员进行大量额外的工作才能完全实现他们选择的协议,如RTSP,HTTP或ONVIF。
我原本期望我可以为网络摄像头设置媒体会话,然后通过使用带有URL的源解析器将源切换到带有RTSP的网络摄像头。使用MSDN中显示的网络凭据管理器进行的授权不是Media Foundation提供的媒体源的一部分,这就是为什么不调用BeginGetCredentials()的原因。这只是您需要使用自己的方案实现的一个示例。
因此,我的解决方案是放弃使用Media Foundation并使用LEADTOOLS等的第三方库。这需要花钱,否则我需要花费更多的开发时间来创建我需要的东西。
我希望这个答案可以帮助我节省一些人,因为我把这只兔子追到了深渊!