需要读取 ffmpeg 解码的输出来做一个进度条。
用 CreateProcess 来创建子进程,匿名管道重定向了 stdout 和 stderr,但是间歇性地会出现 strstr 找到了“Duration:”,但是此时 ReadBuff 里面就只有“Duration:”的情况。这种情况下再 ReadFile 也读不出来数据。
有什么头绪吗?
我的核心代码如下
bRet = CreateProcess(NULL, (LPSTR)"ffmpeg.exe -i test.mkv output.mp4 -y", NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi);
SetStdHandle(STD_OUTPUT_HANDLE, hTemp);
CloseHandle(hWrite);
while (ReadFile(hRead, ReadBuff, 1024, &ReadNum, NULL))
{
ReadBuff[ReadNum] = '\0';
if (strstr(ReadBuff, "Duration:"))
{
for(int i=0;i<=10;i++)
{
putchar(*(strstr(ReadBuff, "Duration:")+10+i));
}
putchar('\n');
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.