PHP Потоковое видео обработчик - PullRequest
4 голосов
/ 06 декабря 2011

Я пытаюсь реализовать решение для потокового видео на основе доступа пользователя.

У меня есть много видеопотоков, расположенных в частной сети, подключенной к серверу (http // 192.168.100.101 / mpeg4 / 1 / media.amp), и я хочу «прокси» этот видеопоток через веб-сервер.

Я знаю, как настроить часть доступа пользователя, но как я могу передать поток видео пользователю?

Я пробовал что-то подобное, но, похоже, это не работает.

header('Content-type: application/x-rtsp-tunnelled');
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_URL, "http//192.168.100.101/mpeg4/1/media.amp");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
echo $output;
curl_close($ch);

Есть идеи, как лучше всего это сделать? Как это делают другие потоковые сайты?

Спасибо:)

Ответы [ 3 ]

2 голосов
/ 16 августа 2013

Да, это легко сделать. Нет необходимости устанавливать эти заголовки вручную. Пусть сервер сделает это автоматически.

Вот рабочий скрипт, который я написал для прокси потокового видео -

ini_set('memory_limit','1024M');

set_time_limit(3600);

ob_start();

**// do any user checks here - authentication / ip restriction / max downloads / whatever**

**// if check fails, return back error message**

**// if check succeeds, proceed with code below**

if( isset($_SERVER['HTTP_RANGE']) )

$opts['http']['header']="Range: ".$_SERVER['HTTP_RANGE'];

$opts['http']['method']= "HEAD";

$conh=stream_context_create($opts);

$opts['http']['method']= "GET";

$cong= stream_context_create($opts);

$out[]= file_get_contents($real_file_location_path_or_url,false,$conh);

$out[]= $http_response_header;

ob_end_clean();

array_map("header",$http_response_header);

readfile($real_file_location_path_or_url,false,$cong);
1 голос
/ 06 декабря 2011

curl_exec () не предназначен для потоковой передачи.Он вернется только после завершения http-запроса.Для потокового запроса это теоретически будет «никогда», и вы просто будете где-то заполнять буфер памяти.

Проверьте этот ответ для обходных путей: Манипулируйте строкой длиной 30 миллионов символов

0 голосов
/ 26 апреля 2012

Попробуйте решение, подобное приведенному на этой странице: Потоковая передача POST-данных через PHP cURL Я попробую сам, чтобы посмотреть, работает ли это, но подумал, что я опубликую это здесь, прежде чем отвлекаться и забыть об этом вопрос:)

...