播放m4a网络音频时基于CrossWalk的混合应用程序的奇怪行为

时间:2017-01-13 17:30:19

标签: javascript android cordova crosswalk m4a

我们在使用相当大的音频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'];
    }
  }
}

There is the full example.

当我们使用WebView使用Cordova 6.4.0构建应用程序时,它会在~3.5秒内开始播放。网络活动如下所示:

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

当我们使用带有Crosswalk-webview插件2.2.0的Cordova 6.4.0构建应用程序时,它最多可以在18秒内开始播放,但有时延迟甚至更长 - 最多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

...当只有第一个请求与“正常”服务一起提供时user-agent,所有后续版本都使用stagefright/1.2 (Linux;Android 5.0.1)

为什么区别,我们怎样才能避免这种情况?

P.S。这里有the folder所有的apks和相关数据。

1 个答案:

答案 0 :(得分:1)

如果发现任何与crosswalk插件相关的错误,如果尚未提交,您可以提交 https://crosswalk-project.org/jira/plugins/servlet/mobile#login/ Crosswalk项目网站,通常他们采取imidiate行动并解决它。 如果你解决了,请在这里更新答案。

<强>更新

我找到了你的(也许是你的)问题: https://crosswalk-project.org/jira/plugins/servlet/mobile#issue/XWALK-7484

有相同问题的开发人员会在此链接上跟踪此问题.ATB