微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使来自 iOS 应用的 MP4 录制视频可在 Chrome 上播放?

如何解决如何使来自 iOS 应用的 MP4 录制视频可在 Chrome 上播放?

我有一个 iOS 应用,用户可以在其中在我的服务器上上传自拍视频。之后,审核者在后台网站上看到该视频,然后接受/拒绝该视频。

问题是我从 iOS 客户端应用上传 MP4 视频文件。当我在我网站的 <video> 标签中加载文件 url 时,chrome 不会加载视频(控制台中没有显示错误)。在 Safari 中,一切正常。

经过一些研究,我发现有时,Chrome 无法播放 mp4 视频。奇怪的是,我尝试在我的笔记本电脑上用 chrome 播放其他一些 mp4 视频,它奏效了。好像有几种“种类”的 MP4 编码,而 Chrome 不支持我的客户端应用程序用来编码的一种。

我看到 Chrome 可以处理 .webm 格式,但我花了很多时间到我的服务器(100% cpu 时 4 整分钟......)将 MP4 转换为 WEBM。

我的问题是:

  • (1) 为什么有些 mp4 可以被 Chrome 播放而有些则不能?如何让 Swift AVFoundation 模块以“正确”的 mp4 编码方式对录制的视频进行编码?

  • (2) 如果不可能,我想在用户设备内对客户端的 2 个文件(webm 和 mp4)进行编码(我真的想避免由我的服务器处理这些计算,因为它们看起来像执行时间非常长)。问题是 Apple 没有在文档中提供 webm 作为可能的可翻译格式:https://developer.apple.com/documentation/avfoundation/avfiletype。有什么办法可以在 Swift 中将 mp4 转换为 webm 吗?

  • (3) 如果 (2) 是不可能的,是否将用户视频转换成不同格式的服务器端通常作为“最佳实践”来管理视频文件并使其在所有平台上可用?我的意思是,我是否只是缺少一些客户端技巧来使 mp4 视频可在任何地方播放,还是在处理跨平台视频以预算来自 AWS 的整个 cpu 机器或处理服务器端转换的任何内容时是否正常?

解决方法

无论出于何种原因,Swift 都使用了错误的编码。要以正确的编码进行编码,使其在 Chrome 的 <video> 标签中可用,我在我的 iOS 应用程序中使用过:

if movieFileOutput.availableVideoCodecTypes.contains(.h264) {
    // Use the H.264 codec to encode the video.
    movieFileOutput.setOutputSettings([AVVideoCodecKey: AVVideoCodecType.h264],for: connection!)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。