我正在为我的学生计划一个基于 Zynq Xilinx FPGA 的开源大学项目,该项目将捕获 CMOS 视频,将其编码为传输流并通过以太网将其发送到远程 PC。基本上我想设计另一个IP摄像机。我有丰富的 FPGA 经验,但缺乏有关编码和传输视频数据的知识。这是我的计划:
将 CMOS 摄像头连接到 FPGA,接收视频帧并将其保存到外部 DDR 存储器,使用 HDMI 输出进行验证。我对此没有任何问题。
我知道我必须将我的视频流压缩为例如 H.264 格式并放入传输流中。在这里我知之甚少,需要一些提示。
在我形成传输流之后,我可以使用 UDP 数据包通过网络发送它。我有工作硬件解决方案,它从 FIFO 读取数据并将其作为 UDP 数据包发送到远程 PC。
最后,我计划使用 ffmpeg 库接收和播放视频。
ffplay udp://localhost:5678
我的问题基本上是关于 2 步。如何将像素帧转换为传输流?我的选择是:
- 使用商业IP,例如
在这里,我怀疑它们是否可以免费使用,而且我们没有太多资金。
使用开放核心,如
- http://sourceforge.net/projects/hardh264/ - 这里核心只生成h264输出,但如何将其封装成传输流?
- 我搜索了 opencores.org 但在这个主题上没有成功
- 也许有人知道一些好的开源相关 FPGA 项目?
使用 Vivado HLS(C 语言)自行开发硬件编码器。但这是我不知道算法的问题。也许我可以演出 ffmpeg 或 Cisco openh264 库并找到一个将原始像素帧转换为 H.264 格式然后将其放入传输流的函数?任何帮助也将在这里得到应用。
此外,我担心我可能在 FPGA 内部生成的流的格式兼容性以及 ffplay 实用程序在主机上预期的格式兼容性。任何帮助、提示、链接和书籍都会被应用!