Question by
suh_unity · May 30, 2018 at 06:08 PM ·
androidwebcamtexture
How to turn off webCam in Android?
Hello~ This is Doug. I want to take a picture of WebCam video and after analyzing the picture, want to overwrite a Texture2D image over the webCam video. It is nicely working in a notebook(Surface/Windows). But, it is not working in an Android phone.
In the Android phone, webCam video is shown all the time in front. That is, I cannot stop the webCam(Refer to turnoff( ) method) and cannot overwrite the Texture2D image.
I attach the webCam program.
Thanks in advance~~ //////////////////////////////////////////////////////////////////////////// using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;
public class PhoneCamera : MonoBehaviour {
public bool camAvailable;
public bool camStop; // 515
public WebCamTexture backCam;
// private Texture defaultBackground;
public RawImage background;
public AspectRatioFitter fit;
// Use this for initialization
private void Start () {
// defaultBackground = background.texture;
WebCamDevice[] devices = WebCamTexture.devices;
if (devices.Length == 0) { Debug.Log("No camera detected");
camAvailable = false;
return;
}
Debug.Log("Number of Device "+ devices.Length);
// for 'Surface' back = 0, front = 1 where back is null.
for (int i = 0; i < devices.Length; i++)
{
// android
if (!devices[i].isFrontFacing)
{
backCam = new WebCamTexture(devices[i].name,Screen.width,Screen.height);
}
// MS surface/Windows
//backCam = new WebCamTexture(devices[i].name, Screen.width, Screen.height);
if (backCam == null)
{
Debug.Log("No back camera " + i);
return;
} else Debug.Log("camera available " + i);
backCam.Play();
background.texture = backCam;
camAvailable = true;
camStop = false; // 515
}
}
// turn off or on the webCam
public void turnoff(bool onoff)
{
Debug.Log("turnoff "+onoff);
if (onoff) backCam.Stop();
else backCam.Play();
}
// Update is called once per frame
void Update () {
// delay control 1~2 frames
if (!camAvailable) return;
float ratio = (float)backCam.width / (float)backCam.height;
fit.aspectRatio = ratio;
float scaleY = backCam.videoVerticallyMirrored ? -1f : 1f;
background.rectTransform.localScale = new Vector3(1f, scaleY, 1f);
int orient = -backCam.videoRotationAngle;
background.rectTransform.localEulerAngles = new Vector3(0, 0, orient);
}
}
Comment