请问各位高手:
  我基于JMF开发了一个APPLET来捕获MICphone,并打包(包中有jmf.jar)并放到WEB服务器上.在上面的条件下,出现以下现象:
1.我在服务器用ie访问applet,可捕获micphone,并可以采集音频数据.(服务器上已经安装了JMF).
2.我在客户机用ie访问applet,却不能捕获micphone.(客户机上未安装JMF).程序代码如下:
    CaptureDeviceManager cdm = new CaptureDeviceManager();
    CaptureDeviceInfo cdi = cdm.getDevice("DirectSoundCapture");
    MediaLocator ml = cdi.getLocator();-----------运行至此出现空指针异常.cdi对象为空.问题:
1,请问对于上面第2点现象,是不是客户机没有安装JMF的问题?
2,请问对于applet访问mic是不是一定要在客户机装JMF?(注:我要实现rtp传输)多谢各位!

解决方案 »

  1.   

    并不是它没有装JMF,而是APPLET的权限太小,它只能访问它所在的主机的资源,其它的资源它都不能访问比如,你不能访问你的客户机的文件系统,所以,你麦克风当然就访问不了了两个建议
    1,做成java web start,它会有提示
    2,为你的applet弄一个数字签名,这样就有权限了
      

  2.   

    不存在权限问题,因为我已经做好了数字签名,而且能够通过客户机的applet基于socket访问另一台服务器.
      

  3.   

     CaptureDeviceManager   cdm   =   new   CaptureDeviceManager(); 
     Vector vt  =   cdm.getDeviceList(null); 
     System.out.println("可用设备数:"+vt.size());运行结果:
             可用设备数:0;----------------------------------- 是以上这样测试吗?
      

  4.   

    设备数竟然是0???那就说明你的applet没有使用系统设备的权限了,我记得装JMF的时候,到第二步的时候,有很多选项,其中就有一个选项是"是否赋给applet访问系统设备的权限",你看一下,安装的时候,是否选上了这个
      

  5.   

    谢谢,你非常细心!请允许我补充2点:
    1.对于JMF程序,我只是安装在WEB服务器端,而且在安装的时候,我已经激活了"applet访问系统设备"的选项.注:这些选项都是针对applet对本地操作权限的设置.2.上面那段代码的结果是基于客户端运行applet的环境下的,如地址为:http://192.168.1.22/myapplet.html
      如果在服务器端运行applet,结果则不为空,程序都正常.如地址为:http://127.0.0.1/myapplet.html谢谢你继续解答!
      

  6.   

    我还是觉得是权限的问题,你http://192.168.1.22/myapplet.html 能运行是因为这个地址就是你的服务器的地址,并且你这个电脑上装了JMF,也允许JMF访问你电脑上面的设备,而普通的用户电脑上根本就没有装JMF,所以也无从选择"applet访问系统设备 "的选项.你可以起socket连接,不代表你的APPLET可以通过JMF访问本地的设备.万一不行的话,你可以试试在客户机的电脑上装一下JMF然后
    给予权限.可以用局域网的电脑试试看