我正在尝试创建一个网页,允许用户使用ASP.NET从连接到服务器的摄像头捕获图像。摄像机是奥林巴斯,服务器端代码可以访问摄像机sdk中的所有同步呼叫。
当我试图捕捉图像时出现问题
它在SDK中的工作方式是首先告诉摄像机拍摄图像,然后为摄像机触发的事件添加一个监听器,然后在摄像机完成捕获后开始从摄像机下载图像。登记/>
该事件从未触发,因此我目前无法从相机下载图像
将侦听器绑定到函数并告诉摄像机拍摄照片的代码位于按钮的服务器端代码内。
基本上我想知道如何在服务器上更改某些事件的事件监听器,例如附加的摄像机的状态。
答案 0 :(得分:1)
我希望你有这个问题。例如,我敢打赌相机假设它一次被一个桌面应用程序使用。从Web应用程序调用它是完全不同的,因为每个请求可能来自不同的用户,并且可能与相机已经发生的事情无关。
我建议您通过Windows服务与相机通信。该服务将通过Windows服务中托管的WCF服务与Web应用程序进行通信。它会告诉相机拍摄图像,并附加到事件中。当事件触发时,它会从摄像机下载图像并将其返回给Web服务的调用者。
WCF服务可能必须确保一次只有一个用户正在使用相机。如果相机已在使用中,则必须拒绝来电。
答案 1 :(得分:0)
服务器端事件捕获可能会有点棘手。我已经有一段时间了,所以我完全是从我模糊的记忆中写下来的......
从页面类附加到服务器端事件会引入类的生命周期问题。一旦页面被传递,该类的实例就不再在范围内,因此您分配给摄像机的任何事件处理程序也不再在范围内。我们使用了两种不同的机制来解决这个问题。
A)为事件处理程序分配静态方法。静态方法不依赖于类的特定实例,即使页面实例不再在范围内,它也会持久存在。
B)在GLOBAL类中分配一个方法来捕获应用程序(或会话)_Start事件上的事件。这使事件处理程序也在页面类的范围之外。
在这些实例中的任何一个中,您的事件处理程序都需要设置一些可以全局读取的标志,以指示图像已准备好,并且您的页面需要轮询页面(或处理程序)或刷新以查找图像是准备好了。
您还需要查看相机API类实例化的范围。如果该类被实例化为页面类的成员,那么一旦页面完成它就会从地球上掉下来并且事件不会被提升。相机类需要是静态的,全局的,或者衍生到另一个独立的线程。
希望我的模糊游戏有所帮助。祝你好运。