【问题标题】:Converting raw frames into webm live stream将原始帧转换为 webm 实时流
【发布时间】:2015-08-21 12:14:16
【问题描述】:

我有一个具有以下设置的 ASP.NET 应用程序:

  1. 以 656x492 分辨率捕捉原始 RGB 帧的相机
  2. 这些帧在我的 C# 代码中处理(带有一些简单的图像 处理)
  3. 原始图像存储在字节数组中(以及包装在位图容器中)
  4. MISSING MAGIC:将原始图像缓冲区转换为 WebM 流
  5. 在另一端,我有一个函数 HttpResponseMessage 函数,该函数将 WebM 流与 PushStreamContent 函数挂钩(受此 blog post 启发)。此函数将视频文件的块推送到网站。
  6. 播放视频的网站。

我正在努力弄清楚如何实施第 4 点。现在我只能流式传输视频文件。但我想将我的原始缓冲区编码到 WebM 容器中并将其流式传输到我的网站。 point5 的中心代码如下所示:

while (length > 0 && bytesRead > 0)
{
    bytesRead = video.Read(buffer, 0, Math.Min(length, buffer.Length));
    await outputStream.WriteAsync(buffer, 0, bytesRead);
    length -= bytesRead;
}

基本上,我想通过以某种方式将我的原始帧动态编码为 WebM 格式并将它们存储在 buffer 中来替换 video.Read 函数,这样它们就可以作为实时流推送到网站上。有没有直接的方法来做到这一点?如果一些帧被丢弃,那很好。

如果有更好的完全不同的方法,那么我当然也愿意接受建议。

【问题讨论】:

  • 您需要直播还是录制后再流式传输文件?
  • @aergistal:我必须直播。我已经能够录制然后流式传输文件了。
  • 如果您使用管道解决方案,请确保您使用单个连续过程进行编码。否则,您将导致输出流不连续,因为每个新生成的进程都会重置时间戳(接近零的值)。

标签: c# asp.net video-streaming html5-video webm


【解决方案1】:

根据您可以在服务器上执行的操作(在部署 Web 应用程序之外),您可能会考虑将缓冲区写入管道,然后使用在后台运行的 ffmpeg 使用 @ 之类的内容创建流987654323@作为输入参数。

【讨论】:

  • 我可以完全控制服务器!但是有可能只编码视频的一部分吗?
  • 我们一直使用这个(虽然在Linux上,概念是一样的),只要根据需要启动/停止ffmpeg进程。 FFmpeg 也可以(通过 -t 参数)被告知只将 upt 编码到 so so mayn 秒。
  • 这听起来像是一个不错的计划,而且几乎可以奏效。我可以通过管道传输到 ffmpeg,但我无法将 ffmpeg 输出传输回我的应用程序。
  • 我打开了一个关于我的 ffmpeg 问题的新问题:stackoverflow.com/q/32157774/74660
【解决方案2】:

WebM Project 提供用于播放和编码 WebM 的 DirectShow 过滤器

我们提供 DirectShow 过滤器,用于在 Windows 上播放和使用 WebM。在您的系统上安装过滤器后,使用 DirectShow 框架的应用程序(例如 Windows Media Player 等)将能够播放和编码 WebM 媒体

还有一个FFmpegInterop Microsoft 倡议,它使用FFmpeg 多媒体框架。

【讨论】:

    猜你喜欢
    • 2015-11-29
    • 2018-06-09
    • 2019-11-18
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2022-07-07
    • 2010-11-24
    • 1970-01-01
    相关资源
    最近更新 更多