xamarin - Xamarin 表单视频播放器示例 - 获取用于上传的视频字节
问题描述
我正在 Xamarin Forms 应用程序中实现视频播放器,就像 Xamarin 提供的视频播放器示例一样
我可以从手机图库中选择一个视频,将视频播放器源设置为所选视频,然后播放该视频。如何获取所选视频的实际流或字节,以便将其上传到 Blob 存储?
我试过了
使用 (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) ....
其中 fileName 是设置为视频播放器源的所选视频的路径和文件名。它不起作用,因为找不到 Android 文件名字符串。(从 xamarin 表单调用它时)。我意识到即使在 iOS 上文件名也会有所不同。如何深入了解平台特定的实现并获取所选文件的文件字节或流?谢谢
解决方案
我会研究为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)
定义。
推荐阅读
- ios - 如何制作关闭/打开 MKmapView 上的用户位置的代码?
- python - Django REST RetrieveAPIView 组合查询集
- java - JAVA_HOME 设置为无效目录-vs 代码
- awk - 以毫秒为单位查找时间差 awk 或 gawk
- javascript - 使用 useState 存储对象数组的状态
- opencv - 空图像上的空掩模腐蚀产生白色
- asp.net-core - 如何在带有 ViewModel 的 EF Core 中使用 .Include()
- c# - 我找不到如何在我的 xamarin 项目中使用 json 格式
- image-processing - 谁能解释一下 RowSize 和 PixelArraySize 在 BMP 文件格式中的含义?
- r - 如何转换这个数据框?排序因子和组合