2017-04-16 7 views
1

再生/一時停止、次に、前のボタンのコードが少しあります。私は再生する複数のトラック(ストリーム)を持っており、次の前のボタンでそれらの間をジャンプすることができます。 Firefox、Chromeではうまく動作しますが、Safari(デスクトップ、モバイル)では動作しません。 FFやChromeでは、前のストリームにジャンプすると、ストリームの自動再生が開始されます。しかしSafariではなく、ストリームは次のまたは前のボタンを押すと停止します。この行動は何ですか?Safari - 次のストリームで自動的にHTML5の音声が再生されない

function aud_play_pause() { 
 
    var myAudio = document.getElementById("audio1"); 
 
    if (myAudio.paused) { 
 
     $('#stateicon').removeClass('fa fa-play'); 
 
     $('#stateicon').addClass('fa fa-pause'); 
 
     myAudio.play(); 
 
    } else { 
 
     $('#stateicon').removeClass('fa fa-pause'); 
 
     $('#stateicon').addClass('fa fa-play'); 
 
     myAudio.pause(); 
 
    } 
 
} 
 

 
$(document).ready(function($) { 
 
    jQuery(function($) { 
 
    var supportsAudio = !!document.createElement('audio').canPlayType; 
 
    if(supportsAudio) { 
 
    var index = 0, 
 
    playing = false; 
 
    tracks = [ 
 
     {"track":1,"name":"Music FM","file":"http://stream.musicfm.hu:8000/musicfm.mp3"}, 
 
     {"track":2,"name":"Radio 1","file":"http://213.181.210.106:8000/high.mp3"}, 
 
     {"track":3,"name":"Test FM","file":"http://213.181.210.106:8000/high.mp3"}, 
 
    ], 
 
    trackCount = tracks.length, 
 
    npTitle = $('#npTitle'), 
 
    audio = $('#audio1').bind('play', function() { 
 
     $('#stateicon').removeClass('fa fa-play'); 
 
     $('#stateicon').addClass('fa fa-pause'); 
 
     playing = true; 
 
    }).bind('pause', function() { 
 
     $('#stateicon').removeClass('fa fa-pause'); 
 
     $('#stateicon').addClass('fa fa-play'); 
 
     playing = false; 
 
    }).get(0), 
 
    btnPrev = $('#btnPrev').click(function() { 
 
     if((index - 1) > -1) { 
 
     index--; 
 
     loadTrack(index); 
 
     if(playing) { 
 
      audio.play(); 
 
     } 
 
     } else { 
 
     index = 0 
 
     loadTrack(trackCount-1); 
 
     if(playing) { 
 
      audio.play(); 
 
     } 
 
     } 
 
    }), 
 
    btnNext = $('#btnNext').click(function() { 
 
     if((index + 1) < trackCount) { 
 
     index++; 
 
     loadTrack(index); 
 
     if(playing) { 
 
      audio.play(); 
 
     } 
 
     } else { 
 
     index = 0; 
 
     loadTrack(index); 
 
     if(playing) { 
 
      audio.play(); 
 
     } 
 
     } 
 
    }), 
 
    loadTrack = function(id) { 
 
     npTitle.text(tracks[id].name); 
 
     index = id; 
 
     audio.src = tracks[id].file; 
 
    }; 
 
    loadTrack(index); 
 
    } 
 

 
}); 
 
});
<script src="https://use.fontawesome.com/3e4e2f11a7.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="content" role="main"> 
 
    <div id="cwrap"> 
 
    <div id="nowPlay" class="is-audio"> 
 
     <div id="npTitle"></div> 
 
    </div> 
 
    <div id="audiowrap"> 
 
     <div id="audio0"> 
 
     <audio id="audio1" controls preload="none"></audio> 
 
     </div> 
 
     <div id="extraControls" class="is-audio"> 
 
     <button id="btnPrev" class="ctrlbtn">|&lt;&lt; Prev Track</button> 
 
     <a href="javascript:void(0)" class="btn btn-default" data-toggle="tooltip" title="Preview" onclick="aud_play_pause()"><i id="stateicon" class="fa fa-play"></i></a> 
 
     <button id="btnNext" class="ctrlbtn">Next Track &gt;&gt;|</button> 
 
     </div> 
 
    </div> 
 
    
 
    </div> 
 
</div>

+0

あなたのコードにフィドルを追加するか、スニペットにコードを置きます。それはあなたが話している振る舞いを再現するのをはるかに容易にします。 caniuse.comを参照して、html5オーディオに関する既知の問題を確認してください。 –

