2

我正在为我的学生计划一个基于 Zynq Xilinx FPGA 的开源大学项目,该项目将捕获 CMOS 视频,将其编码为传输流并通过以太网将其发送到远程 PC。基本上我想设计另一个IP摄像机。我有丰富的 FPGA 经验,但缺乏有关编码和传输视频数据的知识。这是我的计划:

  1. 将 CMOS 摄像头连接到 FPGA,接收视频帧并将其保存到外部 DDR 存储器,使用 HDMI 输出进行验证。我对此没有任何问题。

  2. 我知道我必须将我的视频流压缩为例如 H.264 格式并放入传输流中。在这里我知之甚少,需要一些提示。

  3. 在我形成传输流之后,我可以使用 UDP 数据包通过网络发送它。我有工作硬件解决方案,它从 FIFO 读取数据并将其作为 UDP 数据包发送到远程 PC。

  4. 最后,我计划使用 ffmpeg 库接收和播放视频。

    ffplay udp://localhost:5678

我的问题基本上是关于 2 步。如何将像素帧转换为传输流?我的选择是:

  1. 使用商业IP,例如

在这里,我怀疑它们是否可以免费使用,而且我们没有太多资金。

  1. 使用开放核心,如

    • http://sourceforge.net/projects/hardh264/ - 这里核心只生成h264输出,但如何将其封装成传输流?
    • 我搜索了 opencores.org 但在这个主题上没有成功
    • 也许有人知道一些好的开源相关 FPGA 项目?
  2. 使用 Vivado HLS(C 语言)自行开发硬件编码器。但这是我不知道算法的问题。也许我可以演出 ffmpeg 或 Cisco openh264 库并找到一个将原始像素帧转换为 H.264 格式然后将其放入传输流的函数?任何帮助也将在这里得到应用。

此外,我担心我可能在 FPGA 内部生成的流的格式兼容性以及 ffplay 实用程序在主机上预期的格式兼容性。任何帮助、提示、链接和书籍都会被应用!

4

1 回答 1

1

我没有看到任何开源硬件 h.264 编码器,但我正在向正在将软件编码器的一些繁重计算部分移动到 FPGA 中的人提供建议。它可能是openh264。

我不会为这个项目推荐 ffmpeg,因为它实现了很多协议。仅在 h.264 中有足够的选项,而不必担心其他标准。

至于容器格式,MPEG4 盒子非常简单,因此添加传输封装应该非常简单。我在考虑 Quicktime 4cc 封装。

我建议使用 MPEG DASH,因为您可以将每个视频帧封装到一个单独的框(MOOF 电影片段)中。然而,将编码数据包装在容器中并不是计算密集型的。以下是一些处理该容器格式的软件: https ://gpac.wp.mines-telecom.fr/mp4box/dash/

您可以专注于计算密集型部分,而不是在硬件中实现整个编码器,您可以通过在软件运行时对其进行分析来找到这些部分。去块滤波器就是这样一种功能,它既用于编码也用于解码。

祝你的项目好运!

于 2015-12-23T19:56:04.567 回答