2012-04-23 125 views
2

所以这是我的PHP视频代码 它可以在浏览器中运行,但是当我尝试让它在iPhone和iPad上播放时,它似乎通过它弹出带有x的播放按钮。在iPad上播放PHP视频

<?php 
header('Content-type: video/mp4'); 
$homepage = file_get_contents('http://cdn.videos.budtraffic.com/sodaradio/J/Jessie%20J%20-%20Laserlight.mp4'); 
echo $homepage; 
exit; 
?> 
+0

很抱歉,如果这似乎是一个愚蠢的问题,但为什么不干脆直接将浏览器重定向到文件? 'header('Location:http:// blablabla');' – 2012-04-23 07:05:51

+0

因为该服务器是我们的媒体文件,唯一可以访问的IP地址就是我们的sodaradio站点的IP地址 – RussellHarrower 2012-04-23 07:11:00

+0

[Mp4视频不会重复玩在iPad](http://stackoverflow.com/questions/3906558/mp4-video-wont-play-in-the-ipad) – JJJ 2012-04-23 07:53:14

回答

4

Explanation on Apple Web site

简短的回答:

因为iOS设备需要服务器支持字节范围的视频请求,并且您的代码不提供该功能。

龙答:

当iOS设备使一个视频的请求,他们并不下载整个视频。他们一次只下载一小块,以最小化带宽使用,并且还因为用户可能想要在不下载以前的部分的情况下跳到视频的后期部分。为此,他们提出字节范围请求。基本上,他们告诉服务器“嘿,给我的文件在第100和第200字节之间的部分”。字节范围请求使用Range头,看起来就像下面

GET /myvideo.mp4 HTTP/1.1 
Host: www.example.com 
Range: bytes=500-999 

的在这种情况下,答复必须服务器类似的东西

HTTP/1.1 206 Partial Content 
Content-Type: video/mp4 
Content-Range: bytes 500-999/20000 

所以,你需要比这四个PHP线更以支持iOS设备。首先,您将解析Range标题。该信息可在$_SERVER['HTTP_RANGE']全球变种中找到。然后,您只需要提取文件的这一部分并将其发送给客户端。您还需要填写Content-Range标题。

请注意,Content-Range标题包含完整的文件大小,因此您的代码需要提供该信息。还要注意几乎每个服务器都支持那种对静态文件的请求。如果您不需要对文件进行特殊处理,则可以选择将文件复制到公用服务器上,并让它为您完成这项工作。

非相关评论

把它看作是建设性的批评,但你目前的形式代码将带给你的服务器的膝盖。您基本上发送它之前整个文件在内存,并且更糟糕的是,您为每请求。如果100人同时下载100MB视频,则需要在服务器上为内存提供10 GB的服务。这并没有扩展,完全没有。

更好的解决方案是使用readfile函数将文件作为从CDN读取的文件发送出去。这样,你只需要使用一小块内存,并且可以提供更多的并发请求。

编辑:实际上,您还需要使用特殊的响应代码,206部分内容进行响应。我在这个答案的第一个版本中忘记了这一点。现在已修复

+0

所以,你将能够帮助或指向我在正确的方向去解决这个问题 – RussellHarrower 2012-04-23 09:54:39

+0

在谷歌上搜索“字节范围的PHP”。你应该能够找到如何做到这一点的代码示例。 – 2012-04-23 10:22:24

1

我试图做同样的事情:一个安全的PHP脚本访问MP4视频。

iOS(iPad & iPhone)无法使用它。

我跟你说的话(字节范围),下面这个教程tryed:

http://mobiforge.com/developing/story/content-delivery-mobile-devices

但iPad的从不发送“HTTP_RANGE”在其请求:因为它是一个PHP文件,何必呢这样做?

我做了一个重写规则(access.mp4 - > access.php),甚至当iOS尝试访问access.mp4时,服务器请求中没有HTTP_RANGE。

所以,我认为这是没有办法使安全的PHP脚本与iOS的工作...

+0

打开一个新问题,并粘贴你使用的代码(当然私人信息消毒)。然后我或其他人可以帮助你。 – 2012-07-16 13:33:38