Перенаправить канал ffmpeg на дочерний процесс - PullRequest
1 голос
/ 01 апреля 2012

Как перенаправить канал ffmpeg из процесса в стандартный дочерний процесс?

Я хочу добиться того же, что и конвейер в cmd:

ffmpeg -i test.mov pipe:1 | vlc -

Я пытался:

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.

Но я, честно говоря, не знаю, что делаю.

Есть ли GetStdHandle, который обычно не печатает на консоль?

1 Ответ

1 голос
/ 01 апреля 2012

Вы можете попробовать создать канал:

  1. Вызов CreatePipe () , чтобы создать дескриптор чтения и дескриптор записи

  2. Вызовите SetStdHandle () , чтобы сделать дескриптор записи канала новым stdout

  3. Укажите дескриптор чтения канала как hStdInput для CreateProcess ()

Обновление:

если ваше приложение использует printf () для печати на консоль вывода STD, вам, вероятно, придется взломать структуру stdout и заменить там дескриптор.В любом случае попробуйте войти в вызов printf (), который не перенаправляется правильно, и посмотрите, какой дескриптор он использует в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...