PHP伪流
我对PHP伪流有两个问题PHP伪流,php,video,streaming,freeze,Php,Video,Streaming,Freeze,我对PHP伪流有两个问题 有时会有点口吃 不使用mp4文件 $php\u buffer=2; $bitr_min=60; $intv_max=0.6; $bitr_max=300; $intv_min=0.3; $bitr=$bitr+$php\u缓冲区; 如果($bitr=$bitr_max){ $packet\u interval=$intv\u min; } 否则{ $packet_interval=$intv_max-($intv_max-$intv_min)*($bitr-$bitr
$php\u buffer=2;
$bitr_min=60;
$intv_max=0.6;
$bitr_max=300;
$intv_min=0.3;
$bitr=$bitr+$php\u缓冲区;
如果($bitr=$bitr_max){
$packet\u interval=$intv\u min;
}
否则{
$packet_interval=$intv_max-($intv_max-$intv_min)*($bitr-$bitr_min)/($bitr_max-$bitr_min));
$packet\u interval=round($packet\u interval*100)/100;
}
$packet\u size=round($bitr*$packet\u interval*1024);
$limit_带宽=$bitr;
$fsize=文件大小($flv)-($fseek>0)$fseek+1:0);
设置时间限制(30+$fsize/($limit\u带宽*1024));
如果($no_缓存){
#禁止缓存(不同客户端的不同方法)
会话缓存限制器(“nocache”);
标题(“到期日期:1981年11月19日星期四08:52:00 GMT”);
标题(“上次修改:”.gmdate(“D,D M Y H:i:s”)“GMT”);
标头(“缓存控制:无存储,无缓存,必须重新验证,后检查=0,预检查=0”);
标题(“杂注:无缓存”);
}
//Flash视频头
if(strpos($fname,.flv'))
标题(“内容类型:视频/x-flv”);
其他的
标题(“内容类型:视频/mp4”);//视频/x-mp4
标题(“内容处置:附件;文件名=\”.$fname.\”;
标题(“内容长度:.$fsize”);
$fpr=fopen($flv,'rb');
//Flash视频文件格式头
如果($fseek!=0){
回音“FLV”。pack('C',1)。pack('C',1)。pack('N',9)。pack('N',9);
}
//查找所请求的文件开始
fseek($fpr,$fseek);
//启动文件输出
而(!feof($fpr)){
//带宽限制
如果($packet\u interval>0&&$limit\u带宽){
//开始时间
列表($us,$s)=爆炸('',微时间());
$ts=((浮动)$us+(浮动)$s);
//回音包
echo-fread($fpr,$packet_size);
//结束时间
列表($us,$s)=爆炸('',微时间());
$tst=((浮动)$us+(浮动)$s);
$tdi=$tst-$ts;
//等待,当输出慢于数据包间隔时
如果($tdi<(浮动)$数据包间隔){
usleep((浮动)$packet_interval*1000000-(浮动)$tdi*1000000);
}
}
否则{
//无带宽限制的输出文件
echo-fread($fpr,文件大小($flv));
}
}
在任何浏览器(包括iPad/平板电脑)上伪流传输任何MP4文件,所有功能均正常工作(向前搜索、向后搜索并显示正确的时间)
尝试使用tuxxin的MP4Streaming
同样适用于长尾JWPlayer 6和HTML5播放器