我正在使用 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);
}
我遇到了同样的问题,我花了一段时间才解决它。每次应用程序重新启动时,基本路径似乎都会发生变化,尤其是在 iOS 中。因此,没有必要保存数据库的完整路径,只需文件名就足够了。
解决方案是在运行时使用保存图像/视频时构建的相同基本路径来构建路径。
例如:我将文件保存到Environment.SpecialFolder.MyDocuments
每次您想要访问该文件时,只需将此路径与您的文件名结合起来即可解决问题。