【问题标题】:What technologies should I use to produce a WebM live stream from a series of in-memory bitmaps?我应该使用哪些技术从一系列内存位图生成 WebM 实时流?
【发布时间】:2016-12-24 21:15:54
【问题描述】:

老板给了我一个有点超出我通常范围的挑战,我无法确定我应该使用哪些技术/项目。 (我不介意,我要了一些“新”的东西:)

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

我应该在这里寻找哪些乐高积木?

戴夫

【问题讨论】:

    标签: html5-video live-streaming webm


    【解决方案1】:

    你会想要使用 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 是您可以使用的标准编解码器。

    一些帮助您入门的资源:

    【讨论】:

    • 关于我如何从 ffmpeg 的 STDOUT 转到浏览器的任何提示?
    • @davecove 您想将输出直接流式传输到浏览器吗?只需将流通过管道传输到客户端流。自从我使用 .NET 以来已经有很多年了,但它就是这样。确保您的内容类型标头正确,并且您使用的是分块传输编码。
    猜你喜欢
    • 1970-01-01
    • 2017-04-03
    • 2011-03-06
    • 2010-09-22
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    相关资源
    最近更新 更多