+0

ここに私のコードをコードスニペットとして追加しました。私はそれを実行することさえできます。私はcaniuse.comをチェックしました.Safariではすべてが緑色で、既知の問題はありません。 – Adrian

+0

さて、私は謝ります。私はアンドロイドアプリを見ていて、アプリケーションにはスニペットを追加したり実行したりする機能がないようです。 –

答えて

0

次のようなのonloadイベントでのプレイを実装する自動再生を入れたり、新しいSRC後にすることができます

例:私は自動再生を使用するコードスニペットで

audio.addEventListener('canplaythrough', function() { 

    audio.play(); 

}, false); 

オーディオタグのatrr!

function aud_play_pause() { 
 
    var myAudio = document.getElementById("audio1"); 
 
    if (myAudio.paused) { 
 
     $('#stateicon').removeClass('fa fa-play'); 
 
     $('#stateicon').addClass('fa fa-pause'); 
 
     myAudio.play(); 
 
    } else { 
 
     $('#stateicon').removeClass('fa fa-pause'); 
 
     $('#stateicon').addClass('fa fa-play'); 
 
     myAudio.pause(); 
 
    } 
 
} 
 

 
$(document).ready(function($) { 
 
    jQuery(function($) { 
 
    var supportsAudio = !!document.createElement('audio').canPlayType; 
 
    if(supportsAudio) { 
 
    var index = 0, 
 
    playing = false; 
 
    tracks = [ 
 
     {"track":1,"name":"Music FM","file":"http://stream.musicfm.hu:8000/musicfm.mp3"}, 
 
     {"track":2,"name":"Radio 1","file":"http://213.181.210.106:8000/high.mp3"}, 
 
     {"track":3,"name":"Test FM","file":"http://213.181.210.106:8000/high.mp3"}, 
 
    ], 
 
    trackCount = tracks.length, 
 
    npTitle = $('#npTitle'), 
 
    audio = $('#audio1').bind('play', function() { 
 
     $('#stateicon').removeClass('fa fa-play'); 
 
     $('#stateicon').addClass('fa fa-pause'); 
 
     playing = true; 
 
    }).bind('pause', function() { 
 
     $('#stateicon').removeClass('fa fa-pause'); 
 
     $('#stateicon').addClass('fa fa-play'); 
 
     playing = false; 
 
    }).get(0), 
 
    btnPrev = $('#btnPrev').click(function() { 
 
     if((index - 1) > -1) { 
 
     index--; 
 
     loadTrack(index); 
 
     if(playing) { 
 
      audio.play(); 
 
     } 
 
     } else { 
 
     index = 0 
 
     loadTrack(trackCount-1); 
 
     if(playing) { 
 
      audio.play(); 
 
     } 
 
     } 
 
    }), 
 
    btnNext = $('#btnNext').click(function() { 
 
     if((index + 1) < trackCount) { 
 
     index++; 
 
     loadTrack(index); 
 
     if(playing) { 
 
      audio.play(); 
 
     } 
 
     } else { 
 
     index = 0; 
 
     loadTrack(index); 
 
     if(playing) { 
 
      audio.play(); 
 
     } 
 
     } 
 
    }), 
 
    loadTrack = function(id) { 
 
     npTitle.text(tracks[id].name); 
 
     index = id; 
 
     audio.src = tracks[id].file; 
 
     /* JS method 
 
     audio.addEventListener('canplaythrough', function() { 
 
     audio.play(); 
 
     }, false);*/ 
 

 
    }; 
 
    loadTrack(index); 
 
    } 
 

 
}); 
 
});
<script src="https://use.fontawesome.com/3e4e2f11a7.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="content" role="main"> 
 
    <div id="cwrap"> 
 
    <div id="nowPlay" class="is-audio"> 
 
     <div id="npTitle"></div> 
 
    </div> 
 
    <div id="audiowrap"> 
 
     <div id="audio0"> 
 
     <audio id="audio1" autoplay controls preload="none"></audio> 
 
     </div> 
 
     <div id="extraControls" class="is-audio"> 
 
     <button id="btnPrev" class="ctrlbtn">|&lt;&lt; Prev Track</button> 
 
     <a href="javascript:void(0)" class="btn btn-default" data-toggle="tooltip" title="Preview" onclick="aud_play_pause()"><i id="stateicon" class="fa fa-play"></i></a> 
 
     <button id="btnNext" class="ctrlbtn">Next Track &gt;&gt;|</button> 
 
     </div> 
 
    </div> 
 
    
 
    </div> 
 
</div>

関連する問題