我计划为学生开发基于Zynq Xilinx FPGA的开源大学项目,该项目将捕获CMOS视频,将其编码为传输流并通过以太网发送至远程PC。基本上我想设计另一台IP摄像机。我有很强的FPGA经验,但缺乏有关编码和传输视频数据的知识。这是我的计划:利用FPGA捕获CMOS视频,编码并通过以太网发送
连接的CMOS摄像头,以FPGA,收到的视频帧,并将它们保存到外部DDR内存,采用HDMI输出,用于监测验证。我没有问题。
我知道我必须将我的视频流压缩为H.264格式,并将其放入传输流中。我在这里几乎没有什么知识,需要一些提示。
当我形成传输流后,我可以使用UDP数据包通过网络发送它。我有工作的硬件解决方案,从FIFO中读取数据并将其作为UDP papckets发送到远程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格式然后将其放入传输流的功能?任何帮助也将在这里appriciated。
另外我担心格式兼容性可能会在FPGA内产生,也可能是由ffplay工具在主机上产生的格式兼容性。任何帮助,提示,链接和书籍appriciated!
如果我理解正确,您已经很好地执行了计算密集型任务(视频捕获,H264编码器)。只有您需要帮助的部分是将enocder输出包装为可移动流。这个任务不是计算密集型的,我想你可以在Zynq的双Cortex-A9内核上完成这个任务。实际上,编码器是将原始像素帧转换为H.264格式的编码器。流式传输方法只是将一个头附加到编码器的输出。 – ARK
此外,我想你知道H264编码器只接受YUV格式的输入。您可能需要使用YUV 4:2:0格式。所以,你需要一个视频捕获和编码器之间的颜色转换模块 – ARK
我不知道你的项目有什么样的范围,但是我参与了一个在硬件上实现h.264解码器的项目,一个大项目。实际上,四位学生分别做了两个实现,一个在BSV中,一个在Verilog中,每个都需要几个月的时间。 –