我应该使用什么技术从一系列内存位图中生成 WebM 实时流?

What technologies should I use to produce a WebM live stream from a series of in-memory bitmaps?

老板向我提出了一些挑战,这有点超出了我通常的范围,我无法确定我应该使用哪个 technologies/projects。 (我不介意,我有求于人'new' :)

工作:构建一个 .NET 服务器端进程,该进程每秒可以从缓冲区中获取位图 10 次,并 produce/serve 一个 10fps 视频流以在支持 HTML5 的现代浏览器中显示.

我应该在这里寻找什么乐高积木?

戴夫

您需要使用 FFmpeg。这是基本流程:

Your App -> FFmpeg STDIN -> VP8 or VP9 video wrapped in WebM

如果您流式传输这些图像,最简单的方法可能是将位图解码为原始 RGB 或 RGBA 位图,然后将每一帧写入 FFmpeg 的 STDIN。您必须首先读取第一个位图以确定大小和颜色信息,然后使用正确的参数执行 FFmpeg 子进程。完成后,关闭管道,FFmpeg 将完成您的输出文件。如果你愿意,你甚至可以将 FFmpeg 的 STDOUT 重定向到 S3 上的 blob 存储之类的地方。

如果一次上传所有图片,然后然后创建视频,那就更容易了。只需按顺序列出文件并执行 FFmpeg。当 FFmpeg 完成后,你应该有一个视频。

另外一点信息可以帮助您了解如何构建 FFmpeg 命令行:WebM 是一种容器格式。除了跟踪有多少视频流、多少音频流、用于这些流的编解码器、字幕流、元数据(如缩略图)等,它什么都不做。WebM 基本上是 Matroska(.mkv ),但禁用了一些功能,以使浏览器制造商更容易采用 WebM 标准。在 WebM 内部,您至少需要一个视频流。 VP8 和 VP9 是非常兼容的编解码器。如果您想添加音频,Opus 是您可以使用的标准编解码器。

一些帮助您入门的资源: