【发布时间】:2019-02-09 13:37:13
【问题描述】:
我正在使用 Ionic 3 框架开发一个互联网广播应用程序。我想出了这个使用 HTML5 音频元素的简单代码。许多人认为这种方法比使用 @ionic-native/streaming-media 插件更好。
以下是我的实现:
HTML
<audio id="audioStream" src="http://icecastserverIP:8000/icecastchannel" autoplay></audio>
<a href="#" id="player">
<div class="btn-play" id="con-btn-play">
<img src="assets/img/btn-play.png" alt="Play">
</div>
</a>
JS
$(document).ready(function(){
var audio = $('#audioStream')[0]
// Preloader animation
audio.addEventListener('waiting', function () {
$('#con-btn-play').html('<img src="assets/img/preloader.gif">');
}, false);
audio.addEventListener('playing', function () {
$('#con-btn-play').html('<img src="assets/img/btn-pause.png">');
}, false);
// Play button behaviour
$('#player').click(function(){
if (audio.paused){
audio.play();
$('#con-btn-play').html('<img src="assets/img/btn-pause.png" alt="Pause">');
}else {
audio.pause();
$('#con-btn-play').html('<img src="assets/imgs/btn-play.png" alt="Play">');
}
});
});
该流在 Android 和 iOS 中可以正常播放。但是,只要有轻微的连接中断,音频就会停止并且不会重新连接。更不用说如果我按下暂停,流将继续在后台使用数据。
我的问题是:有没有更好的方法来处理 Icecast 流?您会推荐一个第三方插件以获得更好的缓冲管理和播放体验吗?
【问题讨论】:
-
如果您有兴趣,我有基于 MediaSource Extensions 的代码,您可以为商业项目授权。请随时通过 brad@audiopump.co 与我联系。否则,请参阅下面的答案,以开始自己实施类似的事情。
标签: javascript html ionic-framework audio-streaming icecast