HTML 视频流

问题描述 投票:0回答:1

我正在尝试通过 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

但还是从头开始下载视频

javascript php html video video-streaming
1个回答
0
投票

要仅下载视频的特定部分,您需要确保您的服务器正确处理范围请求。这涉及在 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 视频播放器应该能够请求和播放您选择的视频的特定部分。

© www.soinside.com 2019 - 2024. All rights reserved.