1

我正在尝试通过 PHP 流式传输 mp4 视频。我的应用程序从存储块的位置加载视频并提供适当的部分。使用这些标题:

header("Content-Type: $contenttype");
header("Content-Length: $filesize");
header('Accept-Ranges: bytes');

当请求使用以下附加标头并输出正确的字节时,它还可以提供部分内容:

header('HTTP/1.1 206 Partial Content');
header("Content-Range: bytes $start-$end/$filesize");

流媒体在 Chrome 和 VLC 中效果很好,但在 iPad 上不起作用。测试 mp4 文件已确认可在 ipad 上运行。

有人对此有任何运气吗?任何建议将不胜感激!

4

2 回答 2

1

多年后碰巧看到这个,无论如何我都会留下我的答案。

由于 Apple Inc. 使用 H.264 编码作为视频的默认编码,因此如果您使用 H.264 以外的编解码器,您可能会发现您的视频在本机应用程序上播放流畅,但在 Safari 等浏览器中播放不流畅。

在这种情况下,您可能应该在通过 php 代码流式传输之前使用 ffmepg 重新编码您的视频。您的 PHP 代码对我来说看起来不错。

请记住添加--faststart标志以将 移动fastmoov到视频的开头,以便立即开始播放。

于 2020-06-07T16:12:36.000 回答
0

是的,它很容易做到。无需手动设置这些标题。让服务器自动完成。

这是一个工作脚本 -

ob_start();

if( isset($_SERVER['HTTP_RANGE']) )
      $opts['http']['header']="Range: ".$_SERVER['HTTP_RANGE']; 

$opts['http']['method']= "HEAD"; 
$conh=stream_context_create($opts); 
$opts['http']['method']= "GET";
$cong= stream_context_create($opts);
$out[]= file_get_contents($real_file_location_path_or_url,false,$conh); 
$out[]= $http_response_header; 
ob_end_clean(); 
array_map("header",$http_response_header); 
readfile($real_file_location_path_or_url,false,$cong); 
于 2013-08-16T10:32:10.493 回答