需要读取 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'); } } 