首页 > 解决方案 > Xamarin 表单视频播放器示例 - 获取用于上传的视频字节

问题描述

我正在 Xamarin Forms 应用程序中实现视频播放器,就像 Xamarin 提供的视频播放器示例一样

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/video-player/

我可以从手机图库中选择一个视频,将视频播放器源设置为所选视频,然后播放该视频。如何获取所选视频的实际流或字节,以便将其上传到 Blob 存储?

我试过了

使用 (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) ....

其中 fileName 是设置为视频播放器源的所选视频的路径和文件名。它不起作用,因为找不到 Android 文件名字符串。(从 xamarin 表单调用它时)。我意识到即使在 iOS 上文件名也会有所不同。如何深入了解平台特定的实现并获取所选文件的文件字节或流?谢谢

标签: xamarinxamarin.forms

解决方案


我会研究为libVLC提供跨平台 .NET/Mono 绑定的 libVLCSharp 库。它们为 Xamarin.Forms 和实现流处理功能最可能需要的功能提供了良好的支持。你想要达到的目标并不简单,但它应该是完全可行的。

首先,您应该查看Stream output的文档:

流输出是 VLC 功能的名称,它允许将 VLC 读取的任何流输出到文件或作为网络流而不是显示它。

相关教程:流到内存(smem)教程

这应该让你开始,但在此过程中肯定会有很多警告。例如,如果您尝试在捕获要上传到某处的字节的同时播放视频,则必须遵守非常紧迫的时间范围。如果您处理流的时间过长,则会减慢播放速度并影响用户体验。


编辑:您可以考虑的另一个选项是直接与 libVLC 的 MediaPlayer 类进行交互,如本答案中所述。示例代码使用 C++,但方法名称在 .NET 绑定中非常相似。

例如,下面的一段代码:

libvlc_video_set_callbacks(mplayer,
                           lock_frame, unlock_frame,
                           0, user_data);

可以通过调用绑定库中的方法来使用 libVLCSharp 实现,如此处所SetVideoCallbacks(LibVLCVideoLockCb lockCb, LibVLCVideoUnlockCb unlockCb, LibVLCVideoDisplayCb displayCb)定义。


推荐阅读