Стриминг файла-потока (IP-камера)

Статус
В этой теме нельзя размещать новые ответы.

propovednik

Постоялец
Регистрация
16 Май 2008
Сообщения
104
Реакции
21
Здравствуйте, столкнулся с такой проблемой: есть веб-камеры, которые можно просматривать через встроенный веб-интерфейс, там куча няшек - логин-пароль, разграничение прав, выбор качества и т.п., но требуется просто дать чистый видео-поток, не запрашивающий логина-пароля и доступный без веб-интерфейса камеры (планируется сервер агрегации видео-потоков с камер, которые находятся в закрытой сети и перенаправление их во внешку для просмотра через интернет)
Каждая камера генерирует видеопоток Для просмотра ссылки Войди или Зарегистрируйся
Для доступа к нему требуется Basic-аутентификация, кукис и особый юзерагент. Если бы это была просто страничка или файл, то проблем нету:
PHP:
/* далее получение содержимого файла, для доступа к которому нужен логин-пароль и его вывод */
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Authorization: Basic YWRtdfsaNDYWJjN2MwN2E1\r\n" .
              "Cookie: foo=bar\r\n"
  )
);
$context = stream_context_create($opts);
echo file_get_contents('http://www.example.com/video.mpeg', false, $context);
с потоком такой трюк не проходит почему-то. Подскажите как сделать задуманное?
 
А может быть использовать CURL ? он лучше с этим работает.

и если честно то мне кажется php скрипт просто будет заполнять всю память и сообщать о том что идете переполнение - так как читает поток и тут же идет вывода потока, а поток не имеет какого то конкретного объема
 
cURL делает то же самое, просто оболочка для команд, ну и пара няшек типа мультихендла. Насчет зависаний пхп - врядли, пробовал отдавать 2-гигабайтный файл, никаких переполнений и расхода памяти, просто с обычным файлом получается, а вот с потоком почему-то нет.
 
Может быть дело в буферизации ? обычно PHP буферизирует.

И что мешает взять какой либо flash плеер ? обычно такие вещи показываются через flash плеер.

например в flash сервере red5 есть flash плеер с примером трансляции видео, посмотри его.
 
file_get_contents - читает весь файл до конца.
так как у потока нету конца, то естесвтенно у вас нчиего не получается
используйте fopen , и fread
читайте по 8 килобайт, и отдавайте наружу
 
file_get_contents - читает весь файл до конца. так как у потока нету конца, то естесвтенно у вас нчиего не получается
спасибо. вот что получилось в итоге (рабочая версия)
PHP:
<? 
$opts = array(
  'http'=>array(
    'method'=>"POST",
    'header'=>"Authorization: Basic YWRtdfsaNDYWJjN2MwN2E1\r\n" .
              "Cookie: foo=bar\r\n"
  )
);
$context = stream_context_create($opts);
$handle = fopen('http://10.15.48.51/live/m.peg4','rb',false,$context);
while (!feof($handle)) {
  echo fread($handle, 8192);
}
fclose($handle);
?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху