【发布时间】:2020-10-31 16:30:04
【问题描述】:
我们正在将使用自定义相机视图完成的 Xamarin.iOS 发布功能(类似 Instagram)迁移到 Xamarin Essentials Media Picker。
当试图使用sickvideoasync播放摄像机滚动的视频文件时,我得到了.mov文件,选择同一视频时,但使用以前的版本是.mp4文件!
上一版本文件路径:
/var/mobile/Containers/Data/Application/657B8450-EDD5-4704-98BF-34B3406A8A37/Documents/IM-20201031151047346.mp4
新版本文件路径:
/var/mobile/Containers/Data/Application/C8821691-6B3E-4F25-9E95-7299CD78676A/Library/Caches/trim.DBCDDE49-0D23-4C15-A450-E38E51421DD7.MOV
我能想到的唯一解释是视频在设备中以两种不同的格式存在?
现在是问题的第二部分:
我希望我可以对帖子编辑屏幕使用相同的实现,用户可以在其中添加 cmets、位置等...
这是使用 AVPlayer 实现的,但不支持 .MOV 视频。
有没有办法:
A) 支持 .MOV 的 AVPlayer 的替代品? (首选解决方案)
B) 强制 Xamarin Essentials 获取 mp4 文件?
C) 在应用程序内将 MOV 转换为 mp4? (如果可能的话,我想这可能会很慢)
这是 AVPlayer 的实现:
var videoUrl = GetVideoUrl(mediaViewModel.MediaUrl);
var playerItem = AVPlayerItem.FromUrl(videoUrl);
var player = AVPlayer.FromPlayerItem(playerItem);
var playerLayer = AVPlayerLayer.FromPlayer(player);
player.Seek(CMTime.Zero);
playerLayer.Frame = View.Bounds;
View.Layer.AddSublayer(playerLayer);
【问题讨论】:
-
mov只是一个容器,取决于容器中的内容,AVPlayer 可以/不会播放它。您尝试播放的 mov 中有哪些 a/v 编解码器?此外,iOS 不会在不同的容器中维护同一视频文件的两个副本。 -
如何找出 MOV 文件中的 a/v 编解码器?奇怪的是,当我使用 Xamarin Essentials 媒体选择器打开视频时,我会得到一个 .MOV 文件,而旧实现会为同一视频获取一个 mp4 文件。 @SushiHangover
-
@joseluisgonzalezclua 嗨,如果不介意使用
MPMoviePlayerController,它可以播放.mov文件。 -
@JuniorJiang-MSFT 仅供参考:
MPMoviePlayerController/MPMoviePlayerViewController在 iOS-9 中已被弃用,AVPictureInPictureController/AVPlayerViewController是它们的替代品。但是,同样,这取决于mov容器中的内容,例如:在 ProRes 编解码器中编码并打包在mov中的视频流将无法播放。 -
@SushiHangover Okey,这很酷。然后我们可以使用
AVPlayerViewController来播放mov文件,但取决于文件的容器。
标签: ios xamarin xamarin.ios ios-camera xamarin.essentials