繁体   English   中英

DirectX与FFmpeg

[英]DirectX vs FFmpeg

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

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

我仍然是一个新手,但我认为可以直接通过DirectX或通过ffmpeg解码帧。 我对吗? 如果是这样,则首选哪一个?

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

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

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

MediaFoundation是面向C ++和COM的。 FFMPEG是面向C的。 它可以为您带来改变。

编辑

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

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

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

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

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

或研究诸如MPC-HC之类的程序来显示混合效果。 我在这里不再帮助。

编辑2

要知道的一件事是,您无法将编码的数据包直接解码到GPU。 您需要先解析它们。 这就是为什么要使用nalu解析器的原因(请参阅DXVA_PicParams_H264)。

如果您不准备编写代码并了解其工作原理,请使用Ffmpeg,它实际上会更简单。 您可以专注于渲染,而不是解码。

同样重要的是要知道哪一个可以提供更好的结果,消耗更少的资源(CPU,GPU,RAM(系统内存和图形卡内存),支持更大范围的格式等)。

您需要真正的专业知识...

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM