«Диплинк» на определенную позицию в MP3 с HTML5 / Flash - PullRequest
5 голосов
/ 04 января 2012

Существуют ли какие-либо примеры кода, где можно сделать что-то похожее по аналогии с тем, что происходит на YouTube, посредством которого можно «диплэйкнуть» определенную позицию в видео, но вместо этого для MP3?

Например, в качестве примера того, как это делается на YouTube, обычная ссылка: http://www.youtube.com/watch?v=W3ZHPJT2Kp4

Можно щелкнуть правой кнопкой мыши значок позиции воспроизведения в определенное время и выбрать «Копировать URL-адрес видео в текущее время», например, выбрать 14 с и получить ссылку, подобную этой: http://www.youtube.com/watch?feature=player_detailpage&v=W3ZHPJT2Kp4#t=14s

Я хотел бы сделать то же самое, вставив ссылку на MP3, который я хотел бы воспроизвести на веб-странице.

Я видел некоторые MP3-плееры HTML5, такие как Jplayer (http://www.jplayer.org),, но я не видел такой функциональности, предлагаемой в нем.

Какие-нибудь подсказки, подсказки, предложения, чтобы начать достигать, как это? Я думаю, что предпочел бы использовать HTML5, но рассмотрел бы Flash.

Обновление (01.11.2012): Я получаю 'TypeError:' null 'не является объектом (оценивает' music.currentTime = att_hash ['a'] ') ", когда я нажимаю на" Click Me! " кнопка.

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<!-- Website Design By: www.happyworm.com -->
<title>Demo : jPlayer as an audio player</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="http://www.jplayer.org/latest/skin/blue.monday/jplayer.blue.monday.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
<script type="text/javascript" src="http://www.jplayer.org/latest/js/jquery.jplayer.min.js"></script>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function(){
$("#jquery_jplayer_1").jPlayer({
ready: function (event) {
$(this).jPlayer("setMedia", {
m4a:"http://www.jplayer.org/audio/m4a/TSP-01-Cro_magnon_man.m4a"
});
},
swfPath: "js",
supplied: "m4a, oga",
wmode: "window"
});
});
//]]>
</script>
</head>
<body>
<div id="jquery_jplayer_1" class="jp-jplayer"></div>
<div id="jp_container_1" class="jp-audio">
<div class="jp-type-single">
<div class="jp-gui jp-interface">
<ul class="jp-controls">
<li><a href="javascript:;" class="jp-play" tabindex="1">play</a></li>
<li><a href="javascript:;" class="jp-pause" tabindex="1">pause</a></li>
<li><a href="javascript:;" class="jp-stop" tabindex="1">stop</a></li>
<li><a href="javascript:;" class="jp-mute" tabindex="1" title="mute">mute</a></li>
<li><a href="javascript:;" class="jp-unmute" tabindex="1" title="unmute">unmute</a></li>
<li><a href="javascript:;" class="jp-volume-max" tabindex="1" title="max volume">max volume</a></li>
</ul>
<div class="jp-progress">
<div class="jp-seek-bar">
<div class="jp-play-bar"></div>
</div>
</div>
<div class="jp-volume-bar">
<div class="jp-volume-bar-value"></div>
</div>
<div class="jp-time-holder">
<div class="jp-current-time"></div>
<div class="jp-duration"></div>
<ul class="jp-toggles">
<li><a href="javascript:;" class="jp-repeat" tabindex="1" title="repeat">repeat</a></li>
<li><a href="javascript:;" class="jp-repeat-off" tabindex="1" title="repeat off">repeat off</a></li>
</ul>
</div>
</div>
<div class="jp-title">
<ul>
<li>A Song</li>
</ul>
</div>
<div class="jp-no-solution">
<span>Update Required</span>
To play the media you will need to either update your browser to a recent version or update your <a href="http://get.adobe.com/flashplayer/" target="_blank">Flash plugin</a>.
</div>
</div>
</div>
<br><br>
<button id="gettime">Click Me!</button>
<input type="text" id="showtime">
<script language="javascript">                    
var music = document.getElementById('music') // Your <audio> object
var gettime = document.getElementById('gettime') // A 'get time' button
var showtime = document.getElementById('showtime') // An input text object for displaying the URL
gettime.addEventListener("click", function(){
showtime.value = window.location.protocol+'//'+window.location.host+window.location.pathname+'?a='+music.currentTime;
}, true);
window.addEventListener('load', function(){
var att_hash = get_url_variables()
if (att_hash) {
music.currentTime = att_hash['a']
}
}, true);
function get_url_variables() {
var att_hash = []
var var_array = window.location.search.split(/[\?&]/)
for (i=0; i<var_array.length; i++) {
if (var_array[i] != "") {
var att_var = var_array[i].split("=",2)
att_hash[att_var[0]]=att_var[1]
}
}
return att_hash;
}
</script>
</body>
</html>

1 Ответ

3 голосов
/ 04 января 2012

Самая большая проблема с выполнением того, что вы хотите с помощью HTML5 / javascript, заключается в том, что он не обеспечивает доступ к буферу обмена. Однако, если вы не против предоставить пользователю URL-адрес для копирования вручную, это довольно легко сделать. Насколько я понимаю, если вы хотите записать в буфер обмена пользователя, вам нужно использовать что-то вроде вспомогательного объекта flash. Однако у меня нет опыта вспышки, поэтому я не могу помочь вам здесь.

Аудиообъект предоставляет значение float currentTime, которое можно легко установить или получить. В то же время вы можете получить URL-адрес и связанные с ним переменные с различными переменными window.location . Здесь я написал функцию get_url_variables для передачи их в хеш. Если вы используете библиотеку, такую ​​как jquery, я сильно подозреваю, что она предоставляет нечто похожее и, вероятно, гораздо более стабильную, чем мой быстрый пример.

Редактировать: Ой, я пропустил ваш запрос меню правой кнопки мыши. Я никогда не был большим фанатом этого, но здесь обсуждается добавление ответов правой кнопкой мыши здесь .

var music = document.getElementById('music') // Your <audio> object
var gettime = document.getElementById('gettime') // A 'get time' button
var showtime = document.getElementById('showtime') // An input text object for displaying the URL

gettime.addEventListener("click", function(){
        showtime.value = window.location.protocol+'//'+window.location.host+window.location.pathname+'?a='+music.currentTime;
    }, true);

window.addEventListener('load', function(){
        var att_hash = get_url_variables()
        if (att_hash) {
            music.currentTime = att_hash['a']
        }
    }, true);

function get_url_variables() {
    var att_hash = []
    var var_array = window.location.search.split(/[\?&]/)
    for (i=0; i<var_array.length; i++) {
        if (var_array[i] != "") {
            var att_var = var_array[i].split("=",2)
            att_hash[att_var[0]]=att_var[1]
        }
    }
    return att_hash;
}
...