JMF与USB摄像头独享性

USB摄像头的独享性

如果我首先运行用JMF做的摄像头拍照程序再运行QQ的视频设备会出现什么情况?

QQ的视频程序会一直停在那,这说明了什么?是不是用了JMF程序之后就不能用QQ的了还是我的QQ程序坏了。那好为了证明,我们先开QQ视频在打开JMF视频看会出现什么情况。

 

结果发现QQ的视频程序没有坏掉,但是JMF写的程序就出现问题了。

总结:通过这两个实例我们可以确定一点,那就是USB摄像头不能被两视频程序同时调用,也就是说USB摄像头是独享的。

那为什么在用JMF做摄像头拍照,用按钮触发拍照的时候,同样是视频的预览跟拍照都用到了USB摄像头但是他们确没有出现问题呢?

原因很简单,因为这个程序中视频预览跟拍照是共享了USB摄像头(不对,其实从某种严格意义上讲他们是共同使用着USB摄像头驱动但不同时运行)。为什么呢?因为拍照程序是放在按钮事件中的,即从一开始这个程序就与视频预览程序存在于同一个程序中只是没有运行,当点击按钮时触发了程序才完成拍照。  

既然这样那我们如果不用按钮触发可不可以呢?首先想到是那我们用方法吧!把拍照的代码从按钮事件中摘出来封装到方法里。这里我们不用做实验就可以否定?答案是显而易见的,因为摄像头预览跟拍照代码一前一后的运行,这结果,很不幸的就是USB摄像头共享冲突!

那好吧我们用其他方法,用doClick()后台触发按钮总可以了吧,你别说在同一个程序中还真行。可是我们要做的是刷卡拍照啊,刷卡拍照是什么样的呢?

我们理想中是这样的:首先要开启视频程序,我们现在可以预览视频了(开启第一个程序),然后开启刷卡程序,我们可以刷卡了(开启第二个程序)接下来我们刷身份证然后获取到信息,最后我们判断这个信息是否成立,如果成立,好的OK调用doClick方法。我们满怀期待的等待着的结果。让人意外的还是摄像头共享问题。这是为什么呢?

原来我们现在运行的根本不是第一个程序,而是重新开启了一个程序(第三个程序),这就解释通了怪不得又是共享冲突呢?

既然是共享冲突是吧,那我把你前面的程序摄像头资源释放掉总可以了吧!我就不相信你还冲突。可是即使我释放掉也不行啊,为什么呢?因为我重新开启的还是第三个程序啊,这怎么可能对第一个程序有影响呢?虽然不在有那讨厌的视频源框框蹦出来。

总结:由于USB摄像头的独享性,所以如果让视频预览跟拍照用目前这种状况通过刷卡触发那就如同自己钻进了一个死胡同,前面就是一堵墙或是退回去找别的路,或是找把梯子翻过去。

你可能感兴趣的:(职场,休闲,独享问题,JMF做USB摄像头拍照)