2015-06-25 4 views
1

У меня есть программа под названием capture, которая считывает данные веб-камеры и выводит их в программу avconv.Перенаправить stdout во внешнюю программу в C/C++

./capture | avconv -f mpegts udp://10.1.62.252:5050 

Теперь я должен выводить на avconv внутри моей программы на C.

Таким образом, вместо вывода на stoud:

fwrite(p, size, 1, stdout); 

мне нужно сделать что-то подобное:

system("stdout | avconv -f mpegts udp://10.1.62.252:5050"); 

Как я могу это сделать?

+0

Возможно, вам захочется узнать о функции ['popen'] (http://man7.org/linux/man-pages/man3/popen.3.html). –

+0

Что вы хотите сделать с выходом, созданным 'avconv'? – jxh

+0

avconv инкапсулируется в h264. С наилучшими пожеланиями. Есть недостающие флаги, которые я удалил для упрощения. – user3068649

ответ

4

Для этой цели вы можете использовать popen().

FILE *f = popen("avconv -f mpegts udp://10.1.62.252:5050","w"); 

затем используйте fwrite(), чтобы написать.

PS: На самом деле, этот метод не перенаправлять stdout вашей программы, но гр она использует pipe stream концепцию, чтобы обеспечить ввод в avconv из вашего кода.

+1

Поскольку это linux, а данные двоичные, это работает отлично. Но в общем случае 'popen' не поддерживает двоичный режим. Также обратите внимание, что вы используете 'pclose' для закрытия файла, а не' fclose'. – jxh

Смежные вопросы