国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

安卓虛擬相機(jī)虛擬攝像頭插件,IOS蘋果iphone,微信QQ都支持,提供dex\hook類代碼

這篇具有很好參考價值的文章主要介紹了安卓虛擬相機(jī)虛擬攝像頭插件,IOS蘋果iphone,微信QQ都支持,提供dex\hook類代碼。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

核心HOOK思路源碼開源了,僅供學(xué)習(xí),用的一個java類實(shí)現(xiàn)的,但是成品我不提供奧,就提供下實(shí)現(xiàn)虛擬視頻hook類的java代碼【我已經(jīng)把dex文件里面實(shí)現(xiàn)hook的字節(jié)碼代碼轉(zhuǎn)換成java代碼了】,僅供大家研究,用工具是Smali將字節(jié)碼代碼轉(zhuǎn)換為Java代碼,工具下面地址可以自己網(wǎng)上搜。

開源虛擬攝像頭,ios,android,數(shù)碼相機(jī)

下面是我測試一個效果視頻【僅供學(xué)習(xí)】:?

虛擬攝像頭插件,玩玩,支持微信QQ,替換攝像頭,還是開源的?。?!

下面是實(shí)現(xiàn)HOOk的java代碼,我已經(jīng)用Smali導(dǎo)出來了:

===================================================================

//

// Decompiled by Jadx - 791ms

//

package com.exampsle.vcam;

import android.graphics.ImageFormat;

import android.graphics.Rect;

import android.media.Image;

import android.media.MediaCodec;

import android.media.MediaCodecInfo;

import android.media.MediaCrypto;

import android.media.MediaExtractor;

import android.media.MediaFormat;

import android.util.Log;

import android.view.Surface;

import de.robv.android.xposed.XposedBridge;

import java.io.File;

import java.io.IOException;

import java.io.PrintStream;

import java.nio.ByteBuffer;

import java.util.concurrent.LinkedBlockingQueue;

