2015-08-21 55 views
1

我有以下设置的ASP.NET应用程序:转换原始帧到WEBM实况流

  1. ,在分辨率656x492
  2. 这些帧在我的C#处理捕获的原始RGB帧的摄像机代码(有一些简单的图像处理 )
  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功能,所以他们可以作为直播推送到网站。有没有一个简单的方法来做到这一点?如果有些帧丢失,那很好。

如果有一个完全不同的方法更好,那么我当然也会提出建议。

+0

你需要流式直播或记录然后流式传输文件吗? – aergistal

+0

@aergistal:我必须直播。我已经能够记录然后流式传输文件。 – Lucas

+0

如果您使用管道解决方案,请确保您使用单个连续过程进行编码。否则,您将导致输出流中的不连续性,因为每个新衍生进程都会重置时间戳(值接近于零)。 – aergistal

回答

2

根据您可以在服务器上做什么,你可能会考虑写你的缓冲到管道(部署Web应用程序之外),然后使用ffmpeg在后台运行,从它的东西,如-f rawvideo -pixel_format rgb24 -video_size 656x492为创建流输入参数。

+0

我完全控制了服务器!但是,只能编码视频块吗? – Lucas

+0

我们一直都在使用(在Linux上allthough,概念是一样的),只需根据需要启动/停止ffmpeg进程即可。 FFmpeg也可以(通过-t参数)告诉只编码upt以等待几秒钟。 –

+0

这听起来像一个很好的计划,它几乎可行。我能够管道到ffmpeg,但我无法将ffmpeg输出传回给我的应用程序。 – Lucas

1

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

我们玩,并与WebM的Windows系统,提供DirectShow过滤器。一旦过滤器系统,使用DirectShow的框架(如Windows Media Player和其他)应用程序上安装就能玩,编码的WebM媒体

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