PHP 기반의 HTTP를 통해 파일을 녹화하는 라이브 스트리밍을 구성하고 싶습니다.
소개 : : 스트리밍 서버에서 로컬 파일 (local_file.mpg)에 비디오를 작성하고 클라이언트로부터 요청을 받으면 $start_byte = filesize("local_file.mpg")-10MB;
에서 스트리밍을 시작합니다. local_file.mpg은 여전히 작성 중이며 PHP 스크립트는 계속 읽고 있습니다. 홍조.
문제 : 나는 다음과 같은 헤더를 HTTP 범위를 통해 스트리밍는 :
PHP를 기반으로 HTTP를 통해 파일을 녹화하는 라이브 비디오 스트리밍
while(!feof($fp)){
$buf_size = 1024*8;
$pos = ftell($fp);
if ($pos >= $item["to_byte"]){
fclose($fp);
break;
}
if ($pos + $buf_size > $item["to_byte"]){
$buf_size = $item["to_byte"] - $pos;
}
if ($buf_size > 0){
echo fread($fp, $buf_size);
}
flush();
ob_flush();
}
내가 VLC 또는 FFplay를 통해 엽니 다,하지만 때까지 연주 :
header('HTTP/1.1 206 Partial Content');
header("Content-Type: video/mpeg");
header('Content-Length: '.($seek_end - $seek_start));
header('Content-Range: bytes '.$seek_start.'-'.$seek_end.'/'.$size);
그리고 플래시는 다음과 같이 스트림이 요구 된 시각. 이것은 우리가 파일의 크기를 결정하고 요청 된쪽에 제공하기 때문에 예상된다. 그러나 우리가 인위적으로 파일 크기를 늘리면 (예 : $size = filesize("local_file.mpg")+999999999999;
) 비디오 플레이어가 새 데이터를 너무 빨리 요청하기 때문에 너무 빨리 녹화되지 않기 때문에 도움이되지 않습니다. 그리고 스트림이 요청 된 시점에 재생을 중지했습니다.
1. PHP를 기반으로 HTTP를 통해 파일을 녹음하여 라이브 스트리밍을 정리하는 방법을 알려주십시오.
2. HTTP RANGE 메커니즘으로 할 수 있습니까? 아니면 다른 방법을 사용해야합니까?
UPDATE :이 this question을 바탕으로 나는 다음 코드를 시도 :
<?php
$file = "online.mpg";
function flush_buffers(){
ob_end_flush();
ob_flush();
flush();
ob_start();
}
header('Content-Type: video/mpeg');
$stream = fopen($file, "rb");
fseek($stream, (filesize($file)-10000000), SEEK_SET);
while(1){
$response = fread($stream, 8192);
echo $response;
flush_buffers();
}
fclose($stream);
exit();
?>
을 그리고 그것은 ffplay를 통해 잘 작동하지만, VLC를 통해 1 분 후 더 이상 재생되지 다음 들렸다.
VLC에서도 작동하도록 조언 해주세요.
당신은 [이 질문] (http://stackoverflow.com/questions/32459509/php-recording-a-live-streaming의 코드를 적용하는 시도 해 봤나 -to-a-file)? – MifReal
@MifReal 코멘트 주셔서 감사합니다! 나는 그것을 시도하고 질문을 업데이 트했습니다. 확인해 주시겠습니까? –