【问题标题】:How to play .MOV files in Xamarin iOS如何在 Xamarin iOS 中播放 .MOV 文件
【发布时间】: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


【解决方案1】:

我认为 GetVideoUrl 不正确。

通过将其更改为 NSUrl.CreateFileUrl(videoUrl, null);有效。即使是 mov 文件!

感谢您的支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多