我正在根据以下内容决定如何解码接收到的视频帧:
我仍然是个新手,但我认为人们可以通过directx或ffmpeg直接解码一个帧。我说的对吗?如果是的话,选择哪一种?
发布于 2019-02-06 20:25:30
对于只使用GPU的简单方法和简单代码,请看一下我使用DirectX:H264Dxva2Decoder的项目
如果您已经准备好编写代码,可以使用我的方法。
如果没有,您可以使用MediaFoundation或FFMPEG,两者都可以完成这项工作。
MediaFoundation是面向C++和COM的。FFMPEG是面向C的。它能给你带来不同。
编辑
您可以使用我的程序,因为您有用H264或H265编码的帧。对于h265,您必须添加额外的代码。
当然,你需要做些修改。是的,您可以不使用文件就将帧发送到DirectX。此项目仅使用avcc视频文件格式,但可对其他情况进行修改。
您不需要原子解析器。例如,如果框架是附件b格式,则需要修改nalu解析器。如果帧为附件-b格式,则还需要修改缓冲机制。
如果您提供用H264编码的帧示例,我可以帮助您。
关于Ffmpeg,根据h264规范,它比我的程序有更少的限制,但没有提供渲染机制。您将不得不混合Ffmepg和我的渲染机制,例如。
或者研究一个像MPC这样的程序来显示这种混合。我再也帮不上忙了。
编辑2
有一件事要知道,你不能直接解码编码的数据包到GPU。你需要先解析它们。这就是为什么有一个nalu解析器(请参阅DXVA_PicParams_H264)。
如果您还没有准备好编写代码并了解它的工作原理,那么使用Ffmpeg,实际上会更简单。你可以专注于渲染,而不是解码。
同样重要的是要知道谁的结果更好,消耗的资源更少(CPU、GPU、RAM (系统内存和图形卡内存),支持更广泛的格式等等。
你需要一个真正的专家..。
如果您编写自己的程序,您将能够优化它,并肯定会得到更好的结果。如果您使用Ffmpeg,并且它在您的上下文中有性能问题,您可能会被阻塞.因为您不会修改Ffmpeg。
你说你会用博世相机。通常,所有编码的视频都将采用相同的格式。因此,一旦您的代码能够解码它,您就不需要所有的Ffmpeg特性。
https://stackoverflow.com/questions/54264842
复制相似问题