关键词搜索

源码搜索 ×
×

php 输出视频流ios无法播放的问题(隐藏真实播放地址)

发布2021-11-26浏览579次

详情内容

  1. 通过php直接输出的文件通常不被html5的<video>标签支持,尤其是ios设备。为了完美支持html5的视频播放,php必须支持byte-range请求。因为html5播放视频之前会发送一个只需文件少数字节的请求,确认服务端是否支持byte-range请求,支持才会继续发送请求剩余的文件数据。
  2. 具体的问题就是 byte-range ,相信遇到这个问题的朋友也在网上搜索到了许多相关的问题,接下来下面是整理后的代码,经测试苹果端可支持播放,代码如下:
  1. <?php
  2. $localfile = "test.mp4";
  3. $size = filesize($localfile);
  4. $start = 0;
  5. $end = $size - 1;
  6. $length = $size;
  7. header("Accept-Ranges: 0-$size");
  8. header("Content-Type: video/mp4");
  9. $ranges_arr = array();
  10. if (isset($_SERVER['HTTP_RANGE'])) {
  11. if (!preg_match('/^bytes=\d*-\d*(,\d*-\d*)*$/i', $_SERVER['HTTP_RANGE'])) {
  12. header('HTTP/1.1 416 Requested Range Not Satisfiable');
  13. }
  14. $ranges = explode(',', substr($_SERVER['HTTP_RANGE'], 6));
  15. foreach ($ranges as $range) {
  16. $parts = explode('-', $range);
  17. $ranges_arr[] = array($parts[0],$parts[1]);
  18. }
  19. $ranges = $ranges_arr[0];
  20. if($ranges[0]==''){
  21. if($ranges[1]!=''){
  22. //Range: bytes=-n 表示取文件末尾的n个字节
  23. $length = (int)$ranges[1];
  24. $start = $size - $length;
  25. }else{
  26. //Range: bytes=- 这种形式不合法
  27. header('HTTP/1.1 416 Requested Range Not Satisfiable');
  28. }
  29. }else{
  30. $start = (int)$ranges[0];
  31. if($ranges[1]!=''){
  32. //Range: bytes=n-m 表示从文件的n偏移量读到m偏移量
  33. $end = (int)$ranges[1];
  34. }
  35. //Range: bytes=n- 表示从文件的n偏移量读到末尾
  36. $length = $end - $start + 1;
  37. }
  38. header('HTTP/1.1 206 PARTIAL CONTENT');
  39. }
  40. header("Content-Range: bytes {$start}-{$end}/{$size}");
  41. header("Content-Length: $length");
  42. $buffer = 8096;
  43. $file = fopen($localfile, 'rb');
  44. if($file){
  45. fseek($file, $start);
  46. while (!feof($file) && ($p = ftell($file)) <= $end){
  47. if ($p + $buffer > $end) {
  48. $buffer = $end - $p + 1;
  49. }
  50. set_time_limit(0);
  51. echo fread($file, $buffer);
  52. flush();
  53. }
  54. fclose($file);
  55. }
  56. die;
  57. ?>

将代码中的 视频地址更换成你自己本地的视频地址,然后就可以跑起来了。如果有问题请留言指出不足之处,谢谢!

注意:该代码仅支持本地文件流的读取和输出!不支持url 形式的文件。

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载