none
关于VideoSink.OnSample 不能及时采样的问题 RRS feed

  • 问题

  • hi,大家好,最近我在用Silverlight做一个关于网路摄像头的项目。我们要从摄像头中把每一帧的数据取出来,所以用了VideoSink类的OnSample方法获取数据。但问题是OnSample的调用频率达不到摄像头的帧率。也就是或,假设我的摄像头是30帧/秒,但OnSample函数却不能在一秒内调用30次。

    我的程序的情况是:在OnSample方法中向一个buffer写数据,在一个线程中读取这个数据。在读写之间通过AutoResetEvent进行线程同步。然后在程序中还有几个其他的线程。

    我的问题是:想请大家集思广益一下,是什么引起了这个问题。是不是由于线程之间存在时间片的争夺,或者OnSample这个方法并不能保证一定能够响应每一个摄像头捕捉一帧完毕的时间(我的意思是是不是微软就是把OnSample设计成一个优先级比较低的方法,而保证其他程序运行的质量)。

    谢谢。

    2011年8月17日 1:41

答案

  • 你好,

    我们的问题解决了。我们用的是USB WebCam,所以帧率受到USB通信速度的影响。将摄像头换到USB主端口就可以保证帧率。

    但至于我之前体的关于线程冲突的问题还没有得到论证(也许是我想多了吧)

    关于CaptureImageAsync 方法之前考虑过,论证下来不是我们的use case,所以还是用了OnSample方法。

    谢谢版主的指导,以后也许有更多问题要劳烦。

    2011年8月22日 11:06

全部回复

  • 你好,

    OnSample是对原始数据的访问,如果你是想保存每一帧进行保存,你可以使用CaptureImageAsync 方法 对视频源保存每一张图片。


    Daoping Liu - MSFT
    2011年8月19日 3:24
    版主
  • 你好,

    我们的问题解决了。我们用的是USB WebCam,所以帧率受到USB通信速度的影响。将摄像头换到USB主端口就可以保证帧率。

    但至于我之前体的关于线程冲突的问题还没有得到论证(也许是我想多了吧)

    关于CaptureImageAsync 方法之前考虑过,论证下来不是我们的use case,所以还是用了OnSample方法。

    谢谢版主的指导,以后也许有更多问题要劳烦。

    2011年8月22日 11:06
  • 你好,

    很高兴你能找到问题所在,把问题给解决了。

    指导不敢当,咱们是共同学习 :)


    Daoping Liu - MSFT
    2011年8月23日 2:26
    版主