- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 ffmpeg
捕获我的屏幕在另一个线程中(我使用 processthreadsapi::CreateProcess())
创建,因此我可以在主线程中执行其他操作,并重定向 ffmpeg
输出,因此它不会在控制台中弹出供用户查看。为了停止拍摄,我使用 WriteFile()
发送一个“q”输入,然后我想使用 ffmpeg
保存 ReadFile()
累积输出。
但是,如果我设置 STARTUPINFO::hStdError
(注意,ffmpeg
输出到 stderr
)到一个管道,我可以从中读取累积的数据,我使用 WriteFile()
发送的输入不再注册并且 ffmpeg.exe 继续运行。
我试过重定向 ffmpeg
在一个简单的命令行中输出,但我仍然可以通过按 q 按钮来停止该过程。
此外,如果我录制的时间少于 8 秒,则输入已注册,ffmpeg.exe
关闭。
我的代码有问题,还是 processthreadsapi 问题,任何提示都将不胜感激!
这是我尝试执行此操作的最小代码:
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
HANDLE g_hChildStd_IN_Rd = NULL;
HANDLE g_hChildStd_IN_Wr = NULL;
HANDLE g_hChildStd_OUT_Rd = NULL;
HANDLE g_hChildStd_OUT_Wr = NULL;
int main()
{
//Create IN and OUT pipes
SECURITY_ATTRIBUTES saAttr;
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.lpSecurityDescriptor = NULL;
if (! CreatePipe(&g_hChildStd_OUT_Rd, &g_hChildStd_OUT_Wr, &saAttr, 0) )
cout<<"StdoutRd CreatePipe error"<<endl;
if (! CreatePipe(&g_hChildStd_IN_Rd, &g_hChildStd_IN_Wr, &saAttr, 0) )
cout<<"Stdin CreatePipe error"<<endl;
PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartInfo;
ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) );
ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.hStdError = g_hChildStd_OUT_Wr;
siStartInfo.hStdOutput = g_hChildStd_OUT_Wr;
siStartInfo.hStdInput = g_hChildStd_IN_Rd;
siStartInfo.dwFlags |= STARTF_USESTDHANDLES;
//Start recording
if(!CreateProcess(NULL,
"ffmpeg -y -f gdigrab -framerate 2 -i desktop record.avi", // command line
NULL, // process security attributes
NULL, // primary thread security attributes
TRUE, // handles are inherited
0, // creation flags
NULL, // use parent's environment
NULL, // use parent's current directory
&siStartInfo, // STARTUPINFO pointer
&piProcInfo)) // receives PROCESS_INFORMATION
{
cout<<"Error create process"<<endl;
}
else
{
cout<<"Process created successfully"<<endl;
cout<<"Press k to stop recording"<<endl;
}
//Record for a while
while(getch() != 'k'){
cout<<"While press k"<<endl;
};
cout<<"Stop recording called"<<endl;
//Stop recording by emulating a Q button push
DWORD dwWritten;
CHAR chBufW[1] = {'q'};
if ( ! WriteFile(g_hChildStd_IN_Wr, chBufW, 1, &dwWritten, NULL) )
cout<<"Error write file"<<endl;
//Save stdError (ffmpeg) data
DWORD dwRead;
char stdErrorData[4096];
bool bSuccess;
bSuccess = ReadFile( g_hChildStd_OUT_Wr, stdErrorData, 4096, &dwRead, NULL);
if(!bSuccess || dwRead == 0)
cout<<"Read failed"<<endl;
else{
cout<<"Read success"<<endl;
}
cout<<"Press to exit"<<endl;
while(getch() != 'k');
return 0;
}
最佳答案
为了回答我自己的问题,问题是当 ffmpeg 输出将要到达的句柄管道填满时,它会停止 ffmpeg 进程,直到我为新文本腾出一些空间。这种情况正在发生,因为 ffmpeg 不断输出录音信息。
我希望这对某人有用:)
关于c++ - 如果设置了 processthreadsapi::STARTUPINFO::hStdError,则 fileapi::WriteFile() 不发送输入 (ffmpeg),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66686991/
我正在阅读 W3C 规范提案,以及在这里可以阅读的内容:http://www.w3.org/TR/file-system-api/ "Work on this document has been di
我需要将多个文件读取到一个函数 A 中。我需要为此使用 FileAPI。但是 FileReader 执行异步下载。是否可以在不退出的情况下获取函数A末尾所有文件的内容? 最佳答案 完全清楚,FileR
我正在使用FileApi (参见用户图片+裁剪演示)在上传之前裁剪图像。但是当我从计算机中选择图像文件时,我收到错误 $(...).modal(...).open is not a function
我正在使用 JavaScript 和 HTML5 创建应用程序。我需要将数据写入特定文件,所以我想在代码中设置文件路径。这样做没有问题: function onInitFs(fs) { con
JavaScript 进程生成大量数据 (200-300MB)。我想保存此数据以供进一步分析,但到目前为止我发现最好的方法是使用此示例进行保存 http://jsfiddle.net/c2U2T/这对
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在尝试创建 ajax 文件上传,但当您上传大于例如 800MB 的文件时,我遇到了错误:800MB google chrome 崩溃。 所以我想把它切成碎片然后恢复它,但是我该怎么做呢? 最佳答案
您好,感谢您审查我的问题。 我有一个配置有PCIe RAID0 Controller x16线路的系统,该线路通过m.2连接器分别连接到4个NVMe英特尔驱动器2Tb。 使用 ATTO磁盘基准测试应用
有没有办法让网站在浏览器中工作时从 Android SDCard 读取某些文件(我知道该文件存在于 SDCard 上)? 我希望我的网站能够从 SDCard 打开“特定视频文件”(hugeXXX.av
我一直在创建一个应用程序,它允许用户首先上传图像,然后将其加载到 Canvas 中。 我浏览了各种 SO 帖子和在线示例,这些示例允许用户读取上传的图像并将其加载到 Canvas 中,并且所有示例都使
我想我会先用一个例子来证明这个问题, jsfiddle:http://jsfiddle.net/e2UfM/15/ (使用 FF 12 和 Chrome 18.0.1025.168 测试) 用法: 从
我想使用 HTML5 FileApi 将 SWF 读取到 OBJECT(或 EMBED,是否更好?)。 我当前的代码在 Chrome/Iron(唯一也支持 xmlhttprequest v2 Form
我正在尝试使用 ffmpeg 捕获我的屏幕在另一个线程中(我使用 processthreadsapi::CreateProcess()) 创建,因此我可以在主线程中执行其他操作,并重定向 ffmpeg
我是一名优秀的程序员,十分优秀!