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

Тема в разделе "Как сделать...", создана пользователем propovednik, 18 ноя 2010.

Статус темы:
Закрыта.
  1. propovednik

    propovednik Постоялец

    Регистр.:
    16 май 2008
    Сообщения:
    104
    Симпатии:
    21
    Здравствуйте, столкнулся с такой проблемой: есть веб-камеры, которые можно просматривать через встроенный веб-интерфейс, там куча няшек - логин-пароль, разграничение прав, выбор качества и т.п., но требуется просто дать чистый видео-поток, не запрашивающий логина-пароля и доступный без веб-интерфейса камеры (планируется сервер агрегации видео-потоков с камер, которые находятся в закрытой сети и перенаправление их во внешку для просмотра через интернет)
    Каждая камера генерирует видеопоток http://x.x.x.x/video.mpeg
    Для доступа к нему требуется 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);
    с потоком такой трюк не проходит почему-то. Подскажите как сделать задуманное?
     
  2. alfaexpert

    alfaexpert

    Регистр.:
    23 июл 2008
    Сообщения:
    183
    Симпатии:
    27
    А может быть использовать CURL ? он лучше с этим работает.

    и если честно то мне кажется php скрипт просто будет заполнять всю память и сообщать о том что идете переполнение - так как читает поток и тут же идет вывода потока, а поток не имеет какого то конкретного объема
     
  3. propovednik

    propovednik Постоялец

    Регистр.:
    16 май 2008
    Сообщения:
    104
    Симпатии:
    21
    cURL делает то же самое, просто оболочка для команд, ну и пара няшек типа мультихендла. Насчет зависаний пхп - врядли, пробовал отдавать 2-гигабайтный файл, никаких переполнений и расхода памяти, просто с обычным файлом получается, а вот с потоком почему-то нет.
     
  4. alfaexpert

    alfaexpert

    Регистр.:
    23 июл 2008
    Сообщения:
    183
    Симпатии:
    27
    Может быть дело в буферизации ? обычно PHP буферизирует.

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

    например в flash сервере red5 есть flash плеер с примером трансляции видео, посмотри его.
     
  5. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    file_get_contents - читает весь файл до конца.
    так как у потока нету конца, то естесвтенно у вас нчиего не получается
    используйте fopen , и fread
    читайте по 8 килобайт, и отдавайте наружу
     
    propovednik нравится это.
  6. propovednik

    propovednik Постоялец

    Регистр.:
    16 май 2008
    Сообщения:
    104
    Симпатии:
    21
    спасибо. вот что получилось в итоге (рабочая версия)
    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($handle8192);
    }
    fclose($handle);
    ?>
     
    AleksWhite нравится это.
Статус темы:
Закрыта.