当前默认是保存在Android/data/包名/files
又尝试更改路径到/storage/dmic
但是会报错(是因为这个路径算外部路径吗)
不知道怎么操作。希望是保存的录屏在系统相册视频中能够查看
首先,您需要确保您的设备有拓展存储卡,并且您有权在其中创建文件。 具体的步骤如下:
打开 Unity 的项目,并创建一个新的 C# 脚本,命名为“ScreenRecorder”。
在 ScreenRecorder 脚本中,添加以下代码:
using EasyAR;
using System.IO;
using UnityEngine;
public class ScreenRecorder : MonoBehaviour
{
public string folderName = "EasyAR Screen Recordings";
public string fileName = "EasyARScreenRecording";
public int recordingWidth = 720;
public int recordingHeight = 1280;
private ScreenRecorderBase recorderBase;
private string rootPath;
private void Start()
{
rootPath = Path.Combine(Application.persistentDataPath, folderName);
recorderBase = GetComponent<ScreenRecorderBase>();
recorderBase.RecordingWidth = recordingWidth;
recorderBase.RecordingHeight = recordingHeight;
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.R))
{
if (recorderBase.IsRecording)
{
recorderBase.StopRecording();
string filePath = Path.Combine(rootPath, fileName + ".mp4");
Debug.Log("Screen recording saved to: " + filePath);
// add code here to copy the recording to a public folder
// ...
}
else
{
recorderBase.StartRecording();
Debug.Log("Screen recording started");
}
}
}
}
在新的脚本中,修改 rootPath 变量的值为所需的文件夹路径,例如:
rootPath = Path.Combine("/storage/emulated/0/DCIM", folderName);
4、在 Update 函数中,添加以下代码:
if (recorderBase.IsRecording)
{
recorderBase.StopRecording();
string filePath = Path.Combine(rootPath, fileName + ".mp4");
Debug.Log("Screen recording saved to: " + filePath);
// copy the recording to a public folder
string publicFilePath = Path.Combine("/storage/emulated/0/DCIM/Camera", fileName + ".mp4");
File.Copy(filePath, publicFilePath, true);
// refresh the Android Gallery to show the newly added file
AndroidJavaClass class
先得在AndroidManifest.xml 文件中声明读写外部存储的权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
更改路径到 /storage/dmic 时遇到系统权限问题。不妨先看一哈你的应用程序有没有足够的权限读取和写入 /storage/dmic 路径。
最后,必须在保存录屏之前就创建了该路径,否则就报错。可以使用 Directory.CreateDirectory 方法创建目录。
string path = "/storage/dmic/";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
在使用EasyAR录屏更换视频保存路径时,首先你需要在Unity中找到EasyAR Video Player组件,然后将组件的Save Path属性设置为你想要保存的路径。然后再在Inspector面板中的Player设置中,勾选enable save on record参数,点击Recording按钮即可开始录制视频。
根据您描述的问题,unity使用easyar录制的视频更换路径报错的现象,这里提供几种原因和解决方法:
1.没有动态申请到存储权限,解决方法就是在代码中申请权限。
2.dmic这个目录可能不存在,你可以在代码中,先判断这个目录是否存在,不存在则先创建目录。
3.你需要将视频保存在系统相册里面,那你需要先获取存储路径。这里你可以参考:
https://www.jianshu.com/p/e3e8fb749e9f
更改视频保存路径的代码将取决于使用的EasyAR库的版本和实现。如果该库没有提供直接修改保存路径的方法,则需要自行实现。
更改保存路径时需要注意Android的文件访问权限问题。如果尝试访问不允许访问的外部路径,则会报错。请在程序代码中检查是否有请求该权限的代码,并在安卓清单文件中配置该权限。
为了使录屏能够在系统相册中查看,需要将录屏文件复制到系统相册的目录中。您可以使用Unity的File.Copy函数实现此功能。如果需要进一步帮助,请提供更多信息,例如使用的EasyAR库版本,代码片段,错误详细信息等。
该回答引用ChatGPT
请参考下面的解决方案,如果有帮助,还请点击 “采纳” 感谢支持!
在 Android 中,如果要将文件保存到外部存储器,您需要请求读写外部存储的权限,并使用 Environment.getExternalStorageDirectory() 方法获取外部存储的根目录。
以下是示例代码:
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/dmic";
File directory = new File(path);
if (!directory.exists()) {
directory.mkdirs();
}
File file = new File(directory, "video.mp4");
// 在这里执行录屏操作并将录屏保存到 file 对象指定的路径
请注意,在 Android 6.0 及更高版本中,必须动态请求读写外部存储器的权限。
要在系统相册中查看录屏,您需要通知媒体扫描器扫描新的视频文件。您可以使用以下代码实现:
MediaScannerConnection.scanFile(this,
new String[] { file.toString() }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
如果您想将 EasyAR 录制的视频保存到系统相册,您需要使用其他方法将该文件复制到相册路径。您不能直接将该文件保存到相册中。
首先,您可以试图通过使用 Android 的文件管理器或 Android API 方法来复制录制的视频文件到相册路径。具体的,您可以使用下面的代码来复制文件:
```c#
using UnityEngine;
using System.IO;
using System.Threading.Tasks;
public class SaveToGallery : MonoBehaviour
{
private string sourceFile;
private string destinationFile;
private async void Start()
{
sourceFile = Path.Combine(Application.persistentDataPath, "recorded_video.mp4");
destinationFile = Path.Combine(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryMovies).AbsolutePath, "recorded_video.mp4");
await MoveFile(sourceFile, destinationFile);
}
private async Task MoveFile(string source, string destination)
{
using (FileStream sourceStream = new FileStream(source, FileMode.Open, FileAccess.Read))
{
using (FileStream destinationStream = new FileStream(destination, FileMode.CreateNew, FileAccess.Write))
{
await sourceStream.CopyToAsync(destinationStream);
}
}
}
}
请注意,您需要在 Android 清单文件中设置读写存储权限,才能在 Android 设备上进行读写操作。
最后,您还可以使用其他方法(例如插件)将录制的视频文件复制到相册路径。希望这对您有所帮助。
```
如果您想在Unity中使用EasyAR录屏更换视频保存路径,您可以考虑以下步骤:
导入EasyAR录屏插件:您需要导入EasyAR录屏插件,以使用录屏功能。
获取录屏代码:您需要获取录屏代码,以开始录屏。
更改视频保存路径:您需要更改视频保存路径,以将视频保存到您想要的位置。
保存视频:您需要调用保存视频的函数,以将录制的视频保存到指定路径。
android 11系统开始强制分区存储,也就是针对于外部存储区域,每个应用也只能访问自己的特定的区域,不可以像之前android一样,访问整个外置存储区域
在Unity中使用EveryPlay录制视频时,有如下问题:
EveryPlay API(截止到现在,之后Final Version可能会增加)不支持保存视频到本地。仅支持分享到facebook、twitter等国外平台。
EveryPlay 在iOS上录制视频,若使用OpenGL ES图形API,则视频会上下颠倒。
GitHub上此插件可完好解决此问题:
https://github.com/yasirkula/UnityEveryplaySaveToLocal
如果只是想获取EveryPlay在本地保存的录制视频的路径,可通过:
http://answers.unity3d.com/questions/1224739/everyplay-video-local-file.html
在https://forum.unity.com/threads/using-everyplay-to-save-screen-recording-to-mobile-gallery.510751/
Unity中使用EasyAR录屏保存路径的更改,可以通过修改EasyAR的源代码来实现。
首先,找到EasyAR的源代码,比如在Unity中,可以在Assets目录下找到EasyAR的源代码,比如EasyAR/Core/Video/Recorder/Recorder.cs,打开该文件,找到以下代码:
private string GetOutputFilePath()
{
return Path.Combine(Application.persistentDataPath, "EasyARRecorder.mp4");
}
该函数用于获取录屏视频的保存路径,可以修改该函数,比如将Application.persistentDataPath替换为/storage/dmic,即可将录屏视频保存到/storage/dmic路径下:
private string GetOutputFilePath()
{
return Path.Combine("/storage/dmic", "EasyARRecorder.mp4");
}
修改完成之后,重新编译EasyAR即可。
EasyAR录屏可以设置视频保存路径,打开EasyAR录屏设置,在“视频设置”中可以设置视频文件的保存路径。如果要在Unity中更换EasyAR录屏的视频保存路径,可以使用EasyAR的API函数来实现:
EasyARRecorder.SetOutputFilePath(string path);
参数path为视频文件的保存路径,可以使用Application.persistentDataPath来获取Unity中的路径。
如果你想在 Android 设备上保存录制的视频到系统相册,您需要使用 Android 平台的系统 API 进行存储。
您可以使用 Android 平台的 MediaStore API 将录制的视频保存到系统相册中。以下是一个例子:
using UnityEngine;
using System.IO;
using Android.Media;
public class SaveToAlbum : MonoBehaviour
{
string videoFilePath = "/storage/emmc/DCIM/Camera/video.mp4";
public void SaveVideoToAlbum()
{
if (File.Exists(videoFilePath))
{
ContentValues values = new ContentValues();
values.Put(MediaStore.Video.Media.InterfaceConsts.Title, "video");
values.Put(MediaStore.Video.Media.InterfaceConsts.MimeType, "video/mp4");
values.Put(MediaStore.Video.Media.InterfaceConsts.Data, videoFilePath);
AndroidJavaClass mediaScannerConnection = new AndroidJavaClass("android.media.MediaScannerConnection");
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject context = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
mediaScannerConnection.CallStatic("scanFile", context, new string[] { videoFilePath }, null, new AndroidJavaObject("android.media.MediaScannerConnection.OnScanCompletedListener"));
}
}
}
请注意,您需要在 videoFilePath 变量中提供录制视频的完整文件路径。
希望这些信息对您有所帮助!