将原始帧转换为webm直播流

时间:2015-08-21 12:14:17

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

我有一个ASP.NET应用程序,其中包含以下设置:

  1. 以656x492分辨率捕获原始RGB帧的相机
  2. 这些帧在我的C#代码中处理(带有一些简单的图像 处理)
  3. 原始图像存储在字节数组中(以及包装在Bitmap容器中)
  4. MISSING MAGIC:将原始图片缓冲区转换为WebM流
  5. 另一方面,我有一个函数HttpResponseMessage函数,该函数使用PushStreamContent函数(受此blog post启发)连接WebM流。此功能将视频文件的块推送到网站。
  6. 播放视频的网站。
  7. 我正在努力弄清楚如何实施第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格式并将其存储在video.Read中来替换buffer函数,这样它们就可以像现场一样被推送到网站流。有没有直接的方法来做到这一点?如果某些帧被丢弃,那就没问题了。

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

2 个答案:

答案 0 :(得分:3)

根据您在服务器上可以执行的操作(在部署Web应用程序之外),您可以考虑将缓冲区写入管道,然后使用在后台运行的ffmpeg从中创建流比如-f rawvideo -pixel_format rgb24 -video_size 656x492作为输入参数。

答案 1 :(得分:1)

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

  

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

还有FFmpegInterop Microsoft倡议使用FFmpeg多媒体框架。