Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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
C++ 如何使用FFMPEG访问帧缓冲区?_C++_Qt_Ffmpeg - Fatal编程技术网

C++ 如何使用FFMPEG访问帧缓冲区?

C++ 如何使用FFMPEG访问帧缓冲区?,c++,qt,ffmpeg,C++,Qt,Ffmpeg,我正在编写一个需要捕获屏幕的应用程序。我已经找到了解决方案,互联网上说FFMPEG可以做到这一点。但我找不到在代码中实现这一点的方法。FFMPEG文档似乎很差 有人能告诉我如何使用FFMPEG访问帧缓冲区原始数据吗?FFMPEG支持通过标准输入输入的原始帧: 对于arg-f rawvideo,ffmpeg将期望帧来自stdin ffmpeg -r 60 -f rawvideo -pix_fmt uyvy422 -s 1280x720 -i - -threads 0 -preset fast -y

我正在编写一个需要捕获屏幕的应用程序。我已经找到了解决方案,互联网上说FFMPEG可以做到这一点。但我找不到在代码中实现这一点的方法。FFMPEG文档似乎很差


有人能告诉我如何使用FFMPEG访问帧缓冲区原始数据吗?

FFMPEG支持通过标准输入输入的原始帧:

对于arg-f rawvideo,ffmpeg将期望帧来自stdin

ffmpeg -r 60 -f rawvideo -pix_fmt uyvy422 -s 1280x720 -i - -threads 0 -preset fast -y -pix_fmt yuv420p output.mp4
你可以检查这个,它有有用的信息

在Qt中,您将使用-f rawvideo运行一个带有ffmpeg的函数,并使用方法写入stdin

这大致是如何完成的:

QProcess* process;

process->start("ffmpeg.exe", args, QProcess::Unbuffered | QProcess::ReadWrite);
process->waitForStarted();

  ...

process->setProcessChannelMode(QProcess::ForwardedChannels);
videoFrame->GetBytes(&buffer);
process->write(buffer);

我可以通过不启动流程来实现这一点吗?我已经下载了ffmpeg-3.4.1-win32-dev,但是我找不到应该使用哪些函数。ffmpeg还有一个Qt包装器,但是它使用了现在不推荐的方法。您要么使用旧版本的ffmpeg,要么修复代码中的一些方法和定义。