avconv изображение веб-камеры в стандартный вывод для использования в php

Я пытаюсь передать изображение с веб-камеры прямо в мой PHP-скрипт в системе Debian. Для этого я попытался открыть обработку файлов в /dev/video0, но это не сработало. С помощью программы "стример" я получил изображение на диск, веб-камера работает на /dev/video0

Я не хочу сначала сохранять образ на диск, потому что мне нужно обновить его через короткий промежуток времени. Моя идея состоит в том, чтобы получить изображение прямо на стандартный вывод и использовать php passthru для передачи вывода в клиентский браузер:

$header("Content-type: image/jpeg");
passthru('avconv /dev/video0 someparamters for direct output');

Я надеялся, что у avconv есть возможность вывести изображение на стандартный вывод, но я не смог найти такой опции. Есть ли возможность получить изображение с веб-камеры (через avconv или другой инструмент) прямо в php в виде двоичного потока?

Большое спасибо! Себастьян


person user3656400    schedule 24.06.2015    source источник
comment
Приведенное ниже решение с виртуальным диском, вероятно, будет хорошим вариантом. Таким образом, образ записывается в оперативную память, а не на диск.   -  person Fmstrat    schedule 30.09.2017
comment
спасибо! Вот как это работает с отмеченным раствором!   -  person user3656400    schedule 04.10.2017


Ответы (2)


Это работает без необходимости временного файла:

<?php
header("content-type: image/jpeg");
echo passthru("avconv -f video4linux2 -i /dev/video0 -vframes 1 -s 1280x1024 pipe:.jpg 2>/dev/null");
?>

(из https://gist.github.com/megasaturnv/a42ed77d3d08d0d3d91725dbe06a0efe)

Это также работает в теге img: https://gist.github.com/megasaturnv/6e5965732d4cff91f2e976e7a39efbaa

person Megasaturnv    schedule 23.10.2017
comment
какова цель этого ответа, когда ОП уже принял ответ уже 2 года назад. - person mfaisalhyder; 23.10.2017

Единственный способ, который я нашел, это сохранить в файл, затем file_get_contents

$filename = "snapshot.jpg";
system("avconv -f video4linux2 -i /dev/video0 -vframes 1 -s 1280x800 ".$filename);

if( file_exists( $filename ) ){
  header("content-type: image/jpeg");
  echo file_get_contents( $filename );
} else {
  echo "Error loading the snapshot";
}

Надеюсь это поможет

person Juan Carlos Carrillo    schedule 19.12.2015
comment
Спасибо за это решение. Я делал это на рамдиске. - person user3656400; 04.10.2017