保護されたメディアをストリーミングする jPlayer を使用しています。トラックが完全にバッファリングされる前にシーク バーのセクションをクリックすると、トラックが最初から再生されますが、プログレス バーはクリックした場所に残ります。
これを回避する方法はありますか。コンテンツの範囲などを調査し、次の解決策に出くわしましたが、まだ十分ではありません。
header("Content-Type: ".$mimeTypes[$ext]);
header('Content-Disposition: attachment; filename="'.$fileName.'"');
header('Accept-Ranges: bytes');
//header('Content-Range: bytes');
$begin = 0;
$end = $fsize - 1;
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]);
}
}
header('Content-Length:' . (($end - $begin) + 1));
header("Content-Range: bytes $begin-$end/$fsize");
トラック プログレス バーは、smartReadFile.php からのこの修正されたコードの助けを借りて機能します。
https://groups.google.com/forum/#!msg/jplayer/nSM2UmnSKKA/bC-l3k0pCPMJ
バッファリングするのに数秒かかると、正しく動作します。
シークバーがデータを取得する前に、jPlayerにプリバッファリングする方法はありますか?
$(document).ready(function(){
$("#jquery_jplayer_1").jPlayer({
swfPath: "js",
supplied: "mp3, m4a, oga"
});
});
function playTrack(id,title) {
$("#jquery_jplayer_1").jPlayer("setMedia", { mp3: "/download.php?track=" + id });
$("#jp-audio-container .track-name").text(title);
$("#jquery_jplayer_1").jPlayer("play");
var span = document.getElementById('trackTitle');
while( span.firstChild ) {
span.removeChild( span.firstChild );
}
span.appendChild( document.createTextNode("Now playing: " + title) );
}
これを回避する方法はありますか?
どうもありがとう。