uvcandroid
A. vivox60手機攝像頭兼容UVC嗎
vivo/iQOO手機均不支持UVC。
B. android studio USB UVC攝像頭 預覽 失敗
如下:
檢查設備管理器圖像處理設備下的攝像頭項,顯示設備正常運作無沖突。
C. android Android4.0中是不是已經加入對UVC及UAC的驅動支持
android Android4.0中已經加入對UVC及UAC的驅動支持。Android4.0可以接上外置的USB攝像頭及MIC使用。
符合UVC規格的硬體設備在不需要安裝任何的驅動程序下即可在主機中正常使用。使用UVC技術的包括攝像頭、數碼相機、類比影像轉換器、電視棒及靜態影像相機等設備。
UAC(USB Audio Class)USB音頻類,是USB眾多設備類中的一種。
D. android設備插上uvc攝像頭後,怎麼確定設備的節點
<6>[ 812.640000] usb 1-2.3.4: new high-speed USB device number 8 using s5p-ehci
<6>[ 812.820000] usb 1-2.3.4: New USB device found, idVendor=1908, idProct=23
10
<6>[ 812.820000] usb 1-2.3.4: New USB device strings: Mfr=1, Proct=2, SerialN
umber=3
<6>[ 812.820000] usb 1-2.3.4: Proct: USB2.0 PC CAMERA
<6>[ 812.820000] usb 1-2.3.4: Manufacturer: Generic
<6>[ 812.820000] usb 1-2.3.4: SerialNumber: 20100331010203
<6>[ 812.835000] uvcvideo: Found UVC 1.00 device USB2.0 PC CAMERA (1908:2310)
<6>[ 812.840000] input: USB2.0 PC CAMERA as /devices/platform/s5p-ehci/usb1/1-2
/1-2.3/1-2.3.4/1-2.3.4:1.0/input/input6
E. Android Studio如何配置UVC類
重新檢查下JAVA_HOME,PATH,CLASSPATH。。我安裝android Studio的時候也出現過你這情況,設置好了JAVA_HOME,PATH,CLASSPATH之後就能啟動了重新檢查下JAVA_HOME,PATH,CLASSPATH。。我安裝android Studio的時候也出現過你這情況,設置好了JAVA_HOME,PATH,CLASSPATH之後就能啟動了重新檢查下JAVA_HOME,PATH,CLASSPATH。。我安裝android Studio的時候也出現過你這情況,設置好了JAVA_HOME,PATH,CLASSPATH之後就能啟動了重新檢查下JAVA_HOME,PATH,CLASSPATH。。我安裝android Studio的時候也出現過你這情況,設置好了JAVA_HOME,PATH,CLASSPATH之後就能啟動了重新檢查下JAVA_HOME,PATH,CLASSPATH。。我安裝android Studio的時候也出現過你這情況,設置好了JAVA_HOME,PATH,CLASSPATH之後就能啟動了重新檢查下JAVA_HOME,PATH,CLASSPATH。。我安裝android Studio的時候也出現過你這情況,設置好了JAVA_HOME,PATH,CLASSPATH之後就能啟動了55555555666666666
F. 安卓系統上的app識別不了camera的uvc
成像的時候沒轉化正確,看看log。
無論使用哪種Camera的api,Camera的封裝都可以大致分為兩個流程:數據採集、渲染。於是我們就可以定義出這兩塊功能的介面:數據採集
publicinterfaceICamera{List
雖然是多個攝像頭,但是我們可以用一個單例類來統一管理——UVCCameraHelper。在這個類中我們要做的事有:連接上usb攝像頭設備,開啟攝像頭採集數據並將數據渲染到surface上,此外還需要提供拍照、視頻錄制等api。那麼這里就需要用到UVCCcamera這個開源庫了。我們需要在UVCCameraHelper定義一個USBMonitor對象,這個類的核心介面提供了USB設備的連接狀態維護。
G. 安卓UⅤC什麼意思
UVC,全稱為:USB video class 或USB video device class
UVC是Microsoft與另外幾家設備廠商聯合推出的為USB視頻捕獲設備定義的協議標准,目前已成為USB org標准之一。
如今的主流操作系統(如Windows XPSP2and later, Linux 2.4.6 and later, MacOS 10.5 and later)都已提供UVC設備驅動,因此符合UVC規格的硬體設備在不需要安裝任何的驅動程序下即可在主機中正常使用。使用UVC技術的包括攝像頭、數碼相機、類比影像轉換器、電視棒及靜態影像相機等設備。
最新的UVC版本為UVC 1.1,由USB Implementers Forum定義包括基本協議及負載格式。
網路攝像頭是第一個支持UVC而且也是數量最多的UVC設備,目前,操作系統只要是 Windows XP SP2 之後的版本都可以支持 UVC,當然 Vista 就更不用說了。Linux系統自2.4以後的內核都支持了大量的設備驅動,並可以支持UVC設備。
使用 UVC 的好處 USB 在 Video這塊也成為一項標准了之後,硬體在各個程序之間彼此運行會更加順利,而且也省略了驅動程序安裝這一環節。
紫外線的分類
根據生物效應的不同,將紫外線按照波長劃分為四個波段:
UVA:
波段,波長320~400nm,又稱為長波黑斑效應紫外線 。它有很強的穿透力,可以穿透大部分透明的玻璃以及塑料。日光中含有的長波紫外線 有超過98%能穿透臭氧層和雲層到達地球表面,UVA可以直達 肌膚的真皮層,破壞彈性纖維和膠原蛋白纖維,將我們的皮膚曬黑。360nm波長的UVA紫外線符合昆蟲類的趨光性反應曲線,可製作誘蟲燈。300-420nm波長的UVA紫外線可透過完全截止可見光的特殊著色玻璃燈管,僅輻射出以365nm為中心的近紫外光,可用於礦石鑒定、舞台裝飾、驗鈔等場所。
UVB:
波段,波長275~320nm,又稱為中波紅斑效應紫外線 。中等穿透力,它的波長較短的部分會被透明玻璃吸收,日光中含有的中波紫外線大部分被臭氧層所吸收,只有不足2%能到達地球表面,在夏天和午後會特別強烈。UVB紫外線對人體具有紅斑作用,能促進體內礦物質代謝和維生素D的形成,但長期或過量照射會令皮膚曬黑,並引起紅腫脫皮。紫外線保健燈、植物生長燈發出的就是使用特殊透紫玻璃(不透過254nm以下的光)和峰值在300nm附近的熒光粉製成。
UVC:
紫外線的UVC波段,波長200~275nm,又稱為短波滅菌紫外線。它的穿透能力是最弱的,無法穿透大部分的透明玻璃及塑料。日光中含有的短波紫外線幾乎被臭氧層完全吸收。短波紫外線對人體的傷害很大,短時間照射即可灼傷皮膚,長期或高強度照射還會造成皮膚癌。紫外線殺菌燈發出的就是UVC短波紫外線。
UVD:
波段,波長100~200nm,又稱為真空紫外線。
H. 安卓系統手機怎麼裝uvc
具體可以參考如下操作:
1、首先下載個安卓USB檢測程序,插入UVC攝像頭,在程序中檢測看是在/dev/video中新增了節點,還是在/bus/usb下新增了節點,如果沒新增video節點,則沒有UVC驅動;
2、如果沒有新增節點,有3個辦法:一是自己寫一個video固件,通常平板上都有前後兩個攝像頭,video0和video1都已經被佔用,是無法通過這兩個來調用外置攝像頭的;二是幹掉一個前置或者後置攝像頭,這樣就可以讓外置USB用video0或video1來啟動,這就是為什麼在沒有攝像頭的安卓上能成功;三是找到系統的源碼,配置其中的UVC驅動,編譯後再安裝;
3、如果新增了節點那就好辦了,如果板子上已經有2個攝像頭,自己寫個程序調用ID為3的camera就好了;如果沒有2個攝像頭,那直接用系統自帶的相機程序前後切換就可以看到USB的信息了。如果是AV通過採集卡轉換的UVC,還能在相機應用里看;
I. android app 如何與uvc攝像頭通訊
來看看是怎麼操作UVC攝像頭的吧.我們實現了一個專門檢測UVC攝像頭的服務:UVCCameraService類,主要代碼如下:
監聽
mUSBMonitor = new USBMonitor(this, new USBMonitor.OnDeviceConnectListener() { @Override
public void onAttach(final UsbDevice device) {
Log.v(TAG, "onAttach:" + device);
mUSBMonitor.requestPermission(device);
} @Override
public void onConnect(final UsbDevice device, final USBMonitor.UsbControlBlock ctrlBlock, final boolean createNew) {
releaseCamera(); if (BuildConfig.DEBUG) Log.v(TAG, "onConnect:"); try { final UVCCamera camera = new MyUVCCamera();
camera.open(ctrlBlock);
camera.setStatusCallback(new IStatusCallback() { // ... uvc 攝像頭鏈接成功
Toast.makeText(UVCCameraService.this, "UVCCamera connected!", Toast.LENGTH_SHORT).show(); if (device != null)
cameras.append(device.getDeviceId(), camera);
}catch (Exception ex){
ex.printStackTrace();
}
} @Override
public void onDisconnect(final UsbDevice device, final USBMonitor.UsbControlBlock ctrlBlock) { // ... uvc 攝像頭斷開鏈接
if (device != null) {
UVCCamera camera = cameras.get(device.getDeviceId()); if (mUVCCamera == camera) {
mUVCCamera = null;
Toast.makeText(UVCCameraService.this, "UVCCamera disconnected!", Toast.LENGTH_SHORT).show();
liveData.postValue(null);
}
cameras.remove(device.getDeviceId());
}else {
Toast.makeText(UVCCameraService.this, "UVCCamera disconnected!", Toast.LENGTH_SHORT).show();
mUVCCamera = null;
liveData.postValue(null);
}
} @Override
public void onCancel(UsbDevice usbDevice) {
releaseCamera();
} @Override
public void onDettach(final UsbDevice device) {
Log.v(TAG, "onDettach:");
releaseCamera();// AppContext.getInstance().bus.post(new UVCCameraDisconnect());
}
});
這個類主要實現UVC攝像頭的監聽\鏈接\銷毀\反監聽.當有UVC攝像頭鏈接成功後,會創建一個mUVCCamera對象.
然後在MediaStream里, 我們改造了switchCamera,當參數傳2時,表示要切換到UVCCamera(0,1分別表示切換到後置\前置攝像頭).
創建
在創建攝像頭時,如果是要創建uvc攝像頭,那直接從服務裡面獲取之前創建的mUVCCamera實例:
if (mCameraId == 2) {
UVCCamera value = UVCCameraService.liveData.getValue(); if (value != null) { // uvc camera.
uvcCamera = value;
value.setPreviewSize(width, height,1, 30, UVCCamera.PIXEL_FORMAT_YUV420SP,1.0f); return; // value.startPreview();
}else{
Log.i(TAG, "NO UVCCamera");
uvcError = new Exception("no uvccamera connected!"); return;
} // mCameraId = 0;
}123456789101112131415
預覽
在預覽時,如果uvc攝像頭已經創建了,那執行uvc攝像頭的預覽操作:
UVCCamera value = uvcCamera;if (value != null) {
SurfaceTexture holder = mSurfaceHolderRef.get(); if (holder != null) {
value.setPreviewTexture(holder);
} try {
value.setFrameCallback(uvcFrameCallback, UVCCamera.PIXEL_FORMAT_YUV420SP/*UVCCamera.PIXEL_FORMAT_NV21*/);
value.startPreview();
cameraPreviewResolution.postValue(new int[]{width, height});
}catch (Throwable e){
uvcError = e;
}
}1234567891011121314
這里我們選的colorFormat為PIXEL_FORMAT_YUV420SP 相當於標准攝像頭的NV21格式.
關閉預覽
同理,關閉時,調用的是uvc攝像頭的關閉.
UVCCamera value = uvcCamera; if (value != null) {
value.stopPreview();
}1234
銷毀
因為我們這里並沒有實質性的創建,所以銷毀時也僅將實例置為null就可以了.
UVCCamera value = uvcCamera;if (value != null) { // value.destroy();
uvcCamera = null;
}12345
有了這些操作,我們看看上層怎麼調用,
首先需要在Manifest裡面增加若干代碼,具體詳見UVCCamera工程說明.如下:
<activity android:name=".UVCActivity" android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
然後,的代碼在UVCActivity里,這個類可以在library分支的myapplication工程里找到.即這里.
啟動或者停止UVC攝像頭推送:
public void onPush(View view) { // 非同步獲取到MediaStream對象.
getMediaStream().subscribe(new Consumer<MediaStream>() { @Override
public void accept(final MediaStream mediaStream) throws Exception { // 判斷當前的推送狀態.
MediaStream.PushingState state = mediaStream.getPushingState(); if (state != null && state.state > 0) { // 當前正在推送,那終止推送和預覽
mediaStream.stopStream();
mediaStream.closeCameraPreview();
}else{ // switch 0表示後置,1表示前置,2表示UVC攝像頭
// 非同步開啟UVC攝像頭
RxHelper.single(mediaStream.switchCamera(2), null).subscribe(new Consumer<Object>() { @Override
public void accept(Object o) throws Exception { // 開啟成功,進行推送.
// ...
mediaStream.startStream("cloud.easydarwin.org", "554", id);
}
}, new Consumer<Throwable>() { @Override
public void accept(final Throwable t) throws Exception { // ooop...開啟失敗,提示下...
t.printStackTrace();
runOnUiThread(new Runnable() { @Override
public void run() {
Toast.makeText(UVCActivity.this, "UVC攝像頭啟動失敗.." + t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
});
}
}
});
}
這樣,整個推送就完成了.如果一切順利,應當能在VLC播放出來UVC攝像頭的視頻了~~
我們再看看如何錄像.也非常簡單…
public void onRecord(View view) { // 開始或結束錄像.
final TextView txt = (TextView) view;
getMediaStream().subscribe(new Consumer<MediaStream>() { @Override
public void accept(MediaStream mediaStream) throws Exception { if (mediaStream.isRecording()){ // 如果正在錄像,那停止.
mediaStream.stopRecord();
txt.setText("錄像");
}else { // 沒在錄像,開始錄像...
// 表示最大錄像時長為30秒,30秒後如果沒有停止,會生成一個新文件.依次類推...
// 文件格式為test_uvc_0.mp4,test_uvc_1.mp4,test_uvc_2.mp4,test_uvc_3.mp4
String path = getExternalFilesDir(Environment.DIRECTORY_MOVIES) + "/test_uvc.mp4";
mediaStream.startRecord(path, 30000); final TextView pushingStateText = findViewById(R.id.pushing_state);
pushingStateText.append("\n錄像地址:" + path);
txt.setText("停止");
}
}
});
}21
UVC攝像頭還支持後台推送,即不預覽的情況下進行推送,同時再切換到前台繼續預覽.只需要調用一個介面即可實現,如下:
@Overridepublic void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) {
ms.setSurfaceTexture(surfaceTexture); // 設置預覽的surfaceTexture}@Overridepublic boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
ms.setSurfaceTexture(null); // 設置預覽窗口為null,表示關閉預覽功能
return true;
}123456789
如果要徹底退出uvc攝像頭的預覽\推送,那隻需要同時退出服務即可.
public void onQuit(View view) { // 退出
finish(); // 終止服務...
Intent intent = new Intent(this, MediaStream.class);
stopService(intent);
}1234567
## 獲取更多信息 ##