video - 使用 FPGA 捕获 CMOS 视频,编码并通过以太网发送

标签 video ffmpeg h.264 fpga transport-stream

我正在为我的学生计划一个基于 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://www.xilinx.com/products/intellectual-property/1-4iso32.html
  • http://www.xilinx.com/products/intellectual-property/1-1lk9j1.html#overview

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

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

    最佳答案

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

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

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

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

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

    祝你的项目好运!

    关于video - 使用 FPGA 捕获 CMOS 视频,编码并通过以太网发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34352027/

    相关文章:

    c++ - 如何使用 FFMPEG 从存储为视频 AVPackets 的 NAL 单元播放 H.264 流

    jquery - 嵌入式 Vimeo 视频回调

    video - 为什么只有 youtube 嵌入在 iPad 上可用?

    jquery - 自动播放视频仅适用于调整大小操作

    Java视频流项目

    ffmpeg 处理输入 h264 到 h265 时发现无效数据

    python - 如何在 django 中使用 ffmpeg 压缩 base64 解码的视频数据

    visual-studio-2008 - 将 ffmpeg 连接到 Visual Studio 2008

    python - 如何通过 Python 从 DPX 文件读取时间码

    h.264 - 直接访问StageFright.so以从Android中的JNIlayer解码H.264流