public class VideoToFrames implements Runnable {

????private static final int COLOR_FormatI420 = 1;

????private static final int COLOR_FormatNV21 = 2;

????private static final long DEFAULT_TIMEOUT_US = 10000;

????private static final String TAG = "VideoToFrames";

????private static final boolean VERBOSE = false;

????private Callback callback;

????private Thread childThread;

????private LinkedBlockingQueue<byte[]> mQueue;

????private OutputImageFormat outputImageFormat;

????private Surface play_surf;

????private Throwable throwable;

????private String videoFilePath;

????private final int decodeColorFormat = 0x7f420888;

????private boolean stopDecode = false;

????public void setCallback(Callback callback) {

????????this.callback = callback;

????}

????public void setEnqueue(LinkedBlockingQueue<byte[]> linkedBlockingQueue) {

????????this.mQueue = linkedBlockingQueue;

????}

????public void setSaveFrames(String str, OutputImageFormat outputImageFormat) throws IOException {

????????this.outputImageFormat = outputImageFormat;

????}

????public void set_surfcae(Surface surface) {

????????if (surface != null) {

????????????this.play_surf = surface;

????????}

????}

????public void stopDecode() {

????????this.stopDecode = true;

????}

????public void decode(String str) throws Throwable {

????????this.videoFilePath = str;

????????if (this.childThread == null) {

????????????Thread thread = new Thread(this, "decode");

????????????this.childThread = thread;

????????????thread.start();

????????????Throwable th = this.throwable;

????????????if (th != null) {

????????????????throw th;

????????????}

????????}

????}

????@Override

????public void run() {

????????try {

????????????videoDecode(this.videoFilePath);

????????} catch (Throwable th) {

????????????this.throwable = th;

????????}

????}

????/* JADX WARN: Multi-variable type inference failed */

????/* JADX WARN: Removed duplicated region for block: B:32:0x00c1??*/

????/* JADX WARN: Removed duplicated region for block: B:34:0x00c9??*/

????/* JADX WARN: Type inference failed for: r0v1, types: [android.media.MediaCodec, android.media.MediaExtractor] */

????/* JADX WARN: Type inference failed for: r0v3 */

????/* JADX WARN: Type inference failed for: r0v4, types: [android.media.MediaCodec] */

????/* JADX WARN: Type inference failed for: r0v5 */

????/*

????????Code decompiled incorrectly, please refer to instructions dump.

????*/

????public void videoDecode(String str) throws IOException {

????????MediaExtractor mediaExtractor;

????????XposedBridge.log("【VCAM】【decoder】開始解碼");

????????MediaCodec mediaCodec = 0;

????????mediaCodec = 0;

????????try {

????????????try {

????????????????new File(str);

????????????????mediaExtractor = new MediaExtractor();

????????????????try {

????????????????????mediaExtractor.setDataSource(str);

????????????????????int selectTrack = selectTrack(mediaExtractor);

????????????????????if (selectTrack < 0) {

????????????????????????XposedBridge.log("【VCAM】【decoder】No video track found in " + str);

????????????????????}

????????????????????mediaExtractor.selectTrack(selectTrack);

????????????????????MediaFormat trackFormat = mediaExtractor.getTrackFormat(selectTrack);

????????????????????String string = trackFormat.getString("mime");

????????????????????mediaCodec = MediaCodec.createDecoderByType(string);

????????????????????showSupportedColorFormat(mediaCodec.getCodecInfo().getCapabilitiesForType(string));

????????????????????if (isColorFormatSupported(0x7f420888, mediaCodec.getCodecInfo().getCapabilitiesForType(string))) {

????????????????????????trackFormat.setInteger("color-format", 0x7f420888);

????????????????????????XposedBridge.log("【VCAM】【decoder】set decode color format to type 2135033992");

????????????????????} else {

????????????????????????Log.i(TAG, "unable to set decode color format, color format type 0x7f420888 not supported");

????????????????????????XposedBridge.log("【VCAM】【decoder】unable to set decode color format, color format type 0x7f420888 not supported");

????????????????????}

????????????????????decodeFramesToImage(mediaCodec, mediaExtractor, trackFormat);

????????????????????mediaCodec.stop();

????????????????????while (!this.stopDecode) {

????????????????????????mediaExtractor.seekTo(0L, 0);

????????????????????????decodeFramesToImage(mediaCodec, mediaExtractor, trackFormat);

????????????????????????mediaCodec.stop();

????????????????????}

????????????????????if (mediaCodec != 0) {

????????????????????????mediaCodec.stop();

????????????????????????mediaCodec.release();

????????????????????}

????????????????} catch (Exception e) {

????????????????????e = e;

????????????????????XposedBridge.log("【VCAM】[videofile]" + e.toString());

????????????????????if (mediaCodec != 0) {

????????????????????????mediaCodec.stop();

????????????????????????mediaCodec.release();

????????????????????}

????????????????????if (mediaExtractor == null) {

????????????????????????return;

????????????????????}

????????????????????mediaExtractor.release();

????????????????}

????????????} catch (Throwable th) {

????????????????th = th;

????????????????if (0 != 0) {

????????????????????mediaCodec.stop();

????????????????????mediaCodec.release();

????????????????}

????????????????if (0 != 0) {

????????????????????mediaCodec.release();

????????????????}

????????????????throw th;

????????????}

????????} catch (Exception e2) {

????????????e = e2;

????????????mediaExtractor = null;

????????} catch (Throwable th2) {

????????????th = th2;

????????????if (0 != 0) {

????????????}

????????????if (0 != 0) {

????????????}

????????????throw th;

????????}

????????mediaExtractor.release();

????}

????private void showSupportedColorFormat(MediaCodecInfo.CodecCapabilities codecCapabilities) {

????????System.out.print("supported color format: ");

????????int[] iArr = codecCapabilities.colorFormats;

????????int length = iArr.length;

????????for (int i = 0; i < length; i += COLOR_FormatI420) {

????????????int i2 = iArr[i];

????????????PrintStream printStream = System.out;

????????????printStream.print(i2 + "\t");

????????}

????????System.out.println();

????}

????private boolean isColorFormatSupported(int i, MediaCodecInfo.CodecCapabilities codecCapabilities) {

????????int[] iArr = codecCapabilities.colorFormats;

????????int length = iArr.length;

????????for (int i2 = 0; i2 < length; i2 += COLOR_FormatI420) {

????????????if (iArr[i2] == i) {

????????????????return true;

????????????}

????????}

????????return false;

????}

????private void decodeFramesToImage(MediaCodec mediaCodec, MediaExtractor mediaExtractor, MediaFormat mediaFormat) {

????????long j;

????????int dequeueInputBuffer;

????????MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();

????????mediaCodec.configure(mediaFormat, this.play_surf, (MediaCrypto) null, 0);

????????mediaCodec.start();

????????mediaFormat.getInteger("width");

????????mediaFormat.getInteger("height");

????????boolean z = false;

????????boolean z2 = false;

????????int i = 0;

????????boolean z3 = false;

????????long j2 = 0;

????????while (!z && !this.stopDecode) {

????????????if (z2 || (dequeueInputBuffer = mediaCodec.dequeueInputBuffer(DEFAULT_TIMEOUT_US)) < 0) {

????????????????j = 10000;

????????????} else {

????????????????int readSampleData = mediaExtractor.readSampleData(mediaCodec.getInputBuffer(dequeueInputBuffer), 0);

????????????????if (readSampleData < 0) {

????????????????????j = 10000;

????????????????????z2 = true;

????????????????????mediaCodec.queueInputBuffer(dequeueInputBuffer, 0, 0, 0L, 4);

????????????????} else {

????????????????????j = 10000;

????????????????????mediaCodec.queueInputBuffer(dequeueInputBuffer, 0, readSampleData, mediaExtractor.getSampleTime(), 0);

????????????????????mediaExtractor.advance();

????????????????}

????????????}

????????????int dequeueOutputBuffer = mediaCodec.dequeueOutputBuffer(bufferInfo, j);

????????????if (dequeueOutputBuffer >= 0) {

????????????????boolean z4 = (bufferInfo.flags & 4) != 0 ? true : z;

????????????????if (bufferInfo.size != 0) {

????????????????????i += COLOR_FormatI420;

????????????????????Callback callback = this.callback;

????????????????????if (callback != null) {

????????????????????????callback.onDecodeFrame(i);

????????????????????}

????????????????????if (!z3) {

????????????????????????j2 = System.currentTimeMillis();

????????????????????????z3 = true;

????????????????????}

????????????????????if (this.play_surf == null) {

????????????????????????Image outputImage = mediaCodec.getOutputImage(dequeueOutputBuffer);

????????????????????????ByteBuffer buffer = outputImage.getPlanes()[0].getBuffer();

????????????????????????byte[] bArr = new byte[buffer.remaining()];

????????????????????????buffer.get(bArr);

????????????????????????LinkedBlockingQueue<byte[]> linkedBlockingQueue = this.mQueue;

????????????????????????if (linkedBlockingQueue != null) {

????????????????????????????try {

????????????????????????????????linkedBlockingQueue.put(bArr);

????????????????????????????} catch (InterruptedException e) {

????????????????????????????????XposedBridge.log("【VCAM】" + e.toString());

????????????????????????????}

????????????????????????}

????????????????????????if (this.outputImageFormat != null) {

????????????????????????????HookMain.data_buffer = getDataFromImage(outputImage, COLOR_FormatNV21);

????????????????????????}

????????????????????????outputImage.close();

????????????????????}

????????????????????long currentTimeMillis = (bufferInfo.presentationTimeUs / 1000) - (System.currentTimeMillis() - j2);

????????????????????if (currentTimeMillis > 0) {

????????????????????????try {

????????????????????????????Thread.sleep(currentTimeMillis);

????????????????????????} catch (InterruptedException e2) {

????????????????????????????XposedBridge.log("【VCAM】" + e2.toString());

????????????????????????????XposedBridge.log("【VCAM】線程延遲出錯");

????????????????????????}

????????????????????}

????????????????????mediaCodec.releaseOutputBuffer(dequeueOutputBuffer, true);

????????????????}

????????????????z = z4;

????????????}

????????}

????????Callback callback2 = this.callback;

????????if (callback2 != null) {

????????????callback2.onFinishDecode();

????????}

????}

????private static int selectTrack(MediaExtractor mediaExtractor) {

????????int trackCount = mediaExtractor.getTrackCount();

????????for (int i = 0; i < trackCount; i += COLOR_FormatI420) {

????????????if (mediaExtractor.getTrackFormat(i).getString("mime").startsWith("video/")) {

????????????????return i;

????????????}

????????}

????????return -1;

????}

????private static boolean isImageFormatSupported(Image image) {

????????int format = image.getFormat();

????????return format == 17 || format == 35 || format == 0x32315659;

????}

????/* JADX WARN: Removed duplicated region for block: B:30:0x007a??*/

????/* JADX WARN: Removed duplicated region for block: B:31:0x007d??*/

????/* JADX WARN: Removed duplicated region for block: B:34:0x0098??*/

????/*

????????Code decompiled incorrectly, please refer to instructions dump.

????*/

????private static byte[] getDataFromImage(Image image, int i) {

????????int i2;

????????int i3;

????????Rect rect;

????????int i4;

????????int i5 = i;

????????int i6 = COLOR_FormatNV21;

????????int i7 = COLOR_FormatI420;

????????if (i5 != COLOR_FormatI420 && i5 != COLOR_FormatNV21) {

????????????throw new IllegalArgumentException("only support COLOR_FormatI420 and COLOR_FormatNV21");

????????}

????????if (!isImageFormatSupported(image)) {

????????????throw new RuntimeException("can't convert Image to byte array, format " + image.getFormat());

????????}

????????Rect cropRect = image.getCropRect();

????????int format = image.getFormat();

????????int width = cropRect.width();

????????int height = cropRect.height();

????????Image.Plane[] planes = image.getPlanes();

????????int i8 = width * height;

????????byte[] bArr = new byte[(ImageFormat.getBitsPerPixel(format) * i8) / 8];

????????byte[] bArr2 = new byte[planes[0].getRowStride()];

????????int i9 = 0;

????????int i10 = 0;

????????int i11 = COLOR_FormatI420;

????????while (i9 < planes.length) {

????????????if (i9 == 0) {

????????????????i10 = 0;

????????????} else if (i9 != i7) {

????????????????if (i9 == i6) {

????????????????????if (i5 == i7) {

????????????????????????i10 = (int) (i8 * 1.25d);

????????????????????} else if (i5 == i6) {

????????????????????????i10 = i8;

????????????????????????i11 = COLOR_FormatNV21;

????????????????????}

????????????????}

????????????????ByteBuffer buffer = planes[i9].getBuffer();

????????????????int rowStride = planes[i9].getRowStride();

????????????????int pixelStride = planes[i9].getPixelStride();

????????????????int i12 = i9 == 0 ? 0 : COLOR_FormatI420;

????????????????int i13 = width >> i12;

????????????????i2 = height >> i12;

????????????????int i14 = width;

????????????????buffer.position(((cropRect.top >> i12) * rowStride) + ((cropRect.left >> i12) * pixelStride));

????????????????i3 = 0;

????????????????while (i3 < i2) {

????????????????????if (pixelStride == COLOR_FormatI420 && i11 == COLOR_FormatI420) {

????????????????????????buffer.get(bArr, i10, i13);

????????????????????????i10 += i13;

????????????????????????rect = cropRect;

????????????????????????i4 = i13;

????????????????????} else {

????????????????????????rect = cropRect;

????????????????????????i4 = ((i13 - 1) * pixelStride) + COLOR_FormatI420;

????????????????????????buffer.get(bArr2, 0, i4);

????????????????????????for (int i15 = 0; i15 < i13; i15 += COLOR_FormatI420) {

????????????????????????????bArr[i10] = bArr2[i15 * pixelStride];

????????????????????????????i10 += i11;

????????????????????????}

????????????????????}

????????????????????if (i3 < i2 - 1) {

????????????????????????buffer.position((buffer.position() + rowStride) - i4);

????????????????????}

????????????????????i3 += COLOR_FormatI420;

????????????????????cropRect = rect;

????????????????}

????????????????i9 += COLOR_FormatI420;

????????????????i5 = i;

????????????????width = i14;

????????????????i6 = COLOR_FormatNV21;

????????????????i7 = COLOR_FormatI420;

????????????} else if (i5 == i7) {

????????????????i10 = i8;

????????????} else {

????????????????if (i5 == i6) {

????????????????????i10 = i8 + COLOR_FormatI420;

????????????????????i11 = COLOR_FormatNV21;

????????????????}

????????????????ByteBuffer buffer2 = planes[i9].getBuffer();

????????????????int rowStride2 = planes[i9].getRowStride();

????????????????int pixelStride2 = planes[i9].getPixelStride();

????????????????if (i9 == 0) {

????????????????}

????????????????int i132 = width >> i12;

????????????????i2 = height >> i12;

????????????????int i142 = width;

????????????????buffer2.position(((cropRect.top >> i12) * rowStride2) + ((cropRect.left >> i12) * pixelStride2));

????????????????i3 = 0;

????????????????while (i3 < i2) {

????????????????}

????????????????i9 += COLOR_FormatI420;

????????????????i5 = i;

????????????????width = i142;

????????????????i6 = COLOR_FormatNV21;

????????????????i7 = COLOR_FormatI420;

????????????}

????????????i11 = COLOR_FormatI420;

????????????ByteBuffer buffer22 = planes[i9].getBuffer();

????????????int rowStride22 = planes[i9].getRowStride();

????????????int pixelStride22 = planes[i9].getPixelStride();

????????????if (i9 == 0) {

????????????}

????????????int i1322 = width >> i12;

????????????i2 = height >> i12;

????????????int i1422 = width;

????????????buffer22.position(((cropRect.top >> i12) * rowStride22) + ((cropRect.left >> i12) * pixelStride22));

????????????i3 = 0;

????????????while (i3 < i2) {

????????????}

????????????i9 += COLOR_FormatI420;

????????????i5 = i;

????????????width = i1422;

????????????i6 = COLOR_FormatNV21;

????????????i7 = COLOR_FormatI420;

????????}

????????return bArr;

????}

}

