我正在尝试通过 php 流式传输视频 并通过
播放视频<video width="100%" height="100%" src='streamvideo.php'>
</video>
视频由
控制range: bytes= 1000000 - 2000000
并从 字节 包含在视频发送的标题中
视频发送到php 以发送头部为例
range: bytes=2000000-
我从这个过程中注意到的是 如果我将广播提交到特定位置,它不会加载到视频中 视频正在上传中 从你选择呈现的时间开始到开始
如何只下载我从视频中选择的部分
iam 试图添加到响应头
Accept-Ranges: bytes
Content-Type: application/octet-stream
Content-Range: bytes startBytes-endBytes/videoSize
但还是从头开始下载视频
要仅下载视频的特定部分,您需要确保您的服务器正确处理范围请求。这涉及在 PHP 脚本中设置适当的标头。
这是一个示例,说明如何修改 PHP 脚本以处理范围请求并提供视频的请求部分:
<?php
$videoFile = 'path/to/your/video.mp4';
$fp = fopen($videoFile, 'rb');
$size = filesize($videoFile);
$start = 0;
$end = $size - 1;
if (isset($_SERVER['HTTP_RANGE'])) {
$range = $_SERVER['HTTP_RANGE'];
$matches = array();
preg_match('/bytes=(\d+)-(\d+)?/', $range, $matches);
$start = intval($matches[1]);
if (isset($matches[2])) {
$end = intval($matches[2]);
}
}
if ($start > 0 || $end < ($size - 1)) {
header('HTTP/1.1 206 Partial Content');
}
header('Content-Type: video/mp4');
header('Accept-Ranges: bytes');
header("Content-Range: bytes $start-$end/$size");
header("Content-Length: " . ($end - $start + 1));
header("Content-Disposition: inline; filename=video.mp4");
fseek($fp, $start);
$remainingBytes = $end - $start + 1;
while ($remainingBytes > 0 && !feof($fp)) {
$chunkSize = ($remainingBytes > 8192) ? 8192 : $remainingBytes;
$remainingBytes -= $chunkSize;
echo fread($fp, $chunkSize);
flush();
}
fclose($fp);
?>
在这个例子中,脚本首先读取 HTTP Range 标头以确定客户端请求的开始和结束字节位置。然后它设置适当的响应标头,包括 Content-Range 标头以指示返回的字节范围。
最后,脚本在视频文件中寻找请求的开始位置,并读取文件的请求部分并将其以块的形式输出到客户端。
使用此脚本,您的 HTML 视频播放器应该能够请求和播放您选择的视频的特定部分。