2

オンラインで見つけたこのsmartReadFilePHP メソッドを使用して、オーディオを jQuery にストリーミングしていますjPlayer。これはブラウザから再生するときはうまく機能しますが、トラックをシークでき、デュレーションが表示されますが、iOS Safari で試してみると、デュレーションが不明でシークできませんが、再生されます。アイデアはありますか?とても有難い。

function _smartReadFile($location, $filename, $mimeType = 'application/octet-stream')
    {
        if (!file_exists($location))
        {
            header ("HTTP/1.1 404 Not Found");
            return;
        }

        $size   = filesize($location);
        $time   = date('r', filemtime($location));

        $fm     = @fopen($location, 'rb');
        if (!$fm)
        {
            header ("HTTP/1.1 505 Internal server error");
            return;
        }

        $begin  = 0;
        $end    = $size - 1;

        if (isset($_SERVER['HTTP_RANGE']))
        {
            if (preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches))
            {
                $begin  = intval($matches[1]);
                if (!empty($matches[2]))
                {
                    $end    = intval($matches[2]);
                }
            }
        }

        if (isset($_SERVER['HTTP_RANGE']))
        {
            header('HTTP/1.1 206 Partial Content');
        }
        else
        {
            header('HTTP/1.1 200 OK');
        }

        header("Content-Type: $mimeType"); 
        header('Cache-Control: public, must-revalidate, max-age=0');
        header('Pragma: no-cache');  
        header('Accept-Ranges: bytes');
        header('Content-Length:' . (($end - $begin) + 1));
        if (isset($_SERVER['HTTP_RANGE']))
        {
            header("Content-Range: bytes $begin-$end/$size");
        }
        header("Content-Disposition: inline; filename=$filename");
        header("Content-Transfer-Encoding: binary");
        header("Last-Modified: $time");

        $cur    = $begin;
        fseek($fm, $begin, 0);

        while(!feof($fm) && $cur <= $end && (connection_status() == 0))
        {
            print fread($fm, min(1024 * 16, ($end - $cur) + 1));
            $cur += 1024 * 16;
        }
    }
4

1 に答える 1

1

ワシム、

すべてのファイル タイプでこの問題が発生していますか?

おそらく、MIME タイプをファイル タイプに近づけると役立つでしょう。

例:

$file = '/music/song.mp3';
// Add the mimeTypes for mp3
_smartReadFile($file, basename($file), 'audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3');

それが役立つことを願っています。

于 2012-11-10T06:04:48.607 に答える