=================================================================?文章來源地址http://www.zghlxwxcb.cn/news/detail-795757.html

到了這里,關(guān)于安卓虛擬相機(jī)虛擬攝像頭插件,IOS蘋果iphone,微信QQ都支持,提供dex\hook類代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android相機(jī)調(diào)用-CameraX【外接攝像頭】【USB攝像頭】

    Android相機(jī)調(diào)用-CameraX【外接攝像頭】【USB攝像頭】

    Android相機(jī)調(diào)用有原生的Camera和Camera2,我覺得調(diào)用代碼都太復(fù)雜了,CameraX調(diào)用代碼簡潔很多。 說明文檔:https://developer.android.com/jetpack/androidx/releases/camera?hl=zh-cn 現(xiàn)有查到的調(diào)用資料都不夠新,對于外接攝像頭(USB攝像頭)這類非前置也非后置攝像頭的設(shè)備調(diào)用,都說是沒有實(shí)

    2024年02月09日
    瀏覽(31)
  • 電腦上虛擬攝像頭在哪關(guān)閉?多種方法關(guān)閉虛擬攝像頭

    電腦上虛擬攝像頭在哪關(guān)閉?多種方法關(guān)閉虛擬攝像頭

    在數(shù)字化時代,虛擬攝像頭成為了許多工作和娛樂場景中的必備工具。它允許我們在不使用物理攝像頭的情況下,通過軟件模擬攝像頭功能,從而滿足視頻通話、直播、教學(xué)等多種需求。 然而,有時我們可能需要在某些情況下關(guān)閉虛擬攝像頭,那么,電腦上虛擬攝像頭應(yīng)該在

    2024年04月12日
    瀏覽(22)
  • 安卓調(diào)用手機(jī)攝像頭和相冊

    新建一個CameraAlbumTest項(xiàng)目,修改activity_main.xml中的代碼 可以看到在布局文件當(dāng)中,有一個Button和一個ImageView.Button是用于打開攝像頭進(jìn)行拍照的,而ImageView則是用于將拍到圖片顯示出來. 在MainActivity中編寫調(diào)用攝像頭的代碼邏輯 首先創(chuàng)建了一個File對象,用于存儲攝像頭拍下的圖片

    2024年02月09日
    瀏覽(26)
  • Unity3D:調(diào)用安卓攝像頭拍照

    操作步驟:創(chuàng)建腳步并掛載到Main Camera上 仍未解決的問題:導(dǎo)入到安卓平臺測試時,拍照按鈕不能隨著屏幕旋轉(zhuǎn)而變換位置; 拍照時會把拍照按鈕也截進(jìn)去。

    2024年02月06日
    瀏覽(20)
  • OpenCV開發(fā)筆記(七十七):相機(jī)標(biāo)定(二):通過棋盤標(biāo)定計算相機(jī)內(nèi)參矩陣矯正畸變攝像頭圖像

    OpenCV開發(fā)筆記(七十七):相機(jī)標(biāo)定(二):通過棋盤標(biāo)定計算相機(jī)內(nèi)參矩陣矯正畸變攝像頭圖像

    若該文為原創(chuàng)文章,轉(zhuǎn)載請注明原文出處 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136616551 各位讀者,知識無窮而人力有窮,要么改需求,要么找專業(yè)人士,要么自己研究 紅胖子(紅模仿)的博文大全:開發(fā)技術(shù)集合(包含Qt實(shí)用技術(shù)、樹莓派、三維、OpenCV、OpenGL、

    2024年03月13日
    瀏覽(32)
  • 將運(yùn)動相機(jī)作為電腦攝像頭 - 以Windows+SJCAM C100+為例

    將運(yùn)動相機(jī)作為電腦攝像頭 - 以Windows+SJCAM C100+為例

    確保相機(jī)是 關(guān)機(jī)狀態(tài) (因?yàn)榻酉聛硪〕鯯D卡,為保證數(shù)據(jù)安全)。 取出SD卡。 SD卡會讓你的電腦認(rèn)為它是U盤,所以不需要SD卡。 注意: SD卡移除的方式是按壓彈出。 使用MicroUSB線連接你的電腦。 打開Windows自帶的相機(jī)app。 等待顯示畫面。 看不懂的可以直接參考這個視頻:

    2024年02月16日
    瀏覽(10)
  • windows驅(qū)動開發(fā)8:虛擬攝像頭方案

    一、攝像頭框架 在業(yè)務(wù)場景中,有許多是需要應(yīng)用能夠通過攝像頭的方式來訪問相關(guān)的音視頻數(shù)據(jù),比如美顏、攝像頭多路復(fù)用、IP攝像頭接入視頻會議等。這些功能通過虛擬攝像頭的方式來實(shí)現(xiàn),是一個比較通用的解決方案。那么如何及選用哪種技術(shù)方案來開發(fā)虛擬攝像頭

    2024年02月02日
    瀏覽(16)
  • 怎么讓電腦上的攝像頭無綠幕使用背景虛化/虛擬背景、視頻無綠幕使用背景虛化、虛擬攝像頭無綠幕背景虛化

    怎么讓電腦上的攝像頭無綠幕使用背景虛化/虛擬背景、視頻無綠幕使用背景虛化、虛擬攝像頭無綠幕背景虛化

    參考: https://github.com/aisegmentcn/aisegment_obs_plugin https://obsproject.com/forum/resources/virtual-background-by-aisegment.1546/ 騰訊會議中是可以使用虛擬背景的,但是其他視頻會議軟件沒有,那怎么辦 1. 下載OBS 打開steam,搜索OBS,我成功的這個OBS版本為30.0.2 2. 下載OBS AI虛擬背景插件 https://git

    2024年04月26日
    瀏覽(68)
  • ubuntu20.04下的USB攝像頭使用與標(biāo)定(單目相機(jī))一.使用

    ubuntu20.04下的USB攝像頭使用與標(biāo)定(單目相機(jī))一.使用

    A.查找攝像頭接口 B.在該路徑下修改launch文件,換成你自己的攝像頭接口 C.運(yùn)行攝像頭節(jié)點(diǎn)(此時就能看到畫面了) ?可能會出現(xiàn)的錯誤 1.終端會warning是因?yàn)檫€沒有進(jìn)行攝像頭標(biāo)定,后續(xù)會進(jìn)行講解 2.若用的是虛擬機(jī)但發(fā)出了error,看看你的usb是接入3.0還是2.0處,然后在如下

    2024年02月04日
    瀏覽(196)
  • Android中相機(jī)(Camera)畫面旋轉(zhuǎn)角度分析:手機(jī)攝像頭的“正向”、手機(jī)畫面自然方向、相機(jī)畫面的偏轉(zhuǎn)角度

    #.概述: ?? ?1.如同人眼看東西分上下一樣,攝像頭也有其“正向”,正常情況下,Android手機(jī)后置、前置攝像頭的“正向”朝向?yàn)槭謾C(jī)的“右側(cè)”(默認(rèn)如此,除非手機(jī)廠商修改設(shè)置)。 (這里運(yùn)行代碼做過測試發(fā)現(xiàn),前置攝像頭也是以右側(cè)為正向,而不是有些資料上說的

    2024年02月14日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包