У нас возникли проблемы с гибридным приложением для чтения аудио, используя довольно большие аудиофайлы m4a. Короче говоря, для начала воспроизведения требуется слишком много времени (при использовании онлайновых аудиоресурсов).Странное поведение гибридного приложения на основе CrossWalk при воспроизведении веб-аудио m4a
Чтобы проиллюстрировать эту проблему, мы создали меньший прототип со следующей структурой:
тела:
<audio src="..." controls="controls" preload="none"></audio>
<button class="change-current-time">Play and change currentTime</button>
Сценарий:
var audioTags = document.querySelectorAll('audio');
[].forEach.call(audioTags, function (item) {
item.addEventListener('play', onPlayStateChange);
item.addEventListener('timeupdate', onPlayStateChange);
item.addEventListener('error', onPlayStateChange);
item.addEventListener('pause', onPauseReset);
});
function onPlayStateChange(e) {
var id = e.target.parentNode.id;
if (count[id]) {
return;
}
if (e.type === 'play') {
count[id + 'start'] = +new Date();
} else if (e.target.parentNode.querySelector('audio').currentTime > currentTimeOffset) {
var span = e.target.parentNode.querySelector('span');
count[id] = 1;
if (span) {
span.innerText = e.type === 'error' ? 'Audio type or codec does not supported' : new Date() - count[id + 'start'];
}
}
}
Когда мы создайте приложение с помощью Cordova 6.4.0 с помощью WebView, оно запустит playb ack в ~ 3.5s. Сетевая активность выглядит следующим образом:
GET /tmp/1916firstchapterscollection_09_various_64kb.m4a?app=webview HTTP/1.1 206 29522945
GET /tmp/1916firstchapterscollection_09_various_64kb.m4a?app=webview HTTP/1.1 206 326657
GET /tmp/1916firstchapterscollection_09_various_64kb.m4a?app=webview HTTP/1.1 206 29163520
Когда мы строим приложение с Кордова 6.4.0 с Пешеходной-Webview плагиным 2.2.0, он начинает воспроизведение в 18s в лучшем случае, но иногда задержка еще более существенным - до 45 с. Кажется, что основная причина является разница в активности сети:
GET /tmp/1916firstchapterscollection_09_various_64kb.m4a?app=crosswalk HTTP/1.1 206 2
GET /tmp/1916firstchapterscollection_09_various_64kb.m4a?app=crosswalk HTTP/1.1 200 29522945
GET /tmp/1916firstchapterscollection_09_various_64kb.m4a?app=crosswalk HTTP/1.1 206 577690
GET /tmp/1916firstchapterscollection_09_various_64kb.m4a?app=crosswalk HTTP/1.1 200 29522945
GET /tmp/1916firstchapterscollection_09_various_64kb.m4a?app=crosswalk HTTP/1.1 206 577690
GET /tmp/1916firstchapterscollection_09_various_64kb.m4a?app=crosswalk HTTP/1.1 200 29522945
GET /tmp/1916firstchapterscollection_09_various_64kb.m4a?app=crosswalk HTTP/1.1 206 577690
GET /tmp/1916firstchapterscollection_09_various_64kb.m4a?app=crosswalk HTTP/1.1 200 29522945
GET /tmp/1916firstchapterscollection_09_various_64kb.m4a?app=crosswalk HTTP/1.1 206 577690
GET /tmp/1916firstchapterscollection_09_various_64kb.m4a?app=crosswalk HTTP/1.1 206 7384995
... когда только первый запрос подаются с «нормальным» агентом пользователя, все последующие подаются с stagefright/1.2 (Linux;Android 5.0.1)
.
Почему разница, и как мы можем избежать этого?
P.S. Вот the folder со всеми apks и сопутствующими данными.
Создание что-то Лика в [Github] (https://github.com/) для вашего прототипа, было бы намного легче воспроизвести вашу проблему. – Phonolog
@Alex Я думаю, вы уже подняли проблему в проекте crosswalk, и это было связано с проблемой P2. Поэтому нам, возможно, придется подождать исправления в команде пешеходного перехода. Выложили его в интересах других – Gandhi
вы не одиноки .... [аналогичный вопрос на xda] (https://forum.xda-developers.com/android/help/stagefright-makes-multiple-http-t3390372) и даже на [github] (https://github.com/WhisperSystems/Signal-Android/issues/4636) – ymz