MJPEG Видеопоток с камеры безопасности с использованием PHP и cURL - PullRequest
2 голосов
/ 01 февраля 2012

У меня есть несколько автономных сетевых камер безопасности (Axis 2100, они довольно старые), которые я хочу транслировать на веб-сайт.Камеры поддерживают потоковую передачу в формате MJPG, но для потоковой передачи видео с этих камер я должен сделать их общедоступными.Из соображений безопасности я хочу ограничить просмотр этих камер через мой веб-сайт, где я могу аутентифицировать пользователей.Поскольку веб-камеры находятся на отдельном хосте, я использую cURL и PHP для входа в камеры, получения потока изображений MJPG и отображения живого потока для отображения на веб-странице.

header('content-type: multipart/x-mixed-replace; boundary=--myboundary');

while (@ob_end_clean()); 
$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://XX.XXX.XXX.XX/axis-cgi/mjpg/video.cgi?resolution=320x240'); 
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY | CURLAUTH_ANYSAFE );
    curl_setopt($ch, CURLOPT_USERPWD, 'USERNAME:PASSWORD');
    $im = curl_exec($ch);


echo $im;
curl_close($ch);

Проблема заключается в том, что когда у меня несколько сеансов с попытками доступа к одной и той же странице php с кодом выше в одном браузере, загружается только один сеанс, в то время как остальные остаются пустыми и в итоге отображают 500 внутреннихОшибка сервера.Он работает, когда он открывается через несколько разных браузеров, но с ухудшением производительности.

В конечном счете, я хотел бы сделать его сервером веб-камеры, где я мог бы установить соединение с одним входным потоком с камеры и транслировать его нанесколько клиентов.

Мой сайт размещен на GoDaddy на сервере Linux, а я не на выделенном сервере, поэтому я не думаю, что смогу установить какой-либо причудливый сервер с открытым исходным кодом для видеопотока.

Спасибо и простите за такой длинный пост.

-T.Ho

1 Ответ

2 голосов
/ 19 июля 2012

Я провел здесь смертельный бой всю ночь с той же проблемой, и ваше подробное описание проблемы помогло мне выяснить, какие проблемы были в моем случае.

  • nginx + phpFastcgi в windows должен использовать несколько конфигураций php-cgi.exe (некоторые проблемы с процессом респауна) ... но это не главное (потому что ваш случай - linux ...)

и главное:

  • запуск нескольких простых 'WGET httpTargetImgSite' из командной строки - не воспроизводить проблему - все в порядке !!!

... поэтому вывод таков: серверная сторона должна быть хорошей, а причина проблемы должна быть кэширование в браузере связано!

если ваш php-код называется videoproxy.php

- direct browser calling of: http://serverip/videoproxy.php
- or calling some html file
<html><body><img src='videoproxy.php' /></body></html>

... будет проблема. но этот код НЕ БУДЕТ:

<html><body><script> 
document.write("<img src='videoproxy.php?dummy=" 
               +(new Date().valueOf()) +"' />"); 
</script></body></html>

(фиктивный уникальный номер для сохранения IMG-кэширования)

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