Xamarin 社区工具包 CameraView 提供的视频文件位置在 IOS 和 Android 上变得无效

问题描述 投票:0回答:1

我正在使用 CameraView 拍摄一系列短视频。我希望稍后可以在应用程序内查看这些视频。我使用 MediaCaptured 事件获取捕获视频的路径并将这些路径保存在 SQLite 数据库中。

第一个问题是在iOS上,当应用程序打开时路径是有效的,但是如果我关闭应用程序并再次打开它,路径就不再有效。我已经通过将视频复制到 AppDataDirectory 来解决这个问题,但这似乎很糟糕,因为我还没有弄清楚如何删除原始视频,所以现在存在视频的两个副本。

第二个问题是在 iOS 和 Android 上,经过一段时间(几天或一周或更长时间)后,这些路径会因某种未知原因而变得无效。

处理这个问题的正确方法是什么?

private void MediaCaptured(object obj)
    {
      MediaCapturedEventArgs args = obj as MediaCapturedEventArgs;

      string sPath = "";

      switch (Device.RuntimePlatform)
      {
        case Device.iOS:
          //On iOS args.Video.File returns a path that isn't valid when the app is restarted. To get around this issue I am copying the file to the App Data Directory.
          //The drawback is there are now two video files and I can't delete the original.
          var pathSplit = args.Video.File.Split('/');

          sPath = Path.Combine(FileSystem.AppDataDirectory, pathSplit[pathSplit.Length - 1]);
          File.Copy(args.Video.File, sPath);

          //TODO Should probalby be deleting the original video but not sure how (or if its possible).
          break;
        case Device.Android:
          sPath = args.Video.File; 
          break;
      }

      SavePathToDB(sPath);
    }
xamarin xamarin.android xamarin.ios filepath camera-view
1个回答
0
投票

我遇到了同样的问题,我花了一段时间才解决它。每次应用程序重新启动时,基本路径似乎都会发生变化,尤其是在 iOS 中。因此,没有必要保存数据库的完整路径,只需文件名就足够了。

解决方案是在运行时使用保存图像/视频时构建的相同基本路径来构建路径。

例如:我将文件保存到Environment.SpecialFolder.MyDocuments

每次您想要访问该文件时,只需将此路径与您的文件名结合起来即可解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.