Тема: трансляция потока mJPEG

Приветствую Вас Друзья !  ТЗ Сервер с внешним IP/ На нём требуется сделать вещание с IP камеры в интернет. Камера находится в локальной сети и выдаёт поток вот так  http://admin:1234@192.168.89.2/mjpg/video.mjpg Использовать тег <img src> не получится, так как ip "серый"
как можно решить этот вопрос с использованием PHP ?

<? 
$camurl="http://admin:1234@192.168.89.2/mjpg/video.mjpg"; 
$boundary="\n--"; 
$f = @fopen($camurl,"r") ; 
if(!$f) 
{ 
//**** cannot open 
echo "error"; 
} 
else 
{ 
//**** URL OK 
while (substr_count($r,"Content-Length") != 2) $r.=@fread($f,512); 
$start = strpos($r,'y'); 
$end = strpos($r,$boundary,$start)-1; 
$frame = substr("$r",$start,$end - $start); 
header("Content-type: image/jpeg"); 
echo $frame; 
} 
fclose($f); 
?> 

данный скрипт не работает. изображение не отображается  ..
Есть ли варианты решения вопроса с трансляцией ?

Заранее спасибо и с Наступающим Вас Новым Годом  big_smile

Отредактировано SamGromoff (2010-12-31 12:37:37)

2

Re: трансляция потока mJPEG

Попробуйте так:

<?php

set_time_limit(0); 
header('Content-Type: multipart/x-mixed-replace;boundary=ipcamera'); 
readfile('http://admin:1234@192.168.89.2/mjpg/video.mjpg');

?>

Или пропишите редирект в .htaccess.

Redirect 301 /video.mjpg http://admin:1234@192.168.89.2/mjpg/video.mjpg

Не знаю какой вариант будет работать, но попробуйте.
___________

Спасибо за поздравление. И вас с наступающим! smile

ВКонтакте Facebook Twitter

3

Re: трансляция потока mJPEG

Я совершенно забыл то перед НГ на этот адрес повесил сервер вместо камеры ..  тогда после праздников отпишусь .. что и как ..
Спасибо Вам smile С Наступившим 2011 годом !

4

Re: трансляция потока mJPEG

первый способ
под Google Chrome выдаёт статическую картинку
Под IE - предлагает открыть файл cam , в котором идёт mJPEG поток

второй способ
изображение недоступно

5

Re: трансляция потока mJPEG

Если первый вариант хоть что-то выводит - значит надо попробовать заняться им. Взял я его отсюда: http://www.phpbuilder.com/board/showpos … stcount=21

В описании есть важный момент.
# Sending the correct header
# The boundary=ipcamera is important.
# You will have to change "ipcamera" to whatever your camera uses to seperate the
# images. Mine uses "--ipcamera" as seperator. You can omit the leading --, but have
# to use the rest.

Вам надо посмотреть заголовки вашего файла картинки (video.mjpg) и вычленить параметр boundary (разделитель фреймов), значение которого надо подставить в выше приведенный php скрипт вместо ipcamera.

Заголовки файлов можно посмотреть с помощью Firebug или Live HTTP headers - расширения Firefox.

ВКонтакте Facebook Twitter

6

Re: трансляция потока mJPEG

решили не ломать голову и поставили камеру на внешнем ip smile
Но за направление для работы спасибо.  будем разбираться .

7

Re: трансляция потока mJPEG

Hanut пишет:

Если первый вариант хоть что-то выводит - значит надо попробовать заняться им.
Вам надо посмотреть заголовки вашего файла картинки (video.mjpg) и вычленить параметр boundary (разделитель фреймов), значение которого надо подставить в выше приведенный php скрипт вместо ipcamera.

На самом деле работает и тот и другой вариант.
Большое спасибо, Hanut, за сэкономленное время.
Правда, вариант с .htaccess не скрывает реальный источник данных.

К слову, параметр boundary вычисляется очень просто, для этого получаем поток:

<?php
readfile('http://log:pass@some.com/video.mjpg');
?>

И смотрим в самом его начале разделитель. В моём случае это был myboundary

Отредактировано grio (2013-04-15 08:03:47)

8

Re: трансляция потока mJPEG

grio пишет:
Hanut пишет:

Если первый вариант хоть что-то выводит - значит надо попробовать заняться им.
Вам надо посмотреть заголовки вашего файла картинки (video.mjpg) и вычленить параметр boundary (разделитель фреймов), значение которого надо подставить в выше приведенный php скрипт вместо ipcamera.

На самом деле работает и тот и другой вариант.
Большое спасибо, Hanut, за сэкономленное время.
Правда, вариант с .htaccess не скрывает реальный источник данных.

К слову, параметр boundary вычисляется очень просто, для этого получаем поток:

<?php
readfile('http://log:pass@some.com/video.mjpg');
?>

И смотрим в самом его начале разделитель. В моём случае это был myboundary

Посмотрел разделитель, у меня он video boundary--
Ссылка на видео http://carwatch1.dlinkddns.com:8001/video/mjpg.cgi
Пробовал разные варианты - не работает(

<?
set_time_limit(0);
header('Content-Type: multipart/x-mixed-replace;boundary=video boundary');
readfile('http://carwatch1.dlinkddns.com:8001/video/mjpg.cgi');
<?
set_time_limit(0);
header('Content-Type: multipart/x-mixed-replace;boundary="video boundary"');
readfile('http://carwatch1.dlinkddns.com:8001/video/mjpg.cgi');
<?
set_time_limit(0);
header('Content-Type: multipart/x-mixed-replace;boundary=video boundary--');
readfile('http://carwatch1.dlinkddns.com:8001/video/mjpg.cgi');

В самом заголовке видеопотока Content-Type: multipart/x-mixed-replace;boundary=video boundary--

Отредактировано discripter (2013-11-15 00:20:28)

9

Re: трансляция потока mJPEG

discripter пишет:

Пробовал разные варианты - не работает(

К сожалению, не смогу помочь.

ВКонтакте Facebook Twitter