2016-02-18 10:17:09 wuyt2008 阅读数 11857

先上代码

using UnityEngine;
using System.Collections;

public class WebCamManager : MonoBehaviour {

	// Use this for initialization
	void Start () {

		WebCamTexture webcamTexture = new WebCamTexture ();

		//如果有后置摄像头,调用后置摄像头
		for (int i = 0; i < WebCamTexture.devices.Length; i++) {
			if (!WebCamTexture.devices [i].isFrontFacing) {
				webcamTexture.deviceName = WebCamTexture.devices [i].name;
				break;
			}
		}

		Renderer renderer = GetComponent<Renderer>();
		renderer.material.mainTexture = webcamTexture;
		webcamTexture.Play();
	}

}


在场景里面添加一个plane


调整plane的位置,并把脚本拖上去,运行就可以了。



如果是要在GUITexture上显示,则代码如下:

using UnityEngine;
using System.Collections;

public class WebCamManager : MonoBehaviour {

	// Use this for initialization
	void Start () {

		WebCamTexture webcamTexture = new WebCamTexture ();

		//如果有后置摄像头,调用后置摄像头
		for (int i = 0; i < WebCamTexture.devices.Length; i++) {
			if (!WebCamTexture.devices [i].isFrontFacing) {
				webcamTexture.deviceName = WebCamTexture.devices [i].name;
				break;
			}
		}

		GUITexture guiTexture = GetComponent<GUITexture> ();
		guiTexture.texture = webcamTexture;
		webcamTexture.Play ();
	}
}


如果在本机调试的时候出现以下错误提示

Cannot use web cam, since the user has not authorized this!

这是没有使用摄像头的权限,build一次安卓应用再试就好了,或者使用以下代码,先判断权限

using UnityEngine;
using System.Collections;

public class WebcamManager : MonoBehaviour {

	// Use this for initialization
	void Start () {
		StartCoroutine ("CallWebCam");
	}

	IEnumerator CallWebCam(){
		yield return Application.RequestUserAuthorization (UserAuthorization.WebCam);

		if (Application.HasUserAuthorization (UserAuthorization.WebCam)) {
			WebCamTexture webcamTexture = new WebCamTexture ();  

			//如果有后置摄像头,调用后置摄像头  
			for (int i = 0; i < WebCamTexture.devices.Length; i++) {  
				if (!WebCamTexture.devices [i].isFrontFacing) {  
					webcamTexture.deviceName = WebCamTexture.devices [i].name;  
					break;  
				}  
			}  

			GUITexture guiTexture = GetComponent<GUITexture> ();  
			guiTexture.texture = webcamTexture;  
			webcamTexture.Play ();  
		} else {
			Debug.Log ("has not authorization");
		}
	}
	

}



2018-09-25 15:17:33 Lsc_hei 阅读数 2783

一、前一段时间实现了通过winform调取摄像头的实时监控运行程序,详见源码:https://download.csdn.net/download/lsc_hei/10652399

二、现在需求改变,要在unity3d中直接显示摄像头捕捉到的实时画面,不能再调用exe文件,所以在网上寻找解决方案找到两个比较靠谱的unity接入海康网络摄像头的多种实现方法    写的很细致,把demo下载后却因一个dll文件无法运行,又下了一个dll花了几个积分,结果毛用没有。。。

搞过来搞过去还是没用呐,算了,自己搞,搞了半天终于用最简的方法做出了想要的效果    

步骤如下:

先是下载一个UMP插件,安装 ,导入unity3d中 随便建一个材质球 然后在pathtoVideoFile选项中设置rtsp协议(即配置路径),ip 账号 密码 端口号 所属主还是子码流类型 等 

 嗯 最后完美解决 中间几乎没敲什么代码 在材质球中想怎么展示就怎么展示 美滋滋 文章最后 附上地址 

三、rtsp知识点介绍:

RTSP为取流协议,取到码流后需要解码显示,可以通过VLC播放器进行测试,IE等浏览器网页不支持RTSP协议直接取流预览或者回放。 

海康威视IP摄像头rtsp协议地址如下:

rtsp://[username]:[passwd]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream

说明:

username:用户名,例如admin

passwd:密码,例如12345

ip:设备的ip地址,例如192.0.0.64

port:端口号默认554,若为默认可以不写

codec:有h264、MPEG-4、mpeg4这几种

channel:通道号,起始为1

subtype:码流类型,主码流为main,子码流为sub

例如,请求海康IP摄像机通道1的码流,url如下:

主码流:

rtsp://admin:12345@192.0.0.64:554/h264/ch1/main/av_stream rtsp://admin:12345@192.0.0.64:554/MPEG-4/ch1/main/av_stream

子码流:

rtsp://admin:12345@192.0.0.64/mpeg4/ch1/sub/av_stream

rtsp://admin:12345@192.0.0.64/h264/ch1/sub/av_stream 

参照地址:

2.最新海康摄像机、NVR、流媒体服务器、回放取流RTSP地址规则说明

3.海康摄像头RTSP  

