使用套接字/内存而不是文件在Cuda中解码视频

def*_*ult 8 c++ sockets cuda

我目前正在尝试使用cuda解码视频.我有一个叫做的cuda样本cudaDecodeD3D9.此示例使用一种方法cuvidCreateVideoSource,该方法将文件指针指向源视频.有没有办法让Cuda从内存/套接字/流加载视频?

def*_*ult 8

事实证明我根本无法使用cuvidCreateVideoSource方法,但我可以通过调用直接将每帧数据提供给cuda视频解析器cuvidParseVideoData.

这是一个从文件中读取一帧并将其提供给cuda解析器的示例.该文件是由我创建的,通过将每个帧的大小写入文件,然后是帧数据.通过从套接字读取,可以轻松替换该文件:

unsigned int size = 0u;
fread( &size, sizeof( unsigned char ), sizeof( unsigned int ), _file );

unsigned char *buf = new unsigned char[size];
fread( buf, sizeof( unsigned char ), size, _file );

CUVIDSOURCEDATAPACKET packet = {};
packet.payload_size = size;
packet.payload = buf;
cuvidParseVideoData( pCudaParser, &packet );

delete [] buf;
Run Code Online (Sandbox Code Playgroud)