【发布时间】:2011-10-03 07:04:57
【问题描述】:
在我的主进程中,我使用 CreateProcess(...) 创建了一个 ffmpeg 子进程。 我需要跟踪转换进度的状态以更新进度条。为此,我从 ffmpeg 输出中读取文本并从中提取进度状态。
我做了一个这样的示例程序:
HANDLE rPipe, wPipe;
CreatePipe(&rPipe,&wPipe,&secattr,0);
STARTUPINFO sInfo;
ZeroMemory(&sInfo,sizeof(sInfo));
PROCESS_INFORMATION pInfo;
ZeroMemory(&pInfo,sizeof(pInfo));
sInfo.cb=sizeof(sInfo);
sInfo.dwFlags=STARTF_USESTDHANDLES;
sInfo.hStdInput=NULL;
sInfo.hStdOutput=wPipe;
sInfo.hStdError=wPipe;
// pStr contain ffmpeg command
CreateProcess(0,(LPTSTR)pStr,0,0,TRUE,NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);
CloseHandle(wPipe);
BOOL ok;
do
{
memset(buf,0,bufsize);
ok=::ReadFile(rPipe,buf,100,&reDword,0);
result += buf;
}while(ok);
但我无法以交互方式更新“结果”。我的应用程序在转换过程中被保留,并且“结果”字符串仅在 ffmpeg 的进程完成后更新。
如何让我的主进程和 ffmpeg 同时运行,并以交互方式读取/写入 ffmpeg 进程的输出/输入?
感谢您的宝贵时间!
LR
【问题讨论】:
标签: windows visual-c++ ffmpeg