使用.NET上的H.264编码WebCam帧

时间:2012-03-03 19:37:08

标签: windows webcam encode h.264 live-streaming

我想要做的是以下程序:

  1. 从网络摄像头获取一个框架。
  2. 使用H264编码器对其进行编码。
  3. 使用我自己的“协议”创建一个包含该帧的数据包,通过UDP发送。
  4. 接收并解码...
  5. 这将是直播。

    我只需要第二步的帮助。 我正在使用AForge Framework检索相机图像。

    我不想将帧写入文件然后解码它们,我想这会非常慢。

    我想在内存中处理编码帧,然后创建要发送的数据包。

    我需要使用开源编码器。已经尝试使用此示例后的x264

    How does one encode a series of images into H264 using the x264 C API?

    但似乎它只能在Linux上运行,或者至少在我尝试使用visual c ++ 2010编译示例时看到50个错误之后的想法。

    我必须明确表示我在写这篇文章之前已经做过很多研究(1周阅读),但却无法找到(简单)方法。

    我知道有RTMP协议,但视频流总是在一个(/?)时间由一个peroson看到,而RTMP更倾向于流向许多人。此外,我已经使用我制作的adobe flash应用程序流式传输但是太迟了¬¬。

    还希望您给我一个关于它是否可以逐个发送帧的建议,或者如果在每个数据包中发送更多帧会更好。

    我希望至少有人可以指出(正确?)正确的方向。

    我的英语不好也许是等等。 :P

    PS:不必在.NET中,只要它适用于Windows,它就可以使用任何语言。

    很多很多人都提前感谢。

1 个答案:

答案 0 :(得分:2)

您可以尝试使用Microsoft的DirectShow技术。有一个opensource x264包装器可以在Monogram下载。

如果您下载过滤器,则需要使用regsvr32将其注册到操作系统。我建议做一些快速测试,看看这种方法是否可行,使用GraphEdit工具将网络摄像头连接到编码器,并查看配置选项。

  

还希望您给我一个关于它是否可以逐个发送帧的建议,或者如果在每个数据包中发送更多帧会更好。

这实际上取决于所需的延迟:您打包的帧越多,标头开销越少,但由于您必须等待多个帧进行编码才能发送它们,因此延迟越多。对于实时流,延迟应保持最小,并且使用的典型协议是RTP / UDP。这意味着您的最大数据包大小限制为网络的MTU,通常要求IDR帧被分段并以多个数据包发送。

我的建议是不要担心在一个数据包中发送更多帧,直到/除非你有理由。这通常是音频流传输所必需的,因为头部大小(例如IP + UDP + RTP)被认为与音频有效载荷有关。