屏幕錄像不是增強現實的功能,只是EasyAR SDK自帶的一個功能。該功能限制頗多,只能在移動設備上使用,而且沒有辦法直接錄製UI界面。屏幕錄像功能本質上錄的是RenderTexture。
總體說明
主要是在基礎結構上添加了一個【VideoRecorder】遊戲對象。另外,需要動態的往【Main Camera】主攝像機遊戲對象上添加【CameraRecorder】腳本。
CameraRecorder腳本相關
- CameraRecorder腳本需要動態添加到Main Camera主攝像機遊戲對象上,該腳本可以通過Setup方法設置錄像內容的水印。
VideoCameraDevice遊戲對象相關
- Enable屬性可以用於關閉攝像頭內容,這樣,就能只錄制屏幕內容。
- Camera Size屬性用於設置攝像頭獲取的視頻的分辨率。
VideoRecorder遊戲對象相關
- Profile屬性用於設置錄製效果,最高可以錄製1080高清內容。
- Qrientation屬性用於設置錄像時候是橫屏(Landscape)還是豎屏(Portratit),或者根據當前屏幕情況設定(Screen Adaptive)。
- Record Zoom Mode屬性設置屏幕錄製。NoZoomAndClip:如果輸出寬高比與輸入不符,內容會被剪裁到適合輸出比例。ZoomInWithAllContent:如果輸出寬高比與輸入不符,內容將不會被剪裁,在某個維度上會有黑邊。
- File Path Type屬性設置文件的路徑類型,“Absolute”是絕對路徑,“Persistent Data Path”是相對於持久數據路徑的相對路徑。通常使用後者,因爲該路徑下能保證可寫入。
- File Path屬性用於設置錄製後保存的視頻文件的具體路徑及文件名。
取消多線程渲染
取消Other Settings標籤下Multithreaded Rendering選項
使用屏幕錄像功能
- 只導入EasyAR4.0 SDK,要使用屏幕錄像功能還比較麻煩,還需要將官方示例中的一個腳本導入過來,這樣使其起來會簡單很多。
- 設置場景中的Main Camera的Clear Flags屬性爲Solid Color。
- 將EasyAR/Prefabs/Composites目錄下的EasyAR_VideoCamera預製件拖到場景中。
- 將EasyAR/Prefabs/Primitives目錄下的VideoRecorder預製件拖到場景中。
- 設置Videorecorder屬性,設置File Path Type爲Persistent Data Path,設置File Path爲具體文件名。
添加2個按鈕用於開始和停止錄像,添加一個文本框顯示提示。
編寫腳本。
- 在腳本的“Awake”事件中,添加對“StatusUpdate”事件的偵聽內容。將獲取到的信息顯示到文本框。
- 添加開始錄製的方法。在運行了“StartRecording”事件後,還需要動態的往主攝像機上添加“CameraRecoder”腳本,並運行該腳本的“Setup”方法。
- 添加停止錄像的方法,停止後,還需要刪除動態添加的腳本。
using UnityEngine;
using UnityEngine.UI;
using easyar;
using VideoRecording;
public class RecorderController : MonoBehaviour
{
public Text uiText;
public VideoRecorder videoRecorder;
private CameraRecorder cameraRecorder;
private void Awake()
{
videoRecorder.StatusUpdate += (status, msg) =>
{
if (status == RecordStatus.OnStarted)
{
uiText.text = "Recording start";
}
if (status == RecordStatus.FailedToStart ||
status == RecordStatus.FileFailed || status == RecordStatus.LogError)
{
uiText.text = "Recording Error: " + status + ", details: " + msg;
}
Debug.Log("RecordStatus: " + status + ", details: " + msg);
};
}
public void StartRecorder()
{
videoRecorder.StartRecording();
cameraRecorder =
Camera.main.gameObject.AddComponent<CameraRecorder>();
cameraRecorder.Setup(videoRecorder, null);
}
public void StopRecorder()
{
if (videoRecorder.StopRecording())
{
uiText.text = "Recording stop " + videoRecorder.FilePath;
}
else
{
uiText.text = "Recording failed";
}
if (cameraRecorder)
{
cameraRecorder.Destroy();
}
}
}
運行以後,點擊按鈕就可以開始錄像,文本框會顯示開始錄製的提示“Recording start”。點擊停止按鈕,就會停止錄像。
錄像的結果會保存在持久數據目錄下,具體目錄位置請查看Unity官方文檔
https://docs.unity3d.com/2018.4/Documentation/ScriptReference/Application-persistentDataPath.html