Php HTML5视频,首选编解码器和间接交付

Php HTML5视频,首选编解码器和间接交付,php,cross-browser,html5-video,Php,Cross Browser,Html5 Video,我目前正试图建立一个html5视频页面,限制对视频的访问。因此,我想将视频从web根目录中删除,并使用某种脚本检查用户帐户并交付视频 如果我将一个.ogv(theora)和一个.mp4(h264)文件放入webroot,并使用一个带有多个源标记的视频标记,那么它们可以在所有经过测试的浏览器上工作:Firefox(ogg)、Chrome(ogg)、IE9(mp4)、Safari(mp4)、Opera(ogg) 现在出现的第一个问题是:为什么chrome使用ogg格式?它通过mp4视频更快地

我目前正试图建立一个html5视频页面,限制对视频的访问。因此,我想将视频从web根目录中删除,并使用某种脚本检查用户帐户并交付视频

如果我将一个.ogv(theora)和一个.mp4(h264)文件放入webroot,并使用一个带有多个源标记的视频标记,那么它们可以在所有经过测试的浏览器上工作:Firefox(ogg)、Chrome(ogg)、IE9(mp4)、Safari(mp4)、Opera(ogg)





现在出现的第一个问题是:为什么chrome使用ogg格式?它通过mp4视频更快地浏览时间轴,而且它确实支持mp4视频。。。有没有办法将格式标记为“首选格式”

现在,如果我将文件从我的webroot中取出,并使用如下php脚本交付它们:

下载.php:

$path=explode('/',$_SERVER['PATH_INFO']); if (sizeof($path)>1) { $inf=explode('.',$path[1]); $id=intval($inf[0]); $type=$inf[1]; $ctype=''; if ($type=='ogv') { $ctype='video/ogg'; } elseif ($type=='mp4') { $ctype='video/mp4'; } $fname=sprintf('/var/outsidewebroot/videos/test.%s',$type); http_send_content_type($ctype); http_throttle(0.1); http_send_file($fname); } $path=explode('/',$服务器['path\u信息']); 如果(sizeof($path)>1){ $inf=分解('.',$path[1]); $id=intval($inf[0]); $type=$inf[1]; $ctype=''; 如果($type='ogv'){ $ctype='video/ogg'; }elseif($type=='mp4'){ $ctype='video/mp4'; } $fname=sprintf('/var/outsidewebroot/videos/test.%s',$type); http_发送_内容_类型($ctype); http_节流阀(0.1); http_发送_文件($fname); } 它应该输出文件,包括对http范围查询的支持

HTML:





Opera无法再确定视频的播放长度,更糟糕的是:google chrome(及其免费克隆版iron)挂起(mac和windows)——chrome本身仍在运行,但加载站点的选项卡被锁定

有没有办法将格式标记为“首选格式”

按优先顺序列出它们。您首先拥有ogg,因此它被视为首选

<video id="currentVideo" controls width=640>
<source type='video/mp4; codecs="avc1.64001E, mp4a.40.2"' src="http://mysite/2.mp4" />
<source type='video/ogg; codecs="theora, vorbis"' src="http://mysite/1.ogv" />
</video>


Hrmm。。。看起来,
Accept
请求头的质量因素可能会对此有用。它应该允许客户端对不同的媒体类型进行优先级排序。但是,我不知道是否有任何方法可以手动告诉浏览器设置此字段。它可能只是一些只有浏览器插件才能访问的东西。thanx说,将mp4放在第一位也可以防止chrome挂起,但它仍然没有显示视频