Lee*_*ley 7 video android ffmpeg node.js ios
我正在为Android和IOS构建一个react本机应用程序,后端API是用NodeJS编写的.
用户可以从手机上传视频,一旦上传用户,他们的朋友就可以观看视频 - 因此视频需要以可在Android和IOS上播放的格式存储.
我的问题涉及用户上传的视频转换.几年前我开发了一个类似的应用程序; 我使用了repo node-fluent-ffmpeg,它提供了一个很好的API来与FFmpeg进行交互.
在之前的项目(这是一个Web应用程序)中,我将上传的视频转换为两个文件,一个.mp4和一个.webm - 如果用户上传了mp4,那么我会跳过mp4步骤,同样如果他们上传了一个. WEBM.
这有点慢.现在我几年后遇到了同样的要求,经过一些研究后我认为将视频转换为最后一个项目是错误的.
我已经读过,我可以简单地使用FFmpeg来改变视频的容器格式,这比从头开始转换它们要快得多.
我上次使用的视频转换代码有以下几点:
var convertVideo = function (source, format, output, success, failure, progress) {
var converter = ffmpeg(source);
var audioCodec = "libvorbis";
if (format.indexOf("mp4") != -1) {
audioCodec = "aac";
}
converter.format(format)
.withVideoBitrate(1024)
.withAudioCodec(audioCodec)
.on('end', success)
.on('progress', progress)
.on('error', failure);
converter.save(output);
};
Run Code Online (Sandbox Code Playgroud)
用法:
转换为mp4:
convertVideo("PATH_TO_VIDEO", "mp4", "foo.mp4", () => {console.log("success");});
Run Code Online (Sandbox Code Playgroud)
转换为webm:
convertVideo("PATH_TO_VIDEO", "webm", "foo.webm", () => {console.log("success");});
Run Code Online (Sandbox Code Playgroud)
任何人都可以在这里指出有关此操作性能的代码味道吗?这个代码是否比它应该实现IOS和Android之间的跨平台兼容性要多得多?
可能值得一提的是,在这个项目中,对旧操作系统版本的支持并不是什么大问题.
编解码器和容器/格式有什么区别?
您应该了解编解码器(例如 H.264、VP9)和容器格式(例如 MP4、WebM)之间的区别。容器只存储编码的视频和音频信息。通常,您可以通过流复制 ( ffmpeg -i input -c copy output)在容器之间切换,但是由于历史原因,您会发现某些容器不接受某些编解码器,或者某些播放器可能无法处理容器内的编解码器(例如,只有最近的软件才会能够读取 MP4 格式的 VP9 视频)。查看此容器格式概述以了解支持哪些编解码器。
不同的移动操作系统有哪些限制?
对于针对 iOS 和 Android 平台,您需要检查给定的视频文件是否与支持的编解码器/格式兼容:
当然,你可能会随着时间而改变,但一般来说,共同点是:
具体的限制显然取决于设备和安装的操作系统版本。iOS/Android 文档中并未提及所有这些细节。您绝对应该进行一些试验,如果不确定,请重新编码视频。
那么,我应该使用什么编解码器/格式进行编码?
苹果在MPEG生态系统上投入了大量资金,传统上对H.264和H.265(HEVC)的支持较好;他们不支持 WebM 中的 VP8 和 VP9。因此,如果您有一个 VP8/VP9 视频,并且希望它可以跨平台观看,请将其重新编码为 H.264。
我应该如何进行实际编码?
确保您使用足够高的比特率,以免向已经有损的视频添加更多伪影。您不应该像现在那样只进行一次目标比特率编码。相反,进行两次编码以提高编码的质量和效率(尽管需要更长的时间)。如果您不关心特定文件大小(例如libx264 的 CRF),您也可以使用恒定质量模式。阅读FFmpeg H.264 编码指南了解更多信息。
未来呢?
请注意,几乎所有科技行业的大玩家(Apple 除外)都加入了开放媒体联盟。他们正在开发 VP9 的后继产品,称为“ AV1 ”,它将获得所有主要浏览器供应商(Chrome、Firefox、Edge)和 Android 的支持。
H.265 / HEVC 似乎也是一个不错的选择,但与最流行的开源 H.264 编码器x265相比x264,例如,编码目前仍然非常慢。
| 归档时间: |
|
| 查看次数: |
2300 次 |
| 最近记录: |