Video 在FFPLAY窗口上显示YUV/RGB帧

Video 在FFPLAY窗口上显示YUV/RGB帧,video,ffmpeg,rendering,yuv,libavcodec,Video,Ffmpeg,Rendering,Yuv,Libavcodec,我在FFMPEG框架上集成了一个自定义解码器。该解码器的输出是YUV420帧,如果需要,我可以将其转换为RGB24帧 这些帧是在我的一个自定义函数中生成的。因此,为了在FFPLAY窗口上渲染这些帧,必须做什么?是否有任何特定的语法或程序要遵循 我真的是一个新手,在网上搜索了很多关于这个话题,但是没有得到任何与这个问题相关的东西。如果有人能就此提供任何答案或建议,这将对我大有帮助 提前谢谢 --关于我对破解FFmpeg的编解码器有些生疏,但我刚刚查看了最新的git源代码,我假设您使用的是同一个副本

我在
FFMPEG
框架上集成了一个自定义解码器。该解码器的输出是YUV420帧,如果需要,我可以将其转换为RGB24帧

这些帧是在我的一个自定义函数中生成的。因此,为了在
FFPLAY
窗口上渲染这些帧,必须做什么?是否有任何特定的语法或程序要遵循

我真的是一个新手,在网上搜索了很多关于这个话题,但是没有得到任何与这个问题相关的东西。如果有人能就此提供任何答案或建议,这将对我大有帮助

提前谢谢


--关于

我对破解FFmpeg的编解码器有些生疏,但我刚刚查看了最新的git源代码,我假设您使用的是同一个副本。我进一步假设您将解码器与其他编解码器一起插入libavcodec/目录,并且当您构建程序并运行
ffmpeg-formats
时,您会看到提到的新解码器

如果这都是真的,那么我将假设解码器模块导出一个init()函数,该函数期望接收指向
AVCodecContext
函数的指针。此数据结构有一个名为pix_fmt的成员,在解码器的情况下,应将其设置为AV_pix_fmt_YUV420P,以指示平面YUV 4:2:0

如果这不起作用,请尝试使用
ffmpeg
工具将文件解码到空目标,以测试解码器是否正在执行某些操作:

ffmpeg -i yourfile.ext -f null /dev/null

使用此命令的输出修改您的问题,以提供进一步的线索。

我对FFmpeg的编解码器有点生疏,但我刚刚查看了最新的git源代码,我假设您使用的是同一个副本。我进一步假设您将解码器与其他编解码器一起插入libavcodec/目录,并且当您构建程序并运行
ffmpeg-formats
时,您会看到提到的新解码器

如果这都是真的,那么我将假设解码器模块导出一个init()函数,该函数期望接收指向
AVCodecContext
函数的指针。此数据结构有一个名为pix_fmt的成员,在解码器的情况下,应将其设置为AV_pix_fmt_YUV420P,以指示平面YUV 4:2:0

如果这不起作用,请尝试使用
ffmpeg
工具将文件解码到空目标,以测试解码器是否正在执行某些操作:

ffmpeg -i yourfile.ext -f null /dev/null

使用此命令的输出修改您的问题,以提供进一步的线索。

您是在播放文件还是管道输入?如果是文件,请提供一个简短的示例。您是在使用ffplay cli工具还是以编程方式使用?如果您为FFmpeg编写了一个新的解码器,以本机方式输出YUV 4:2:0,那么ffplay应该能够在不进行任何修改的情况下播放视频。你确定你正在将解码器的色彩空间传送到核心引擎吗?@MultimediaMike:谢谢你的回复。我一直在等待这样的答复。是的,在我的本地代码(即C代码)中,我能够生成YUV 420帧。然而,正如我告诉过你的,我对ffplay这个东西还很陌生,我现在有了一个想法:如何将颜色空间从解码器传送到核心引擎。任何文件或任何文章,可以给我一个关于这方面的想法,请张贴在这里作为答复,我会接受它--正在等待您的答复。您是否正在尝试播放文件或管道输入?如果是文件,请提供一个简短的示例。您是在使用ffplay cli工具还是以编程方式使用?如果您为FFmpeg编写了一个新的解码器,以本机方式输出YUV 4:2:0,那么ffplay应该能够在不进行任何修改的情况下播放视频。你确定你正在将解码器的色彩空间传送到核心引擎吗?@MultimediaMike:谢谢你的回复。我一直在等待这样的答复。是的,在我的本地代码(即C代码)中,我能够生成YUV 420帧。然而,正如我告诉过你的,我对ffplay这个东西还很陌生,我现在有了一个想法:如何将颜色空间从解码器传送到核心引擎。任何文件或任何文章,可以给我一个关于这方面的想法,请张贴在这里作为答复,我会接受它--等待您的回复。谢谢您的回答。我的解码器带有init,但我没有指定pixel fmt变量。当给出ffmpeg--decoders命令时,我可以在列表中看到我的解码器名称。但我是否应该将这个输出帧映射到类似SDL帧的东西(因为ffplay使用SDL库)?正如我所说的,YUV帧的生成与其他解码器的流程不同。你能解释一下这个问题吗?(我的意思是SDL映射)视频解码器不需要任何关于视频输出层的知识。解码器应该只解码到最有效的像素格式(平面YUV 4:2:0),将帧传递回引擎,让引擎知道如何处理它。输出可以是SDL窗口、X11窗口、OpenGL曲面或磁盘上的文件。H.264视频解码器输出平面YUV 4:2:0数据,然后将其传回引擎,引擎随后将其发送给SDL。这也是你的译码器应该做的。真是太神奇了。。。你刚才提供的解释。非常感谢:-)谢谢你的回答。我的解码器带有init,但我没有指定pixel fmt变量。当给出ffmpeg--decoders命令时,我可以在列表中看到我的解码器名称。但我是否应该将这个输出帧映射到类似SDL帧的东西(因为ffplay使用SDL库)?正如我所说的,YUV帧的生成与其他解码器的流程不同。你能解释一下这个问题吗?(我的意思是SDL映射)视频解码器不需要任何关于视频输出层的知识。解码器应仅解码为最有效的像素格式(平面YUV 4)