四、最后附上demo下载地址:https://download.csdn.net/download/lsc_hei/10686125      

 

2016-03-13 18:11:30 u012741077 阅读数 4466

Unity Remote4支持Android与IOS(iPhone, iPad and iPod touch)设备的调试。
调试Android程序需要在Windows或OSX系统下使用USB连接设备。
调试IOS程序需要在OSX系统下使用USB连接设备。

调试时,Unity3D Game视图上的画面会推送到设备上,而设备中的以下数据则会返回到编辑器之中。

  • 触摸输入
  • 加速计
  • 陀螺仪
  • 摄像头
  • GPS

因为程序仍然是运行在编辑器上的,远端应用程序只是用于显示与接受输入信息,所以不能当成是完整的调试。

接下来讲解如何使用这中方法调试Android程序。

首先需要获取Unity Remote4,可以在Unity Asset Store中搜索下载,下载完成后导入一个新的空工程,如下图:
这里写图片描述

然后就可以生成Unity Remote4 程序了。
由于在导入资源包后,编辑器会添加一个Build菜单,则可使用其中的Build Android功能来生成Android程序。

生成后的文件在build目录下,名为:

UnityRemoteNG-Android.apk

至此,我们得到了调试客户端程序。

接下来是使用教程。

首先,调整Unity工程中的属性,依次打开菜单:

Edit->Project Settings->Editors

并做如下调整:
这里写图片描述

然后,将设备设置为开发者模式并允许USB调试,并将Unity Remote4安装到Android设备当中且将其打开,然后使用USB连接计算机。
程序打开后如下图:
这里写图片描述

最后就可以直接在Unity编辑器中运行程序了,Game视图中显示的图像会推送到设备当中,设备的输入则会返回到编辑器当中。

如果编辑器中运行后,设备中仍未显示的话,可以重新启动一下编辑器或重新连接一下设备,再或者使用Android SDK目录下的工具查看设备是否连接了,可使用以下命令查看:

adb devices

这里写图片描述

最后附上Unity资源包和打包好的andriod程序,见CSDN 下载:
Remote4_unitypackage_apk.zip:http://download.csdn.net/detail/u012741077/9460330
如有疑问,请留言。

这里写图片描述

2016-07-25 11:28:00 OnafioO 阅读数 49

Unity3D中调用外接摄像头,并保存为图片文件

http://bbs.9ria.com/thread-170539-1-1.html

项目要求调用摄像头,并且把图像保存下来,上传到服务器。 

这里有几个难点,调用摄像头是很简单的,unity已经提供好了接口,我们只需要调用就行。

问题就是怎么把图片保存下来。我们来看下代码。

public string deviceName;
WebCamTexture tex;//接收返回的图片数据
/// <summary>
/// 实现IEnumerator接口,这里使用了一个协程,相当于多线程。
/// 这里是调用摄像头的方法。
/// </summary>
/// <returns></returns>
IEnumerator test()
{
yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);//授权
if (Application.HasUserAuthorization(UserAuthorization.WebCam))
{
WebCamDevice[] devices = WebCamTexture.devices;
deviceName = devices[0].name;
//设置摄像机摄像的区域
tex = new WebCamTexture(deviceName, 400, 300, 12);
tex.Play();//开始摄像
}
}


这段代码就是Unity调用摄像头的方法,图片数据就保存在tex中。 
下面看这段怎么使用上面的那段代码。




   
void OnGUI()
{
//开始按钮
if (GUI.Button(new Rect(0, 0, 100, 100), "click"))
{
//调用启动那个协程,开启摄像头
StartCoroutine(test());
}
//暂停
if(GUI.Button(new Rect(0,200,100,30),"pause"))
{
tex.Pause();
//这个方法就是保存图片
StartCoroutine(getTexture2d());
}

//重启开始
if (GUI.Button(new Rect(0, 300, 100, 30), "restart"))
{
tex.Play();
}
if (GUI.Button(new Rect(100, 0, 100, 30), "摄像"))
{
//开始摄像,摄像就是一系列的图片集合
StartCoroutine(getTexture2dshexiang());
}
if(tex!=null)
GUI.DrawTexture(new Rect(200, 200, 200, 180), tex);
}



保存图片是一个难点,找了半天,才发现这个方法来实现   


/// <summary>
/// 获取摄像头截取的图片,这里也是一个协程
/// </summary>
/// <returns></returns>
IEnumerator getTexture2d()
{
yield return new WaitForEndOfFrame();
Texture2D t = new Texture2D(200, 180);//要保存图片的大小
//截取的区域
t.ReadPixels(new Rect(200, 320, 200, 180), 0, 0, false);
t.Apply();
//把图片数据转换为byte数组
byte[] byt = t.EncodeToPNG();
//然后保存为图片
File.WriteAllBytes(Application.dataPath + "/shexiang/" + Time.time + ".jpg", byt);
}




保存文件的路径需要自己来设置,要保存的区域大家自己可以来调。
posted @ 2016-07-25 11:28 00000000O 阅读(...) 评论(...) 编辑 收藏
没有更多推荐了,返回首页