DirectX vs FFmpeg

问题描述 投票:0回答:1

我正在根据以下内容决定如何解码接收的视频帧:

  1. 平台是Windows。
  2. 帧以H264或H265编码。
  3. GPU应该尽可能多地使用
  4. 当然我们更喜欢更少的编码和最简单的代码。我们只需解码并在屏幕上显示结果。不需要录音,不需要任何其他录音。

我仍然是新手,但我认为可以通过directx或通过ffmpeg直接解码帧。我对吗?如果是的话,哪一个更受欢迎?

ffmpeg directx decode h.264 h.265
1个回答
1
投票

对于仅使用GPU的简单方法和简单代码,请使用DirectX查看我的项目:H264Dxva2Decoder

如果您准备好编码,可以使用我的方法。

如果没有,您可以使用MediaFoundation或FFMPEG,两者都可以完成这项工作。

MediaFoundation是面向C ++和COM的。 FFMPEG是面向C的。它可以为你带来不同。

编辑

你可以使用我的程序,因为你有在H264或H265编码的帧。对于h265,您必须添加额外的代码。

当然,您需要进行修改。是的,您可以在不使用文件的情况下将帧发送到DirectX。此项目仅使用avcc视频文件格式,但可以针对其他情况进行修改。

你不需要原子解析器。例如,如果帧是annex-b格式,则需要修改nalu解析器。如果帧是annex-b格式,您还需要修改缓冲机制。

如果您提供以H264编码的帧样本,我可以帮助您。

关于Ffmpeg,根据h264规范,它的限制比我的程序少,但不提供渲染机制。例如,您必须混合使用Ffmepg和我的渲染机制。

或者研究像MPC-HC这样的程序来展示混音。我在这里不能帮助。

编辑2

有一点需要知道,您不能将编码数据包直接解码到GPU。你需要先解析它们。这就是为什么有一个nalu解析器(参见DXVA_PicParams_H264)。

如果你还没有准备好编码并理解它是如何工作的,那么使用Ffmpeg,它将更简单,实际上。您可以专注于渲染,而不是解码。

知道哪一个产生更好的结果,消耗更少的资源(CPU,GPU,RAM(系统内存和显卡内存),支持更广泛的格式等)也很重要。

你要求真正的专业知识......

如果您编写自己的程序代码,您将能够对其进行优化,并且肯定会获得更好的结果。如果您使用Ffmpeg,并且它在您的上下文中存在性能问题,则可能会被阻止...因为您不会修改Ffmpeg。

你说你将使用博世相机。通常,所有编码的视频都采用相同的格式。因此,一旦您的代码能够对其进行解码,您就不需要所有Ffmpeg功能。

© www.soinside.com 2019 - 2024. All rights reserved.