unity使用easyar录屏更换视频保存路径

当前默认是保存在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录屏更换视频保存路径,您可以考虑以下步骤:

  1. 导入EasyAR录屏插件:您需要导入EasyAR录屏插件,以使用录屏功能。

  2. 获取录屏代码:您需要获取录屏代码,以开始录屏。

  3. 更改视频保存路径:您需要更改视频保存路径,以将视频保存到您想要的位置。

  4. 保存视频:您需要调用保存视频的函数,以将录制的视频保存到指定路径。

android 11系统开始强制分区存储,也就是针对于外部存储区域,每个应用也只能访问自己的特定的区域,不可以像之前android一样,访问整个外置存储区域

在Unity中使用EveryPlay录制视频时,有如下问题:

  1. EveryPlay API(截止到现在,之后Final Version可能会增加)不支持保存视频到本地。仅支持分享到facebook、twitter等国外平台。

  2. 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 变量中提供录制视频的完整文件路径。

希望这些信息对您有所帮助!