androiduvccamera
① 安卓系統手機怎麼裝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,還能在相機應用里看;
② Android手機通過otg線外接usb攝像頭需要怎麼做
若手機支持OTG功能,可以通過OTG連接線實現手機與U盤、滑鼠、鍵盤連接等操作來進行數據交換。
用法:
通過OTG轉接線將U盤和您的手機相連接,就可以使用了。
③ android怎麼獲取usb camera的數據
Android camera採集到的可以是yuv420sp也可以食yuv420p。我知道yuv420中yuv的分布。現在主要有個前提是從Android Camera 中採集到的yuv420數據,這個byte[]的長度是一倍的視頻寬高乘積,不是1.5倍。在jni裡面獲取到的長度又確實是1.5倍,但是在jni裡面轉換為jbyte* 的長度還是1倍,就不知道怎麼弄了~
④ GL USB2.0 UVC Camera Device怎麼卸載
什麼牌子型號的攝像頭?gl一般是圖形程序庫,OpenGl是圖形顯示,刪不得,usb2.0也刪不得,uvc+camera+device沒必要也刪不得,這都是攝像頭底層驅動,刪掉了系統不能正常運行的!一般攝像頭都是免驅動的了,老式攝像頭才需要驅動,用驅動之家選擇品牌名稱攝像頭可刪除!
⑤ 如何更改安卓的camera hel層,使之支持uvc攝像頭
實現的方法有很多種,按步驟來看適合哪一種,網上說什麼接採集卡,其實就是把AV轉成UVC,現在市面上很多攝像頭直接就已經是UVC的了,在windows上面即插即用。
安卓也是Linux,這個就好辦了。
首先個安卓USB檢測程序,插入UVC攝像頭,在程序中檢測看是在/dev/video中新增了節點,還是在/bus/usb下新增了節點。如果沒新增video節點,則沒有UVC驅動。如果你有很多個usb口子,可以連電腦,在adb shell中輸入ls -l /dev/v*,查看是否生成了新的節點。
2.如果沒有新增節點,有3個辦法。1是自己寫一個video固件,通常平板上都有前後兩個攝像頭,video0和video1都已經被佔用,是無法通過這兩個來調用外置攝像頭的。2是幹掉一個前置或者後置攝像頭,這樣就可以讓外置USB用video0或video1來啟動,這就是為什麼在沒有攝像頭的安卓上能成功。3是找到系統的源碼,配置其中的UVC驅動,編譯後再安裝。
3如果新增了節點那就好辦了,如果板子上已經有2個攝像頭,自己寫個程序調用ID為3的camera就好了;如果沒有2個攝像頭,那直接用系統自帶的相機程序前後切換就可以看到USB的信息了。如果是AV通過採集卡轉換的UVC,還能在相機應用里看DVD(*^__^*) 嘻嘻。
常見的一些問題:
新增的固件無法訪問。其實就是Linux的許可權問題,只要許可權是0666以上就可以了。chmod 0666 /dev/video3 或者 chmod 777 /dev/video3 ,video幾是看你新增的是哪個。
⑥ 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
## 獲取更多信息 ##
⑦ android設備插上uvc攝像頭後,怎麼確定設備的節點
<6>[ 812.] usb 1-2.3.4: new high-speed USB device number 8 using s5p-ehci
<6>[ 812.] usb 1-2.3.4: New USB device found, idVendor=1908, idProct=23
10
<6>[ 812.] usb 1-2.3.4: New USB device strings: Mfr=1, Proct=2, SerialN
umber=3
<6>[ 812.] usb 1-2.3.4: Proct: USB2.0 PC CAMERA
<6>[ 812.] usb 1-2.3.4: Manufacturer: Generic
<6>[ 812.] usb 1-2.3.4: SerialNumber:
<6>[ 812.] uvcvideo: Found UVC 1.00 device USB2.0 PC CAMERA (1908:2310)
<6>[ 812.] 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
⑧ android中怎麼啟動camera
Android中啟動camera相機,原理是直接調用系統的相機應用,只需要在Intent對象中傳入相應的參數即可。如下代碼:
java">在菜單或按鈕的選擇操作中調用如下代碼,開啟系統自帶CameraAPP,並傳遞一個拍照存儲的路徑給系統應用程序,具體如下:
imgPath="/sdcard/test/img.jpg";
//必須確保文件夾路徑存在,否則拍照後無法完成回調
FilevFile=newFile(imgPath);//新建一個File類,也就是照片保存的位置
if(!vFile.exists())//判斷該文件是否存在
{
FilevDirPath=vFile.getParentFile();//newFile(vFile.getParent());
vDirPath.mkdirs();
}
Uriuri=Uri.fromFile(vFile);//文件在android系統中uri地址
Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);//打開相機
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);//發送意圖,啟動相機
startActivityForResult(intent,SystemCapture);//啟動完成,返回值接收
⑨ usb2.0 uvc camera什麼意思
用於USB介面『驅動程序』你要是卸了所有的U盤、移動硬碟、MP3、MP4、手機內存卡就都不能用了,千萬別卸載啊。