【问题标题】:How to Play YUV sequence of images with JSP如何使用 JSP 播放 YUV 图像序列
【发布时间】:2013-05-24 06:15:18
【问题描述】:

我可以从相机获取每秒 20 帧的 YUV 图像,我想在 JSP 页面上将其作为实时流播放。

我对 JMF/FFMpeg 做了一些研究,也许它们可以与 J2SE(Swing) 一起工作,但似乎很难在 Web 应用程序(Tomcat+JSP 页面)上工作。

任何建议将不胜感激!

【问题讨论】:

  • 您是否希望创建一个网页,通过网络直接播放来自摄像头的未压缩 YUV 帧? YUV 帧有多大?什么 YUV 颜色空间(例如,12 位或 16 位颜色空间)?通过什么样的网络——例如千兆局域网或公共互联网?
  • @MultimediaMike,另一个 C 程序将以每秒 20 帧的速率从远程摄像机捕获 YUV 帧,我的 JSP 应用程序需要在网页上实时流式传输这些帧。所有流量都在局域网中。
  • 您打算在 JSP 生成的 HTML 页面中使用 Java 小程序显示视频吗?还是 JSP 页面会有其他一些显示机制?有很多方法可以实现你想要的;我正在尝试了解您打算如何处理这个问题。
  • @MultimediaMike,我更喜欢使用 JSP 或 HTML5 等显示实时流。当其他替代方案无法实现时,Applet 将是最后的选择。

标签: java ffmpeg video-streaming javacv yuv


【解决方案1】:

根据我们在 cmets 中的讨论,以下是您可能认为可行的解决方案:

  • 客户端(浏览器):访问服务器并每秒流式传输 20 个 RGB 帧并将它们绘制在页面上的代码(就像在画布元素中一样)。浏览器将更乐意绘制 RGB 图像而不是 YUV。对于 YUV,它需要转换为 RGB,这可能效率低下,尤其是在 JavaScript 中。
  • 服务器端:读取原始 YUV 帧并将其转换为 RGB 帧。您可以利用 FFmpeg 来执行此操作,也可以自己处理色彩空间转换(公式很容易找到)。

不过,请注意带宽影响。例如,一个 320x240 的视频帧有 76800 个像素。每秒 20 帧相当于每秒 1536000 像素。假设 32 位 RGB,即 6144000 字节,或每秒大约 6 MB 的原始视频数据,每个客户端

【讨论】:

  • 目前我的 Java 程序会定期调用 c DLL 来获取帧,我不确定这是否是进行直播的正确方法。画幅为1024*768,最多需要同时支持16个摄像头。总之,它需要大约每秒 1G 的带宽。
  • 这就是图像压缩的用途。您可能希望通过 JPEG 压缩器运行这些原始 YUV 帧并将其发送给客户端。您应该能够编写 JavaScript 以每秒更新显示 20 个 JPEG。
  • 是的,我可以在通过网络发送之前压缩 YUV 帧。但一个问题是,将 YUV 转换为 RGB 所需的时间非常长。有什么好的建议吗?谢谢~
  • 你的意思是把YUV转换成PNG吗?有什么资料可以参考吗?
  • 实际上,我只是重新阅读了其余的对话:先尝试 JPEG。浏览器应该能够完成繁重的工作并有效地解码它们,并且它们将被隐式解码为 RGB 图像,因此您可以将它们拍到画布上。 PNG 也可以,但压缩对于这种类型的数据不会那么好,并且编码和解码都会更慢(即使它是原生 RGB)。
猜你喜欢
  • 2015-12-12
  • 2014-01-19
  • 2011-02-25
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2017-08-15
相关资源
最近更新 更多