我无法访问 Xamarin.Forms 项目中嵌入的 .mp4 文件。根据Xamarin.Forms 中的文件处理 https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/files?tabs=vswin文件说,
每个平台上文件的路径可以从 .NET 确定
标准库通过使用值Environment.SpecialFolder
枚举作为第一个参数Environment.GetFolderPath
方法。然后可以将其与文件名组合Path.Combine
method.
我还按照页面上的说明进行操作,告诉您确保将文件的“构建操作”设置为“EmbeddedResource”。最终我试图获取文件的路径/url,以便我可以将其传递到媒体管理器 https://github.com/martijn00/XamarinMediaManager's CrossMediaManager.Current.Play()
功能。下面是一些代码,无论我如何调整它,它都会不断失败。其中大部分内容直接取自上面链接的 Xamarin 文档:
// Gets the path to the video file.
string fileDirectory = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
string file = "Signing.video.banana.mp4";
string pathToFile = Path.Combine(fileDirectory, file);
// Print some info about the file and its directory
System.Diagnostics.Debug.WriteLine(pathToFile);
System.Diagnostics.Debug.WriteLine(File.Exists(pathToFile));
.mp4 文件位于名为“video”的文件夹中,该文件夹直接位于“Signing”项目中。我尝试调整文件路径,使其只是文件,只是文件和视频文件夹,并且我尝试使用“/”而不是“。”来分隔目录。我总是得到的打印输出是该文件不存在。在 iOS 模拟器上运行时,打印的路径总是如下所示:
/Users/doug/Library/Developer/CoreSimulator/Devices/FD9E9045-EF6A-4ECA-9192-25CEC0E7C23C/data/Containers/Data/Application/AF92806E-C68F-45ED-814D-C383821F470A/Documents/Signing.video.banana.mp4
我见过建议将“file://”附加到文件路径的前面,以及其他类似的建议。什么都不起作用。如何在 Xamarin.Forms 中嵌入文件并稍后检索其文件路径?
您需要将程序集嵌入资源复制到临时文件中,以便 MediaManager 播放它。
Using Xamarin.Essentials
您可以获取操作系统的缓存目录,然后将资源复制到其中并通过file://
url.
Example:
var cacheFile = Path.Combine(FileSystem.CacheDirectory, "cached.mp4");
if (File.Exists(cacheFile))
File.Delete(cacheFile);
using (var resource = Assembly.GetExecutingAssembly().GetManifestResourceStream("YourFullEmbeddedResourceResourceID.mp4"))
using (var file = new FileStream(cacheFile, FileMode.Create, FileAccess.Write))
{
resource.CopyTo(file);
}
await CrossMediaManager.Current.Play(new MediaFile("file://localhost/" + cacheFile, MediaFileType.Video, ResourceAvailability.Local));
Note:就我个人而言,我不会使用嵌入式资源,因为它们会使您的程序集(或本机库中的 .text 段)膨胀,从而消耗应用程序内存,导致加载时间变慢等......,但使用基于本机捆绑包/资产的文件并将它们复制到缓存目录。您可以使用 Xamarin.Essentials 通过以下方式获取这些只读捆绑/资产文件OpenAppPackageFileAsync
并使用该流将文件复制到缓存目录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)