Аудио событие HTML5 «прогресс» не запускается - PullRequest
6 голосов
/ 18 августа 2011

Я создаю потоковое веб-приложение html5. Этот вопрос относится к аудио части проекта, но я уверен, что столкнусь с подобной ситуацией, когда начну работу с видео частью. Мое целевое устройство - браузер для сафари на iPad (поэтому я должен сделать это html5). Воспроизведение работает нормально, но у меня есть полоса загрузки, которая должна отражать, сколько трека было загружено. Следуя спецификации w3, я попытался реализовать это следующим образом, используя jQuery:

var that = this;
that.player = $('audio')[0];

$('that.player').bind('progress',function(){
    var buffer = that.player.buffered.end(0)      
    that.updateLoadBuffer(buffer);
});

Это не сработало. «that.player.buffered» возвращает объект TimeRanges, а у TimeRanges есть метод «end (index)», который возвращает позицию воспроизведения конца буфера в секундах для TimeRange, указанного в «index». TimeRanges также имеют свойство .length, которое сообщает вам, сколько TimeRanges инкапсулировано объектом. Когда я попытался зарегистрировать это свойство, я обнаружил, что TimeRanges.length = 0, что означает, что TimeRanges не передаются обратно. Также, когда я бросил операторы регистрации в связанную функцию, я обнаружил, что событие «progress» никогда не запускалось. У меня есть отдельные функции для событий «loadedmetata »и« timeupdate », которые следуют аналогичному формату, и они запускаются, как и ожидалось. Я попробовал другие методы для захвата событий безрезультатно:

that.player.onprogress = function(e){
     console.log('progressEvent heard');
};

that.player.addEventListener('progress',progressHandler, false)
function progressHandler(e){
    console.log('progressEvent heard');
};

Ни один из них не вызвал мое консольное сообщение. Моя аудио-декларация выглядит следующим образом:

<audio style="width:0;height:0;"></audio>

что я тут не так делаю?

ОБНОВЛЕНИЕ: я использую wowzamediaserver для обработки потокового http. Я не знаю, может ли это иметь какое-либо отношение к этому.

ДАЙТЕ ДРУГОЕ ОБНОВЛЕНИЕ: я понимаю, что у меня нет источника в моем аудио-тэге, потому что я установил его динамически, используя jquery, следующим образом:

$('audio').attr('src','http://my.wowza.server:1935/myStreamingApp/_definst_/mp3:path/to/my/track/audio.mp3/playlist.m3u8');

опять же, у меня нет проблем с воспроизведением, так что это не должно иметь никакого отношения к моей проблеме, но я просто хочу дать вам, ребята, как можно более четкое изображение.

Ответы [ 3 ]

7 голосов
/ 18 августа 2011

Я не уверен, как выглядит текущий ландшафт реализации для события progress, но когда я работал над аудиоплеером HTML5 несколько месяцев назад, я помню, что просто не мог его запустить в Safari Хром. Я закончил тем, что использовал таймер вместо этого. Вероятно, вы ничего не могли понять, но вот упрощенная версия:

Сценарий:

$(document).ready(function(){
    audio = $('body').find("audio").get(0);
});

function play() {
    audio.play();
    int = window.setInterval(updateProgress, 30);
}

function pause() {
    audio.pause();
    window.clearInterval(int);
}

function updateProgress() {
    progress_seconds = Math.ceil(audio.currentTime);
    progress_percent = Math.ceil(audio.currentTime / audio.duration * 100);
    $('#progress_seconds').html('Seconds: ' + progress_seconds);
    $('#progress_percent').html('Percent: ' + progress_percent);
};

HTML:

<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript" src="so.js"></script>
    <title></title>
</head>
<body>

<audio>
    <source src="audio.mp3" type="audio/mp3">
</audio>

<a id="play" href="#" onclick="play();">Play</a>
<a id="pause" href="#" onclick="pause();">Pause</a>

<span id="progress_seconds">_</span>
<span id="progress_percent">_</span>

</body>
</html>
1 голос
/ 18 августа 2011

Спецификация HTML5 все еще находится в стадии разработки, поэтому браузеры, поддерживающие ее, по существу соответствуют спецификации, которая еще не завершена.Поэтому я не ожидаю, что их функции HTML5 будут полностью функциональными ...

0 голосов
/ 23 декабря 2014

События прогресса не будут работать во многих случаях использования с iOS 8.1. Согласно документации Apple:

Примечание. На iPad Safari не начинает загрузку, пока пользователь не щелкнет по плакату или заполнителю. В настоящее время загрузки, начатые таким образом, не генерируют события прогресса.

Я могу подтвердить, что воспроизведение, инициированное JavaScript, не будет запускать события прогресса. Я не проверял с использованием HTML5 аудио родных элементов управления <audio controls></audio.

Ref: https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/ControllingMediaWithJavaScript/ControllingMediaWithJavaScript.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...