Encoding FFmpeg:从CUDA缓冲区而不是RAM缓冲区编码
我需要将从摄像头捕获的原始视频流编码到h264。我在Windows 7下使用英伟达PASCAL GPU,而AM试图使用FFMPEG来控制H264JNVEC,而不是直接使用Nvidia SDK。 使用libavcodec,我得到了一个程序,它使用avcodec_encode_video2()成功地编码了输入流。此函数将输入图像从RAM中的缓冲区中取出,并将其作为数字媒体存储(DMA)传输到GPU进行编码 我现在想对已经在GPU上的图像进行编码(在CUDA缓冲区中)。查看FFmpeg的文档和各种示例,我没有找到任何关于如何实现这一点的指针Encoding FFmpeg:从CUDA缓冲区而不是RAM缓冲区编码,encoding,ffmpeg,nvidia,nvenc,Encoding,Ffmpeg,Nvidia,Nvenc,我需要将从摄像头捕获的原始视频流编码到h264。我在Windows 7下使用英伟达PASCAL GPU,而AM试图使用FFMPEG来控制H264JNVEC,而不是直接使用Nvidia SDK。 使用libavcodec,我得到了一个程序,它使用avcodec_encode_video2()成功地编码了输入流。此函数将输入图像从RAM中的缓冲区中取出,并将其作为数字媒体存储(DMA)传输到GPU进行编码 我现在想对已经在GPU上的图像进行编码(在CUDA缓冲区中)。查看FFmpeg的文档和各种示例
有人知道这是否可行,以及如何做到这一点吗?请使用AVIOContext。您可以参考ffmpeg repo中的几个示例,包括
qsvdec.c
、hw_decode.c
和vaapi_encode.c
。虽然这些源代码无法提供直接的解决方案,但尝试对硬件缓冲区进行编码是一个良好的开端qsvdec
和hw_decode
展示了如何做相反的事情:从硬件缓冲区解码,我以前已经成功地将其移植到nvdecvaapi_encode
是唯一的编码示例,也许您可以将其移植到nvenc。你可能已经这么做了,但我还是要告诉你。去下载nvidia NVENC SDK(视频编解码器SDK 7.1.9当前最新版本-需要注册且免费)。它拥有API的所有文档和用于编码和解码的样本。甚至还有一个名为“NvEncoderCudaInterop”的示例应用程序。希望有帮助。