2017-03-16 3 views
13

PHPベースのHTTP経由での録画ファイルからのライブストリーミングを整理したいと思います。

はじめに:ストリーミングサーバーでビデオをローカルファイル(local_file.mpg)に書き込んだり、クライアントから要求があった場合は、
$start_byte = filesize("local_file.mpg")-10MB;からストリーミングを開始します。local_file.mpgはまだ書き込んでおり、フラッシング。

問題:私は次のヘッダーでHTTP範囲経由でストリーミング:
PHPに基づいたHTTP経由の録画ファイルからのライブビデオストリーミング

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); 

フラッシング次のように:

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を経由して、それを開いて、それがされるまでに再生ストリームが要求された時刻。これは、ファイルのサイズを決定し、要求された側に提供するため、予想されます。しかし、人工的にファイルサイズを増やした場合、たとえば、
$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でも動作させる方法を教えてください。

+1

あなたは[この質問](http://stackoverflow.com/questions/32459509/php-recording-a-live-streamingからコードを適用しようとしたことがあり-to-a-file)? – MifReal

+0

@MifRealコメントありがとう!私はそれを試して、質問を更新しました。確認していただけますか? –

答えて

3

PHPの実行に時間制限がありますか? そうならば、と無制限のように変更します。

set_time_limit(0); 
関連する問題