0

我正在尝试使用 mediaelement.js 从 php 加载视频,但它不起作用..它显示“下载文件”

<video src="http://localhost/readmp4.php?id=111" width="640" height="360" id="player2" controls="controls">
<source type="video/mp4" src="http://localhost/readmp4.php?id=111" />
</video>
<script>
$('video').mediaelementplayer({});
</script>
4

2 回答 2

1

我花了 1.5 小时来解决为什么 mediaelement 没有播放从 php 返回的音频文件。darleys 的建议有效,但添加 type="audio/mpeg" 也使其有效。

<audio src="stream.php?file=<?php echo urlencode($abs_file);?>" type="audio/mpeg" />

于 2014-02-08T07:21:15.070 回答
-2
  1. 例如,确保将 mp4 伪装成路径而不是 php 请求 url<video src=/junk/junk.mp4> instead of <video src=video.php?name=junk>

  2. 当用户请求一个路径路由到一个 php 文件,该文件将读取在某个位置保护的视频文件时,执行一个到 php 文件的 htaccess 路由。例如 ...

RewriteRule ^junk/(.*) /preview.php?media=$1 [QSA,L]

  1. 现在在 php 中,请确保也满足 safari (ipad/iphone) 请求...

    <?php
    class VideoGroup1 {
       public function preview() { 
           $id = substr($_REQUEST['media'],0,strrpos($_REQUEST['media'],"."));
           $thisMedia = Pillar_Manage_Media::fetchMedia($id);
           //echo Foundry_Useful::unsealit($thisMedia['path']).$thisMedia['mediaid'];
           $file = Foundry_Useful::unsealit($thisMedia['path']).$thisMedia['mediaid'].".mp4";
           $filesize = filesize($file);
    
           $offset = 0;
           $length = $filesize;
    
           if ( isset($_SERVER['HTTP_RANGE']) ) {
    
    
               $partialContent = true;
    
    
               preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);
    
               $offset = intval($matches[1]);
               $length = intval($matches[2]) - $offset;
           } else {
               $partialContent = false;
           }
    
           $file = fopen($file, 'r');
    
    
           fseek($file, $offset);
    
           $data = fread($file, $length);
    
           fclose($file);
    
           if ( $partialContent ) {
    
    
               header('HTTP/1.1 206 Partial Content');
    
               header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize);
           }
    
    
           header('Content-Type: video/mp4');
           header('Content-Length: ' . $filesize);
           header('Content-Disposition: attachment; filename="' . $file . '"');
           header('Accept-Ranges: bytes');
    
           print($data);
    
       }//End Function preview
    
    
    }//END Class VideoGroup1
    
于 2012-07-02T07:26:05.243 回答