基于PHP的基于HTTP的录制文件实时视频流

时间:2017-03-16 14:50:47

标签: php http streaming video-streaming vlc

我想基于PHP通过HTTP记录文件来组织实时流式传输。

简介:在流媒体服务器上,我将视频写入本地文件(local_file.mpg),当收到来自客户端的请求时,从第一个开始流式传输{1}} local_file.mpg仍在编写,PHP脚本继续读取并刷新。

问题:我通过HTTP Range使用以下标题进行流式传输:

$start_byte = filesize("local_file.mpg")-10MB;

冲洗如下:

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

我通过VLC或FFplay打开它,但它一直播放到请求流的时刻。这是预料之中的,因为我们确定文件的大小并将其提供给请求方。但是,如果我们人为地增加文件大小,例如
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(); } 它也没有帮助,因为视频播放器在没有记录时过早地请求新数据。并且在请求流的时刻也停止播放。

1。请建议如何根据PHP纠正通过HTTP记录文件组织实时流媒体。
2.是否可以使用HTTP RANGE机制进行,或者我应该采用其他方式?


更新:基于this question我尝试了下一个代码:

$size = filesize("local_file.mpg")+999999999999;

它通过ffplay运行良好,但是通过VLC它不会超过1分钟然后停止。
请建议如何让它在VLC上运行?

1 个答案:

答案 0 :(得分:4)

你有执行php的时间限制吗? 如果是,请将其更改为无限制:

set_time_limit(0);