2014-06-10 5 views
1

현재 Android nexus 5 휴대 전화 용 응용 프로그램을 작성 중입니다. 이 응용 프로그램은 기본적으로 gstreamer를 사용하여 장치에 연결된 USB 웹캠에 액세스합니다. 웹캠에 액세스하려면 웹캠의 장치 노드 위치가 필요합니다. 일반적으로/dev/video3이지만 때때로 값을 변경합니다. 예 :/dev/video4연결된 USB 장치의 Android 장치 노드 이름

현재이 작업을 수행하려면 장치 노드 위치를 수동으로 설정해야합니다. 프로세스를 자동으로 렌더링하고 싶습니다. 특히 사용자가 웹캠을 분리했다가 다시 연결할 수있는 경우를 생각해보십시오.

지금까지 vendorID, productID를 Java에서 결정한 다음이 정보를 JNI를 사용하여 C 코드에 전달했습니다.

if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) 
     { 
      deviceFound = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 

      Log.i("TAG", "USB DEVICE ATTACHED"); 

      deviceFound.getDeviceName(); 
      deviceFound.getVendorId(); 
      deviceFound.getProductId(); 

     } 

getDeviceName는 "는/dev/버스/USB// 002 001"가 포함 된 문자열을 반환

은 내가 USB 장치 정보를 검색하려면 다음을 사용합니다. gstreamer를 사용하여 웹캠에 액세스하려고하면 "다음과 같은 오류가 발생합니다. '/ dev/bus/usb/001/002'장치의 기능을 가져 오는 중 오류가 발생했습니다 : v4l2 드라이버가 아닙니다.

저는 이 경우/dev/bus/usb/002/001이/dev/video3과 완전히 같지 않다고 가정합니다. 몇 가지 질문 :

1)/dev/bus/usb/001/002를 사용하여/dev/video3과 같은 올바른 장치 노드를 얻을 수 있습니까?

2) USB 장치의 공급 업체 & 제품 식별자가 프로그래밍 방식으로 제공되면 장치 노드 (/ dev/video *)를 직접 구할 수 있습니까?

감사합니다.

답변

0

모든 후보자의 수정 시간을 /dev/video*으로 확인하십시오. USB_DEVICE_ATTACHED 조치를받은 시간에 가까운 것을 찾고 있습니다.

관련 문제