Comportamiento extraño de la aplicación híbrida basada en CrossWalk al reproducir audio web de m4a

Tenemos problemas con una aplicación híbrida de lector de audio, usando archivos de audio m4a bastante grandes. En resumen, tarda demasiado tiempo en iniciar la reproducción (cuando se utilizan recursos de audio en línea).

Para ilustrar el problema, hemos creado un prototipo más pequeño con la siguiente estructura:

Cuerpo:

<audio src="..." controls="controls" preload="none"></audio> <button class="change-current-time">Play and change currentTime</button> 

Guión:

 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']; } } } 

Hay el ejemplo completo.

Cuando construimos la aplicación con Cordova 6.4.0 usando WebView, comienza la reproducción en ~ 3.5s. La actividad de red se ve así:

 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 

Cuando construimos la aplicación con Cordova 6.4.0 con Crosswalk-webview plugin 2.2.0, se inicia la reproducción en 18s en el mejor de los casos, pero a veces el retraso es aún más sustancial – hasta 45s. Parece que la principal razón es la diferencia en la actividad de la red:

 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 

… cuando solo se sirve la primera solicitud con el user-agent 'normal', todas las subsiguientes son servidas con stagefright/1.2 (Linux;Android 5.0.1) .

¿Por qué la diferencia, y cómo podemos evitar esto?

PS Aquí está la carpeta con todos los apks y datos relacionados.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.