Comment puis-je rediriger un tube ffmpeg d'un processus vers le processus enfant stdin?Rediriger le tube ffmpeg vers le processus enfant
Je veux obtenir la même chose que la tuyauterie dans cmd:
ffmpeg -i test.mov pipe:1 | vlc -
J'ai essayé:
avio_open("pipe:1"); // ffmpeg open pipe to STD_OUTPUT_HANDLE.
// lots of code
STARTUPINFO si;
PROCESS_INFORMATION pi;
SECURITY_ATTRIBUTES saAttr = {0};
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
CreatePipe(&hReadPipe, &hWritePipe, &saAttr, 0);
SetStdHandle(STD_OUTPUT_HANDLE, hWritePipe);
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi, sizeof(pi));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdInput = hReadPipe;
CreateProcess(NULL, // No module name (use command line)
L"C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc -vv --demux ffmpeg -", // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
TRUE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi) // Pointer to PROCESS_INFORMATION structure
// start ffmpeg write to file.
Mais je ne sais pas honnêtement ce que je fais.
Y a-t-il des GetStdHandle
qui n'impriment normalement pas sur la console?
Ce que vous avez là pourrait fonctionner si vous trafiquez un enfant après avoir capturé le handle de sortie du parent en utilisant GetStdHandle. Mais comment fonctionne la res de votre code? –
John Zwinck: Ajouté plus de code, quelque chose de spécifique que vous devez savoir? – ronag
Maintenant vous avez caché le type de votre variable 'si' (qui a été montré avant votre édition!). Je ne sais pas si je serai en mesure de résoudre votre problème en soi, mais je pense que vous pouvez améliorer votre question et cela aidera les autres à vous aider. –