Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encoding FFmpeg:从CUDA缓冲区而不是RAM缓冲区编码_Encoding_Ffmpeg_Nvidia_Nvenc - Fatal编程技术网

Encoding FFmpeg:从CUDA缓冲区而不是RAM缓冲区编码

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的文档和各种示例

我需要将从摄像头捕获的原始视频流编码到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
展示了如何做相反的事情:从硬件缓冲区解码,我以前已经成功地将其移植到nvdec
vaapi_encode
是唯一的编码示例,也许您可以将其移植到nvenc。你可能已经这么做了,但我还是要告诉你。去下载nvidia NVENC SDK(视频编解码器SDK 7.1.9当前最新版本-需要注册且免费)。它拥有API的所有文档和用于编码和解码的样本。甚至还有一个名为“NvEncoderCudaInterop”的示例应用程序。希望有帮助。