【发布时间】:2012-03-27 01:29:41
【问题描述】:
我有一个从 glReadPixels() 生成的 rgb 数据数组。
请注意,RGB 数据是像素打包的 (r1,g1,b1,r2,g2,b2,...)。
如何使用 OpenCV 或其他 C++ 库快速编写 YUV 视频帧,以便将它们流式传输到 FFMPEG?将 RGB 像素转换为 YUV 像素不是问题,因为网上有很多转换公式。然而,编写 YUV 框架是我的主要问题。从最近几天开始,我一直在尝试编写 YUV 视频帧,但没有成功。
这是我关于编写 YUV 框架的另一个问题和我遇到的问题之一:Issue with writing YUV image frame in C/C++ 我不知道我目前将 YUV 帧写入文件的方法有什么问题。
所以现在我可能想使用现有的库(如果有的话),它接受 RGB 数据,并将它们转换为 YUV 并将 YUV 帧直接写入文件或管道。当然,如果我能修复我现有的程序来编写 YUV 框架会更好,但是你知道,每个软件开发项目都有一个截止日期,所以时间也是我和我的项目团队成员的优先事项。
【问题讨论】:
-
您在 FFMPEG 中尝试过 swscale 吗?用 swscale 转换像素格式和缩放图像只需要 3 行代码。
-
为什么必须将 YUV 数据流式传输到 FFmpeg?为什么不只提供 RGB 数据?
-
编写 YUV 帧不需要库。您说您可以将 RGB 数据转换为 Y、U 和 V。只需将该数据以相同的顺序写入文件中即可。您可以通过采用替代值对 U 和 V 进行二次采样。然后你只需要一个好的 YUV 播放器来查看那个文件。我已经做过很多次了,很简单。
-
@TheJuice:所以我有一个 OpenGL 应用程序正在运行,我想捕获动画显示(使用 glReadPixels),然后我想将此数据通过管道传输到 FFMPEG 并使用 Red5 服务器将其流式传输到Web 浏览器作为 RTMP 实时流媒体。我从kylecordes.com/2007/pipe-ffmpeg 和其他相关网站了解到,FFMPEG 可以通过管道接收输入数据,但数据必须以 YUV 视频帧格式编码。你能指导我找到解决这个问题的正确方法吗?这是我目前的方法:stackoverflow.com/questions/9858388/…
-
如果此问题已成功回答,请考虑通过单击旁边的复选框来选择官方答案。如果没有,请考虑添加您自己的答案。
标签: c++ image-processing opencv yuv