gpt4 book ai didi

websocket - 将连续的 PNG 输出图像文件编码和流式传输为 Web 浏览器上的实时视频流

转载 作者:行者123 更新时间:2023-12-02 00:24:03 43 4
gpt4 key购买 nike

我有一个 Open GL 应用程序,它可以渲染模拟动画并每秒输出多个 PNG 图像文件并将这些文件保存在磁盘中。我想通过 HTTP 协议(protocol)将这些图像文件作为视频流进行流式传输,以便我可以从 Web 浏览器观看动画视频。我已经有一个强大的套接字服务器来处理来自 websocket 的连接,我可以处理所有的握手和消息编码/解码部分。我的服务器程序和 OpenGL 应用程序是用 C++ 编写的。

几个问题:

  1. 流式传输此 OpenGL 动画输出并从我的 Web 浏览器查看它的最佳方式是什么?视频图像帧由 OpenGL 应用程序动态(连续)生成为 PNG 图像文件。 Web 浏览器应显示与 Open GL 显示输出对应的视频(具有最短延迟时间)。

  2. 如何使用 C/C++ 以编程方式将这些 PNG 图像文件编码为连续(实时)视频(无需我手动将图像文件推送到流媒体服务器软件,如 Flash Media Live Encoder)?我应该制作什么格式的视频?

  3. 我应该使用网络套接字发送/接收动画数据,还是有其他更好的方法? (就像 JQuery Ajax 调用一样,我只是在编造它,但请指导我完成实现它的正确方法)。如果这个实时视频流可以在不同的浏览器上运行,那就太好了。

  4. HTML5 video 标签是否支持实时视频流,还是仅适用于存在于特定 URL/目录(不是实时流)的完整视频文件?

  5. 是否有任何现有的代码示例(教程)用于执行此实时视频流,其中您有一个 C/C++/Java 应用程序生成一些图像帧,并有一个网络浏览器将此输出作为视频流使用?在谷歌上搜索了几个小时后,我几乎找不到关于这个主题的教程。

最佳答案

您肯定希望停止将 PNG 文件输出到磁盘,而是将图像数据帧输入视频编码器。一个不错的选择是使用 libav/ffmpeg。接下来,您必须将编码视频封装为网络友好格式。我会推荐 x264 作为编码器和 MPEG4 或 MPEG2TS 流格式。

要在网络浏览器中观看视频,您必须选择流媒体格式。 Safari 支持 HTML5 中的 HLS,但遗憾的是其他方面的支持不多。要获得广泛的客户端支持,您需要使用插件,例如 Flash 或媒体播放器。

我能想到的最简单的方法是使用 Wowza 进行服务器端重新流式传输。 GL 程序会将 MPEG2 TS 流式传输到 Wowza,然后它会为 HLS、RTMP(flash)、RTSP 和 Microsoft Smooth Streaming (Silverlight) 准备流。 Wowza 的价格约为 1000 美元。您可以使用免费的 Red5 设置 RTMP 流。或者您可以使用 VLC 提供 RTSP 服务,但 RTSP 客户端普遍很糟糕。

不幸的是,此时网络视频的标准化水平很差,视频工具也比较繁琐。这是一项艰巨的任务,但您可以使用 ffmpeg/libav 进行黑客攻击。概念证明可以是将 YUV420p 格式的图像帧写入 ffmpeg 正在监听的管道,并选择您可以使用 RTSP 客户端(例如 VLC、Quicktime 或 Windows Media Player)读取的输出流。

关于websocket - 将连续的 PNG 输出图像文件编码和流式传输为 Web 浏览器上的实时视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9692238/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com