diff --git a/docs/compiled/artplayer-plugin-audio-track.js b/docs/compiled/artplayer-plugin-audio-track.js index 73bcbdb50..a11e2781b 100644 --- a/docs/compiled/artplayer-plugin-audio-track.js +++ b/docs/compiled/artplayer-plugin-audio-track.js @@ -4,4 +4,4 @@ * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,o){"object"===typeof exports&&"undefined"!==typeof module?module.exports=o():"function"==typeof define&&define.amd?(t.artplayerPluginAudioTrack=o(),define(function(){return t.artplayerPluginAudioTrack})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerPluginAudioTrack=o()}(this,function(){"use strict";return function(e){return o=>{let{url:n,offset:a=0,sync:t=.3}=e;const u=new Audio;function i(){if(!o.video||!n)return;const e=o.currentTime+a;Math.abs(u.currentTime-e)>t&&(u.currentTime=e)}return u.preload="auto",n&&(u.src=n),o.on("play",()=>{n&&(i(),u.play().catch(e=>{console.warn(e)}))}),o.on("pause",()=>{u.pause()}),o.on("seek",()=>{i()}),o.on("video:timeupdate",()=>{o.playing&&i()}),o.on("video:ratechange",()=>{u.playbackRate=o.video.playbackRate}),o.on("video:volumechange",()=>{u.volume=o.volume,u.muted=o.muted}),o.on("video:waiting",()=>{u.pause()}),o.on("video:playing",()=>{n&&o.playing&&u.play().catch(e=>{console.warn(e)})}),o.on("destroy",()=>{u.pause(),u.src="",u.load()}),u.volume=o.volume,u.muted=o.muted,u.playbackRate=o.video?.playbackRate||1,{name:"artplayerPluginAudioTrack",audio:u,update:function(e){e.url&&e.url!==n&&(n=e.url,u.src=n,o.playing&&u.play().catch(e=>console.warn(e))),void 0!==e.offset&&(a=e.offset),void 0!==e.sync&&(t=e.sync)}}}}}); +!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(e.artplayerPluginAudioTrack=t(),define(function(){return e.artplayerPluginAudioTrack})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerPluginAudioTrack=t()}(this,function(){"use strict";return function(e){return t=>{const o=function(e){let{url:t,offset:o=0,sync:n=.3}=e;const a=new Audio;let i=!1;function u(){!i&&t&&a.play().catch(e=>{i||console.warn(e)})}function c(){if(i)return;i=!0;const e=[];for(const o of[()=>a.pause(),()=>a.removeAttribute("src"),()=>a.load()])try{o()}catch(t){e.push(t)}if(e.length)throw e[0]}try{a.preload="auto",t&&(a.src=t)}catch(r){try{c()}catch{}throw r}return{audio:a,play:u,pause:function(){i||a.pause()},destroy:c,sync(e){if(i||!t)return;const u=e+o;Math.abs(a.currentTime-u)>n&&(a.currentTime=u)},update(e,c){i||(e.url&&e.url!==t&&(t=e.url,a.src=t,c&&u()),void 0!==e.offset&&(o=e.offset),void 0!==e.sync&&(n=e.sync))}}}(e),{audio:n}=o,a=[];let i=!0;function u(){t.video&&o.sync(t.currentTime)}function c(e,o){const n=()=>{i&&o()};a.push([e,n]),t.on(e,n)}function r(){if(!i)return;i=!1;const e=[];for(const[o,i]of a.splice(0))try{t.off(o,i)}catch(n){e.push(n)}try{o.destroy()}catch(n){e.push(n)}if(e.length)throw e[0]}try{c("play",()=>{u(),o.play()});for(const e of["pause","video:pause","video:ended","video:waiting","video:emptied","video:seeking"])c(e,o.pause);c("seek",u),c("video:seeked",()=>{u(),t.playing&&o.play()}),c("video:timeupdate",()=>{t.playing&&u()}),c("video:ratechange",()=>{n.playbackRate=t.video.playbackRate}),c("video:volumechange",()=>{n.volume=t.volume,n.muted=t.muted}),c("video:playing",()=>{t.playing&&(u(),o.play())}),c("destroy",r),n.volume=t.volume,n.muted=t.muted,n.playbackRate=t.video?.playbackRate||1}catch(d){try{r()}catch{}throw d}return{name:"artplayerPluginAudioTrack",audio:n,update(e){i&&o.update(e,t.playing)}}}}}); diff --git a/docs/compiled/artplayer-plugin-audio-track.legacy.js b/docs/compiled/artplayer-plugin-audio-track.legacy.js index 671c9653a..9872bf07a 100644 --- a/docs/compiled/artplayer-plugin-audio-track.legacy.js +++ b/docs/compiled/artplayer-plugin-audio-track.legacy.js @@ -4,4 +4,4 @@ * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,o){"object"===typeof exports&&"undefined"!==typeof module?module.exports=o():"function"==typeof define&&define.amd?(t.artplayerPluginAudioTrack=o(),define(function(){return t.artplayerPluginAudioTrack})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerPluginAudioTrack=o()}(this,function(){"use strict";return function(e){return o=>{var n;let{url:a,offset:t=0,sync:u=.3}=e;const i=new Audio;function l(){if(!o.video||!a)return;const e=o.currentTime+t;Math.abs(i.currentTime-e)>u&&(i.currentTime=e)}return i.preload="auto",a&&(i.src=a),o.on("play",()=>{a&&(l(),i.play().catch(e=>{console.warn(e)}))}),o.on("pause",()=>{i.pause()}),o.on("seek",()=>{l()}),o.on("video:timeupdate",()=>{o.playing&&l()}),o.on("video:ratechange",()=>{i.playbackRate=o.video.playbackRate}),o.on("video:volumechange",()=>{i.volume=o.volume,i.muted=o.muted}),o.on("video:waiting",()=>{i.pause()}),o.on("video:playing",()=>{a&&o.playing&&i.play().catch(e=>{console.warn(e)})}),o.on("destroy",()=>{i.pause(),i.src="",i.load()}),i.volume=o.volume,i.muted=o.muted,i.playbackRate=(null==(n=o.video)?void 0:n.playbackRate)||1,{name:"artplayerPluginAudioTrack",audio:i,update:function(e){e.url&&e.url!==a&&(a=e.url,i.src=a,o.playing&&i.play().catch(e=>console.warn(e))),void 0!==e.offset&&(t=e.offset),void 0!==e.sync&&(u=e.sync)}}}}}); +!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(e.artplayerPluginAudioTrack=t(),define(function(){return e.artplayerPluginAudioTrack})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerPluginAudioTrack=t()}(this,function(){"use strict";return function(e){return t=>{var o;const n=function(e){let{url:t,offset:o=0,sync:n=.3}=e;const a=new Audio;let i=!1;function u(){!i&&t&&a.play().catch(e=>{i||console.warn(e)})}function c(){if(i)return;i=!0;const e=[];for(const o of[()=>a.pause(),()=>a.removeAttribute("src"),()=>a.load()])try{o()}catch(t){e.push(t)}if(e.length)throw e[0]}try{a.preload="auto",t&&(a.src=t)}catch(r){try{c()}catch(d){}throw r}return{audio:a,play:u,pause:function(){i||a.pause()},destroy:c,sync(e){if(i||!t)return;const u=e+o;Math.abs(a.currentTime-u)>n&&(a.currentTime=u)},update(e,c){i||(e.url&&e.url!==t&&(t=e.url,a.src=t,c&&u()),void 0!==e.offset&&(o=e.offset),void 0!==e.sync&&(n=e.sync))}}}(e),{audio:a}=n,i=[];let u=!0;function c(){t.video&&n.sync(t.currentTime)}function r(e,o){const n=()=>{u&&o()};i.push([e,n]),t.on(e,n)}function d(){if(!u)return;u=!1;const e=[];for(const[n,a]of i.splice(0))try{t.off(n,a)}catch(o){e.push(o)}try{n.destroy()}catch(o){e.push(o)}if(e.length)throw e[0]}try{r("play",()=>{c(),n.play()});for(const e of["pause","video:pause","video:ended","video:waiting","video:emptied","video:seeking"])r(e,n.pause);r("seek",c),r("video:seeked",()=>{c(),t.playing&&n.play()}),r("video:timeupdate",()=>{t.playing&&c()}),r("video:ratechange",()=>{a.playbackRate=t.video.playbackRate}),r("video:volumechange",()=>{a.volume=t.volume,a.muted=t.muted}),r("video:playing",()=>{t.playing&&(c(),n.play())}),r("destroy",d),a.volume=t.volume,a.muted=t.muted,a.playbackRate=(null==(o=t.video)?void 0:o.playbackRate)||1}catch(s){try{d()}catch(l){}throw s}return{name:"artplayerPluginAudioTrack",audio:a,update(e){u&&n.update(e,t.playing)}}}}}); diff --git a/docs/compiled/artplayer-plugin-audio-track.mjs b/docs/compiled/artplayer-plugin-audio-track.mjs index 32277977d..55583c8bd 100644 --- a/docs/compiled/artplayer-plugin-audio-track.mjs +++ b/docs/compiled/artplayer-plugin-audio-track.mjs @@ -4,86 +4,162 @@ * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -function artplayerPluginAudioTrack(option) { - return (art) => { - let { url, offset = 0, sync = 0.3 } = option; - const audio = new Audio(); +function createAudioTrack(option) { + let { url, offset = 0, sync = 0.3 } = option; + const audio = new Audio(); + let closed = false; + function play() { + if (closed || !url) + return; + audio.play().catch((error) => { + if (!closed) + console.warn(error); + }); + } + function pause() { + if (!closed) + audio.pause(); + } + function destroy() { + if (closed) + return; + closed = true; + const failures = []; + for (const release of [() => audio.pause(), () => audio.removeAttribute("src"), () => audio.load()]) { + try { + release(); + } catch (error) { + failures.push(error); + } + } + if (failures.length) + throw failures[0]; + } + try { audio.preload = "auto"; - if (url) { + if (url) audio.src = url; + } catch (error) { + try { + destroy(); + } catch { } - function syncAudio() { - if (!art.video || !url) + throw error; + } + return { + audio, + play, + pause, + destroy, + sync(time) { + if (closed || !url) return; - const videoTime = art.currentTime; - const targetTime = videoTime + offset; - if (Math.abs(audio.currentTime - targetTime) > sync) { - audio.currentTime = targetTime; - } - } - art.on("play", () => { - if (!url) + const target = time + offset; + if (Math.abs(audio.currentTime - target) > sync) + audio.currentTime = target; + }, + update(newOption, playing) { + if (closed) return; - syncAudio(); - audio.play().catch((err) => { - console.warn(err); - }); - }); - art.on("pause", () => { - audio.pause(); - }); - art.on("seek", () => { - syncAudio(); - }); - art.on("video:timeupdate", () => { - if (art.playing) { - syncAudio(); - } - }); - art.on("video:ratechange", () => { - audio.playbackRate = art.video.playbackRate; - }); - art.on("video:volumechange", () => { - audio.volume = art.volume; - audio.muted = art.muted; - }); - art.on("video:waiting", () => { - audio.pause(); - }); - art.on("video:playing", () => { - if (url && art.playing) { - audio.play().catch((err) => { - console.warn(err); - }); - } - }); - art.on("destroy", () => { - audio.pause(); - audio.src = ""; - audio.load(); - }); - function update(newOption) { if (newOption.url && newOption.url !== url) { url = newOption.url; audio.src = url; - if (art.playing) { - audio.play().catch((err) => console.warn(err)); + if (playing) + play(); + } + if (newOption.offset !== void 0) + offset = newOption.offset; + if (newOption.sync !== void 0) + sync = newOption.sync; + } + }; +} +function artplayerPluginAudioTrack(option) { + return (art) => { + const track = createAudioTrack(option); + const { audio } = track; + const subscriptions = []; + let active = true; + function syncAudio() { + if (art.video) + track.sync(art.currentTime); + } + function listen(event, callback) { + const listener = () => { + if (active) + callback(); + }; + subscriptions.push([event, listener]); + art.on(event, listener); + } + function destroy() { + if (!active) + return; + active = false; + const failures = []; + for (const [event, listener] of subscriptions.splice(0)) { + try { + art.off(event, listener); + } catch (error) { + failures.push(error); } } - if (newOption.offset !== void 0) { - offset = newOption.offset; - } - if (newOption.sync !== void 0) { - sync = newOption.sync; + try { + track.destroy(); + } catch (error) { + failures.push(error); } + if (failures.length) + throw failures[0]; + } + try { + listen("play", () => { + syncAudio(); + track.play(); + }); + for (const event of ["pause", "video:pause", "video:ended", "video:waiting", "video:emptied", "video:seeking"]) + listen(event, track.pause); + listen("seek", syncAudio); + listen("video:seeked", () => { + syncAudio(); + if (art.playing) + track.play(); + }); + listen("video:timeupdate", () => { + if (art.playing) + syncAudio(); + }); + listen("video:ratechange", () => { + audio.playbackRate = art.video.playbackRate; + }); + listen("video:volumechange", () => { + audio.volume = art.volume; + audio.muted = art.muted; + }); + listen("video:playing", () => { + if (art.playing) { + syncAudio(); + track.play(); + } + }); + listen("destroy", destroy); + audio.volume = art.volume; + audio.muted = art.muted; + audio.playbackRate = art.video?.playbackRate || 1; + } catch (error) { + try { + destroy(); + } catch { + } + throw error; } - audio.volume = art.volume; - audio.muted = art.muted; - audio.playbackRate = art.video?.playbackRate || 1; return { name: "artplayerPluginAudioTrack", audio, - update + update(newOption) { + if (active) + track.update(newOption, art.playing); + } }; }; } diff --git a/packages/artplayer-plugin-audio-track/ARCHITECTURE.md b/packages/artplayer-plugin-audio-track/ARCHITECTURE.md new file mode 100644 index 000000000..4b79eef61 --- /dev/null +++ b/packages/artplayer-plugin-audio-track/ARCHITECTURE.md @@ -0,0 +1,58 @@ +# Audio Track maintenance + +The default factory in src/index.js keeps the public `(option) => (art) => result` +contract. The result exposes the same HTMLAudioElement for its entire lifetime, a +literal name, and synchronous update. Public declarations remain authored in types/ +until the separate type migration; do not infer new public methods from internal helpers. + +## Responsibilities + +- src/index.js owns ArtPlayer subscriptions, reads host media/volume/rate, adapts public + update, and rolls back partial installation. It uses only on/off and existing media + properties, so it does not require new core lifecycle utilities. +- src/track.js creates the Audio element and owns URL/offset/threshold and closed state. + It handles synchronization, play rejection and source updates. It does not import ArtPlayer, + inspect DOM registries or install listeners. Dependencies flow from the entry to the track. + +There are no custom timers, UI nodes, styles, workers or playback SDKs. Browser media +loading belongs to the exposed Audio element. Changing its URL preserves element identity. +The plugin does not mute the main video; consumers still choose their own mixing behavior. + +## Events and lifetime + +Public play synchronizes before audio playback. Native pause/ended/waiting/emptied/seeking +pause audio; seeked synchronizes and resumes only if the video is playing. Native playing +synchronizes again before resume. Ordinary playing timeupdate retains the strict drift +threshold and offset rule. Rate and volume/mute follow the existing core properties. + +Destroy marks the entry inactive before removing listeners. The track then closes before +pausing, removing the src attribute and loading the empty element. Cleanup attempts all +steps even when a consumer-overridden method throws, then propagates the first cleanup error. +Installation failures preserve the original error after attempting rollback. Saved callbacks +and update are inert after close, including when a host off method fails. Rejections from +an already closed track are consumed; active play failures still warn with the original error. +No promise is added to the public update return value. + +URL truthiness/same-URL handling, defaults, deferred offset/sync update and exposed audio are +preserved. Negative offset start and duration boundaries are not redesigned in this lifecycle +change; their remaining media validation is tracked in refactor/audio-validation.md. + +## Change and verify + +Edit track.js for URL/sync/media ownership and index.js for host event handling. Keep +published-only defect observations in the tests when adding candidate regressions. + +```sh +node --test test/audio-track.test.js +yarn build artplayer-plugin-audio-track +yarn test:browser test/browser/audio-track.spec.js --trace on +yarn ci:check +``` + +ARTPLAYER_TEST_AUDIO accepts platform-delimited built filenames for all three Node artifact +formats. ARTPLAYER_AUDIO_ARTIFACT selects one main/legacy browser build; otherwise tests compile +source. These are explicit local artifacts, not isolated installed npm packages. +The browser suite includes frozen old core/plugin combinations, real AAC/decoded video, +source failure recovery, and old/native pause/end plus corrected candidate cleanup. +See refactor/audio-validation.md for failed baseline probes, Windows WebKit WAV/size limits, +physical-device gaps and the separate 04/05/06 type/combination/distribution gates. diff --git a/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.js b/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.js index 73bcbdb50..a11e2781b 100644 --- a/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.js +++ b/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.js @@ -4,4 +4,4 @@ * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,o){"object"===typeof exports&&"undefined"!==typeof module?module.exports=o():"function"==typeof define&&define.amd?(t.artplayerPluginAudioTrack=o(),define(function(){return t.artplayerPluginAudioTrack})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerPluginAudioTrack=o()}(this,function(){"use strict";return function(e){return o=>{let{url:n,offset:a=0,sync:t=.3}=e;const u=new Audio;function i(){if(!o.video||!n)return;const e=o.currentTime+a;Math.abs(u.currentTime-e)>t&&(u.currentTime=e)}return u.preload="auto",n&&(u.src=n),o.on("play",()=>{n&&(i(),u.play().catch(e=>{console.warn(e)}))}),o.on("pause",()=>{u.pause()}),o.on("seek",()=>{i()}),o.on("video:timeupdate",()=>{o.playing&&i()}),o.on("video:ratechange",()=>{u.playbackRate=o.video.playbackRate}),o.on("video:volumechange",()=>{u.volume=o.volume,u.muted=o.muted}),o.on("video:waiting",()=>{u.pause()}),o.on("video:playing",()=>{n&&o.playing&&u.play().catch(e=>{console.warn(e)})}),o.on("destroy",()=>{u.pause(),u.src="",u.load()}),u.volume=o.volume,u.muted=o.muted,u.playbackRate=o.video?.playbackRate||1,{name:"artplayerPluginAudioTrack",audio:u,update:function(e){e.url&&e.url!==n&&(n=e.url,u.src=n,o.playing&&u.play().catch(e=>console.warn(e))),void 0!==e.offset&&(a=e.offset),void 0!==e.sync&&(t=e.sync)}}}}}); +!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(e.artplayerPluginAudioTrack=t(),define(function(){return e.artplayerPluginAudioTrack})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerPluginAudioTrack=t()}(this,function(){"use strict";return function(e){return t=>{const o=function(e){let{url:t,offset:o=0,sync:n=.3}=e;const a=new Audio;let i=!1;function u(){!i&&t&&a.play().catch(e=>{i||console.warn(e)})}function c(){if(i)return;i=!0;const e=[];for(const o of[()=>a.pause(),()=>a.removeAttribute("src"),()=>a.load()])try{o()}catch(t){e.push(t)}if(e.length)throw e[0]}try{a.preload="auto",t&&(a.src=t)}catch(r){try{c()}catch{}throw r}return{audio:a,play:u,pause:function(){i||a.pause()},destroy:c,sync(e){if(i||!t)return;const u=e+o;Math.abs(a.currentTime-u)>n&&(a.currentTime=u)},update(e,c){i||(e.url&&e.url!==t&&(t=e.url,a.src=t,c&&u()),void 0!==e.offset&&(o=e.offset),void 0!==e.sync&&(n=e.sync))}}}(e),{audio:n}=o,a=[];let i=!0;function u(){t.video&&o.sync(t.currentTime)}function c(e,o){const n=()=>{i&&o()};a.push([e,n]),t.on(e,n)}function r(){if(!i)return;i=!1;const e=[];for(const[o,i]of a.splice(0))try{t.off(o,i)}catch(n){e.push(n)}try{o.destroy()}catch(n){e.push(n)}if(e.length)throw e[0]}try{c("play",()=>{u(),o.play()});for(const e of["pause","video:pause","video:ended","video:waiting","video:emptied","video:seeking"])c(e,o.pause);c("seek",u),c("video:seeked",()=>{u(),t.playing&&o.play()}),c("video:timeupdate",()=>{t.playing&&u()}),c("video:ratechange",()=>{n.playbackRate=t.video.playbackRate}),c("video:volumechange",()=>{n.volume=t.volume,n.muted=t.muted}),c("video:playing",()=>{t.playing&&(u(),o.play())}),c("destroy",r),n.volume=t.volume,n.muted=t.muted,n.playbackRate=t.video?.playbackRate||1}catch(d){try{r()}catch{}throw d}return{name:"artplayerPluginAudioTrack",audio:n,update(e){i&&o.update(e,t.playing)}}}}}); diff --git a/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.legacy.js b/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.legacy.js index 671c9653a..9872bf07a 100644 --- a/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.legacy.js +++ b/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.legacy.js @@ -4,4 +4,4 @@ * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,o){"object"===typeof exports&&"undefined"!==typeof module?module.exports=o():"function"==typeof define&&define.amd?(t.artplayerPluginAudioTrack=o(),define(function(){return t.artplayerPluginAudioTrack})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerPluginAudioTrack=o()}(this,function(){"use strict";return function(e){return o=>{var n;let{url:a,offset:t=0,sync:u=.3}=e;const i=new Audio;function l(){if(!o.video||!a)return;const e=o.currentTime+t;Math.abs(i.currentTime-e)>u&&(i.currentTime=e)}return i.preload="auto",a&&(i.src=a),o.on("play",()=>{a&&(l(),i.play().catch(e=>{console.warn(e)}))}),o.on("pause",()=>{i.pause()}),o.on("seek",()=>{l()}),o.on("video:timeupdate",()=>{o.playing&&l()}),o.on("video:ratechange",()=>{i.playbackRate=o.video.playbackRate}),o.on("video:volumechange",()=>{i.volume=o.volume,i.muted=o.muted}),o.on("video:waiting",()=>{i.pause()}),o.on("video:playing",()=>{a&&o.playing&&i.play().catch(e=>{console.warn(e)})}),o.on("destroy",()=>{i.pause(),i.src="",i.load()}),i.volume=o.volume,i.muted=o.muted,i.playbackRate=(null==(n=o.video)?void 0:n.playbackRate)||1,{name:"artplayerPluginAudioTrack",audio:i,update:function(e){e.url&&e.url!==a&&(a=e.url,i.src=a,o.playing&&i.play().catch(e=>console.warn(e))),void 0!==e.offset&&(t=e.offset),void 0!==e.sync&&(u=e.sync)}}}}}); +!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(e.artplayerPluginAudioTrack=t(),define(function(){return e.artplayerPluginAudioTrack})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerPluginAudioTrack=t()}(this,function(){"use strict";return function(e){return t=>{var o;const n=function(e){let{url:t,offset:o=0,sync:n=.3}=e;const a=new Audio;let i=!1;function u(){!i&&t&&a.play().catch(e=>{i||console.warn(e)})}function c(){if(i)return;i=!0;const e=[];for(const o of[()=>a.pause(),()=>a.removeAttribute("src"),()=>a.load()])try{o()}catch(t){e.push(t)}if(e.length)throw e[0]}try{a.preload="auto",t&&(a.src=t)}catch(r){try{c()}catch(d){}throw r}return{audio:a,play:u,pause:function(){i||a.pause()},destroy:c,sync(e){if(i||!t)return;const u=e+o;Math.abs(a.currentTime-u)>n&&(a.currentTime=u)},update(e,c){i||(e.url&&e.url!==t&&(t=e.url,a.src=t,c&&u()),void 0!==e.offset&&(o=e.offset),void 0!==e.sync&&(n=e.sync))}}}(e),{audio:a}=n,i=[];let u=!0;function c(){t.video&&n.sync(t.currentTime)}function r(e,o){const n=()=>{u&&o()};i.push([e,n]),t.on(e,n)}function d(){if(!u)return;u=!1;const e=[];for(const[n,a]of i.splice(0))try{t.off(n,a)}catch(o){e.push(o)}try{n.destroy()}catch(o){e.push(o)}if(e.length)throw e[0]}try{r("play",()=>{c(),n.play()});for(const e of["pause","video:pause","video:ended","video:waiting","video:emptied","video:seeking"])r(e,n.pause);r("seek",c),r("video:seeked",()=>{c(),t.playing&&n.play()}),r("video:timeupdate",()=>{t.playing&&c()}),r("video:ratechange",()=>{a.playbackRate=t.video.playbackRate}),r("video:volumechange",()=>{a.volume=t.volume,a.muted=t.muted}),r("video:playing",()=>{t.playing&&(c(),n.play())}),r("destroy",d),a.volume=t.volume,a.muted=t.muted,a.playbackRate=(null==(o=t.video)?void 0:o.playbackRate)||1}catch(s){try{d()}catch(l){}throw s}return{name:"artplayerPluginAudioTrack",audio:a,update(e){u&&n.update(e,t.playing)}}}}}); diff --git a/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.mjs b/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.mjs index 32277977d..55583c8bd 100644 --- a/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.mjs +++ b/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.mjs @@ -4,86 +4,162 @@ * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -function artplayerPluginAudioTrack(option) { - return (art) => { - let { url, offset = 0, sync = 0.3 } = option; - const audio = new Audio(); +function createAudioTrack(option) { + let { url, offset = 0, sync = 0.3 } = option; + const audio = new Audio(); + let closed = false; + function play() { + if (closed || !url) + return; + audio.play().catch((error) => { + if (!closed) + console.warn(error); + }); + } + function pause() { + if (!closed) + audio.pause(); + } + function destroy() { + if (closed) + return; + closed = true; + const failures = []; + for (const release of [() => audio.pause(), () => audio.removeAttribute("src"), () => audio.load()]) { + try { + release(); + } catch (error) { + failures.push(error); + } + } + if (failures.length) + throw failures[0]; + } + try { audio.preload = "auto"; - if (url) { + if (url) audio.src = url; + } catch (error) { + try { + destroy(); + } catch { } - function syncAudio() { - if (!art.video || !url) + throw error; + } + return { + audio, + play, + pause, + destroy, + sync(time) { + if (closed || !url) return; - const videoTime = art.currentTime; - const targetTime = videoTime + offset; - if (Math.abs(audio.currentTime - targetTime) > sync) { - audio.currentTime = targetTime; - } - } - art.on("play", () => { - if (!url) + const target = time + offset; + if (Math.abs(audio.currentTime - target) > sync) + audio.currentTime = target; + }, + update(newOption, playing) { + if (closed) return; - syncAudio(); - audio.play().catch((err) => { - console.warn(err); - }); - }); - art.on("pause", () => { - audio.pause(); - }); - art.on("seek", () => { - syncAudio(); - }); - art.on("video:timeupdate", () => { - if (art.playing) { - syncAudio(); - } - }); - art.on("video:ratechange", () => { - audio.playbackRate = art.video.playbackRate; - }); - art.on("video:volumechange", () => { - audio.volume = art.volume; - audio.muted = art.muted; - }); - art.on("video:waiting", () => { - audio.pause(); - }); - art.on("video:playing", () => { - if (url && art.playing) { - audio.play().catch((err) => { - console.warn(err); - }); - } - }); - art.on("destroy", () => { - audio.pause(); - audio.src = ""; - audio.load(); - }); - function update(newOption) { if (newOption.url && newOption.url !== url) { url = newOption.url; audio.src = url; - if (art.playing) { - audio.play().catch((err) => console.warn(err)); + if (playing) + play(); + } + if (newOption.offset !== void 0) + offset = newOption.offset; + if (newOption.sync !== void 0) + sync = newOption.sync; + } + }; +} +function artplayerPluginAudioTrack(option) { + return (art) => { + const track = createAudioTrack(option); + const { audio } = track; + const subscriptions = []; + let active = true; + function syncAudio() { + if (art.video) + track.sync(art.currentTime); + } + function listen(event, callback) { + const listener = () => { + if (active) + callback(); + }; + subscriptions.push([event, listener]); + art.on(event, listener); + } + function destroy() { + if (!active) + return; + active = false; + const failures = []; + for (const [event, listener] of subscriptions.splice(0)) { + try { + art.off(event, listener); + } catch (error) { + failures.push(error); } } - if (newOption.offset !== void 0) { - offset = newOption.offset; - } - if (newOption.sync !== void 0) { - sync = newOption.sync; + try { + track.destroy(); + } catch (error) { + failures.push(error); } + if (failures.length) + throw failures[0]; + } + try { + listen("play", () => { + syncAudio(); + track.play(); + }); + for (const event of ["pause", "video:pause", "video:ended", "video:waiting", "video:emptied", "video:seeking"]) + listen(event, track.pause); + listen("seek", syncAudio); + listen("video:seeked", () => { + syncAudio(); + if (art.playing) + track.play(); + }); + listen("video:timeupdate", () => { + if (art.playing) + syncAudio(); + }); + listen("video:ratechange", () => { + audio.playbackRate = art.video.playbackRate; + }); + listen("video:volumechange", () => { + audio.volume = art.volume; + audio.muted = art.muted; + }); + listen("video:playing", () => { + if (art.playing) { + syncAudio(); + track.play(); + } + }); + listen("destroy", destroy); + audio.volume = art.volume; + audio.muted = art.muted; + audio.playbackRate = art.video?.playbackRate || 1; + } catch (error) { + try { + destroy(); + } catch { + } + throw error; } - audio.volume = art.volume; - audio.muted = art.muted; - audio.playbackRate = art.video?.playbackRate || 1; return { name: "artplayerPluginAudioTrack", audio, - update + update(newOption) { + if (active) + track.update(newOption, art.playing); + } }; }; } diff --git a/packages/artplayer-plugin-audio-track/src/index.js b/packages/artplayer-plugin-audio-track/src/index.js index e4c96a656..e4c826470 100644 --- a/packages/artplayer-plugin-audio-track/src/index.js +++ b/packages/artplayer-plugin-audio-track/src/index.js @@ -1,101 +1,95 @@ +import { createAudioTrack } from './track' + export default function artplayerPluginAudioTrack(option) { return (art) => { - let { url, offset = 0, sync = 0.3 } = option - - const audio = new Audio() - audio.preload = 'auto' - if (url) { - audio.src = url - } + const track = createAudioTrack(option) + const { audio } = track + const subscriptions = [] + let active = true function syncAudio() { - if (!art.video || !url) - return - - const videoTime = art.currentTime - const targetTime = videoTime + offset - - if (Math.abs(audio.currentTime - targetTime) > sync) { - audio.currentTime = targetTime - } + if (art.video) + track.sync(art.currentTime) } - art.on('play', () => { - if (!url) - return - syncAudio() - audio.play().catch((err) => { - console.warn(err) - }) - }) - - art.on('pause', () => { - audio.pause() - }) - - art.on('seek', () => { - syncAudio() - }) - - art.on('video:timeupdate', () => { - if (art.playing) { - syncAudio() + function listen(event, callback) { + const listener = () => { + if (active) + callback() } - }) + subscriptions.push([event, listener]) + art.on(event, listener) + } - art.on('video:ratechange', () => { - audio.playbackRate = art.video.playbackRate - }) + function destroy() { + if (!active) + return + active = false + const failures = [] + for (const [event, listener] of subscriptions.splice(0)) { + try { + art.off(event, listener) + } + catch (error) { failures.push(error) } + } + try { + track.destroy() + } + catch (error) { failures.push(error) } + if (failures.length) + throw failures[0] + } - art.on('video:volumechange', () => { + try { + listen('play', () => { + syncAudio() + track.play() + }) + for (const event of ['pause', 'video:pause', 'video:ended', 'video:waiting', 'video:emptied', 'video:seeking']) + listen(event, track.pause) + listen('seek', syncAudio) + listen('video:seeked', () => { + syncAudio() + if (art.playing) + track.play() + }) + listen('video:timeupdate', () => { + if (art.playing) + syncAudio() + }) + listen('video:ratechange', () => { + audio.playbackRate = art.video.playbackRate + }) + listen('video:volumechange', () => { + audio.volume = art.volume + audio.muted = art.muted + }) + listen('video:playing', () => { + if (art.playing) { + syncAudio() + track.play() + } + }) + listen('destroy', destroy) audio.volume = art.volume audio.muted = art.muted - }) - - art.on('video:waiting', () => { - audio.pause() - }) - - art.on('video:playing', () => { - if (url && art.playing) { - audio.play().catch((err) => { - console.warn(err) - }) - } - }) - - art.on('destroy', () => { - audio.pause() - audio.src = '' - audio.load() - }) - - function update(newOption) { - if (newOption.url && newOption.url !== url) { - url = newOption.url - audio.src = url - if (art.playing) { - audio.play().catch(err => console.warn(err)) - } - } - - if (newOption.offset !== undefined) { - offset = newOption.offset - } - - if (newOption.sync !== undefined) { - sync = newOption.sync - } + audio.playbackRate = art.video?.playbackRate || 1 + } + catch (error) { + try { + destroy() + } + catch {} + throw error } - - audio.volume = art.volume - audio.muted = art.muted - audio.playbackRate = art.video?.playbackRate || 1 return { name: 'artplayerPluginAudioTrack', audio, - update, + update(newOption) { + if (active) + track.update(newOption, art.playing) + }, } } } diff --git a/packages/artplayer-plugin-audio-track/src/track.js b/packages/artplayer-plugin-audio-track/src/track.js new file mode 100644 index 000000000..f0615cbe4 --- /dev/null +++ b/packages/artplayer-plugin-audio-track/src/track.js @@ -0,0 +1,75 @@ +export function createAudioTrack(option) { + let { url, offset = 0, sync = 0.3 } = option + const audio = new Audio() + let closed = false + + function play() { + if (closed || !url) + return + audio.play().catch((error) => { + if (!closed) + console.warn(error) + }) + } + + function pause() { + if (!closed) + audio.pause() + } + + function destroy() { + if (closed) + return + closed = true + const failures = [] + for (const release of [() => audio.pause(), () => audio.removeAttribute('src'), () => audio.load()]) { + try { + release() + } + catch (error) { failures.push(error) } + } + if (failures.length) + throw failures[0] + } + + try { + audio.preload = 'auto' + if (url) + audio.src = url + } + catch (error) { + try { + destroy() + } + catch {} + throw error + } + + return { + audio, + play, + pause, + destroy, + sync(time) { + if (closed || !url) + return + const target = time + offset + if (Math.abs(audio.currentTime - target) > sync) + audio.currentTime = target + }, + update(newOption, playing) { + if (closed) + return + if (newOption.url && newOption.url !== url) { + url = newOption.url + audio.src = url + if (playing) + play() + } + if (newOption.offset !== undefined) + offset = newOption.offset + if (newOption.sync !== undefined) + sync = newOption.sync + }, + } +} diff --git a/refactor/audio-validation.md b/refactor/audio-validation.md index 29d0a9665..611d77cb9 100644 --- a/refactor/audio-validation.md +++ b/refactor/audio-validation.md @@ -1,5 +1,16 @@ # Audio Track 行为与媒体测试 +## PKG-AUDIO-03 候选修复 + +音频状态已从核心事件接入拆出,源码 44 项、加入三种产物共 89 项 Node 通过。 +正式 main/legacy 各三引擎 42 项通过(均含原有 9 缺陷观察/3 原生诊断);CI 583 项通过。 +原生暂停/结束/直接 seek、无错误媒体清理和销毁后 update 已有候选回归。 +source 标签可由 ARTPLAYER_AUDIO_ARTIFACT 显式选择实际 main/legacy 文件;未设置时仍编译源码。 +ARTPLAYER_TEST_AUDIO 接受平台分隔的三个 Node 产物路径,候选生命周期用例也逐格式执行。 +具体输入、初轮六个错误 currentSrc 断言及最终证据见 +[生命周期记录](baselines/audio-lifecycle-validation.json)。AUDIO-LIFE-01 按守卫/空 src 范围关闭, +AUDIO-SYNC-01 的边界/完整缓冲及设备验证继续 open。下面保留 02 当时的基线结果与问题描述。 + PKG-AUDIO-02;公开来源见 [1.1.0 契约](baselines/audio-track-contract.md), 固定执行结果及失败保留见 [验证记录](baselines/audio-validation.json)。 diff --git a/refactor/baselines/audio-lifecycle-validation.json b/refactor/baselines/audio-lifecycle-validation.json new file mode 100644 index 000000000..2e46bdc26 --- /dev/null +++ b/refactor/baselines/audio-lifecycle-validation.json @@ -0,0 +1,11902 @@ +{ + "schemaVersion": 1, + "task": "PKG-AUDIO-03", + "capturedAt": "2026-09-11T18:20:06.931Z", + "sourceCommit": "803e87252e62a3aa8b09694f361378fe17d46e4f", + "sourceHashesLF": { + "packages/artplayer-plugin-audio-track/src/index.js": "7f25d62d8d37c56960a75c985f3caff0dc3565f09e14c6a41e0896a9c5e3dd81", + "packages/artplayer-plugin-audio-track/src/track.js": "c9790a08ba2732c81e35d18a41b9001796719176f73e633d2f5798ac28d5575a", + "test/helpers/audio-track.js": "63c5d640172567dbce255e205fe4cd494c94915248f880544e80ae20650dac85", + "test/audio-track.test.js": "75a200daed96ee5724c58b0fdf4a20607e5fb63179e2a3aa5ffd4622a85508b4", + "test/browser/audio-track.spec.js": "0573a0170b38e261c2384abf8bc388765512ab94f0b87ea042a37b7eb10ff5ee" + }, + "artifacts": [ + { + "file": "packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.js", + "docs": "docs/compiled/artplayer-plugin-audio-track.js", + "sha256": "70a8a81c0429a33c54634c867c2f57e1691037dbc4768787a9d42e612c0335fd", + "bytes": 2102, + "gzip": 973, + "published": { + "sha256": "473f39f1d750f0722cca7e857c12c3c978ebe3c3b2352e325f1248318e508683", + "bytes": 1471, + "gzip": 676 + } + }, + { + "file": "packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.legacy.js", + "docs": "docs/compiled/artplayer-plugin-audio-track.legacy.js", + "sha256": "d3ffd1e736ed5c6c34a64302eeee2b51ad95de5ad23416e9cb53049a69b11833", + "bytes": 2134, + "gzip": 997, + "published": { + "sha256": "d8dc74bce76112d7430c98e3165605e32fde5d3c603be4b496eac58f574576cb", + "bytes": 1497, + "gzip": 694 + } + }, + { + "file": "packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.mjs", + "docs": "docs/compiled/artplayer-plugin-audio-track.mjs", + "sha256": "c807e3b8cbe89e1a762db7253c9ce61afbc39a3997829a6366ed9c199817ded1", + "bytes": 3945, + "gzip": 1168, + "published": { + "sha256": "4ac599bc5a1a6ecb0cb1942d4269528bfb2cd9d047f988de61fe671a77ad14cd", + "bytes": 2238, + "gzip": 728 + } + } + ], + "unchanged": [ + "package manifest and public declaration LF hashes match frozen 1.1.0 source" + ], + "node": { + "sourcePassed": 44, + "allArtifactsPassed": 89, + "artifactLog": { + "file": "refactor/.cache/audio03-artifacts.log", + "sha256": "2b3c225a46b36ed0712bff815a45ad8a9e99a377cb9743344f56d67f684d4a62" + } + }, + "ci": { + "file": "refactor/.cache/audio03-ci.log", + "sha256": "28f294983de7c2a1c40b922a36c7eb8330c10b3e889b2c9fbccc724dab848688", + "groups": [ + 540, + 11, + 32 + ], + "productionTS": 254, + "result": "passed", + "note": "Final browser cleanup assertion subsequently passed targeted lint and both artifact matrices." + }, + "sharedInputs": { + "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "32f3dc22e296dcc569dc1227f0b0cad92bd0dd7e74d747e19759ac5997443e92", + "bytes": 376744, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "3e8d0b7e7a90b5dbadf4cb108fd770d294f8a8a92ea089c41d0766c98bbc8230", + "bytes": 8433, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/test/audio-tone.m4a": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/audio-tone.m4a" + }, + "sha256": "83e6672b880b5d1c97093b1e26bdc40221c0b279615f40e99dbf9d2ade7b4d56", + "bytes": 132436 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "2318f39bdb5f3a3348d755cb4335907ae4adc944be3a435839c1bba201e81500", + "bytes": 8994 + } + } + }, + "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877": { + "release": { + "name": "artplayer-plugin-audio-track", + "version": "1.1.0", + "metadataUrl": "https://registry.npmjs.org/artplayer-plugin-audio-track/1.1.0", + "tarball": "https://registry.npmjs.org/artplayer-plugin-audio-track/-/artplayer-plugin-audio-track-1.1.0.tgz", + "integrity": "sha512-pvvHvTSqC2+sBelwYyjAv2CVmaQgG9KpX+i96t/e8oyZRX/JuepC9iSVIp7GzB3AtliFzhVamksT+8lXvD3RCg==", + "sha256": "7e84f6a2f4bfada428a77ef04b749bf3db53e0149fa1afe7bf5749d925e801ff", + "archiveBytes": 2205, + "registryGitHead": "daf133b22630b4a0eecfa3336bbddab0e9119d96", + "files": { + "package/README.md": "9a03352433ae90cb9d3198e17571c9bb598334b84a77a3a1df2c4b000ce8347d", + "package/dist/artplayer-plugin-audio-track.js": "473f39f1d750f0722cca7e857c12c3c978ebe3c3b2352e325f1248318e508683", + "package/dist/artplayer-plugin-audio-track.legacy.js": "d8dc74bce76112d7430c98e3165605e32fde5d3c603be4b496eac58f574576cb", + "package/dist/artplayer-plugin-audio-track.mjs": "4ac599bc5a1a6ecb0cb1942d4269528bfb2cd9d047f988de61fe671a77ad14cd", + "package/package.json": "c466ae55c40e8f6bdd97bec20fcf916c8c4f44eef3e47694638be005eb445df7", + "package/types/artplayer-plugin-audio-track.d.ts": "27bc0dfedacb7e0188cb668ac8708874a86b00d489f1636037c2465d3344437e" + }, + "manifest": { + "name": "artplayer-plugin-audio-track", + "version": "1.1.0", + "description": "audio-track plugin for ArtPlayer", + "author": "Harvey Zhao ", + "license": "MIT", + "homepage": "https://artplayer.org", + "repository": { + "type": "git", + "url": "git+https://github.com/zhw2590582/ArtPlayer.git" + }, + "bugs": { + "url": "https://github.com/zhw2590582/ArtPlayer/issues" + }, + "keywords": [ + "html5", + "video", + "player" + ], + "exports": { + ".": { + "types": "./types/artplayer-plugin-audio-track.d.ts", + "import": "./dist/artplayer-plugin-audio-track.mjs", + "require": "./dist/artplayer-plugin-audio-track.js" + }, + "./legacy": { + "types": "./types/artplayer-plugin-audio-track.d.ts", + "import": "./dist/artplayer-plugin-audio-track.legacy.js", + "require": "./dist/artplayer-plugin-audio-track.legacy.js" + } + }, + "main": "dist/artplayer-plugin-audio-track.js", + "module": "./dist/artplayer-plugin-audio-track.mjs", + "types": "types/artplayer-plugin-audio-track.d.ts", + "legacy": "dist/artplayer-plugin-audio-track.legacy.js", + "browserslist": "last 1 Chrome version" + } + }, + "sourceSHA256": "70a8a81c0429a33c54634c867c2f57e1691037dbc4768787a9d42e612c0335fd", + "candidate": "packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.js", + "audio": { + "sha256": "83e6672b880b5d1c97093b1e26bdc40221c0b279615f40e99dbf9d2ade7b4d56", + "bytes": 132436, + "format": "AAC mono 48000 Hz, 16 seconds, 440 Hz tone in MP4" + }, + "wav": { + "sha256": "3150fc69aa2b94a4b556e2e6d9d67fb52c2926cd144fdd8694a7f8ddfd2f15ff", + "bytes": 512044, + "format": "PCM16LE mono 16000 Hz, 16 seconds, integer square wave 200 Hz" + }, + "scope": "Source or explicit artifact browser checks; no physical device or installed package acceptance" + }, + "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb": { + "release": { + "name": "artplayer-plugin-audio-track", + "version": "1.1.0", + "metadataUrl": "https://registry.npmjs.org/artplayer-plugin-audio-track/1.1.0", + "tarball": "https://registry.npmjs.org/artplayer-plugin-audio-track/-/artplayer-plugin-audio-track-1.1.0.tgz", + "integrity": "sha512-pvvHvTSqC2+sBelwYyjAv2CVmaQgG9KpX+i96t/e8oyZRX/JuepC9iSVIp7GzB3AtliFzhVamksT+8lXvD3RCg==", + "sha256": "7e84f6a2f4bfada428a77ef04b749bf3db53e0149fa1afe7bf5749d925e801ff", + "archiveBytes": 2205, + "registryGitHead": "daf133b22630b4a0eecfa3336bbddab0e9119d96", + "files": { + "package/README.md": "9a03352433ae90cb9d3198e17571c9bb598334b84a77a3a1df2c4b000ce8347d", + "package/dist/artplayer-plugin-audio-track.js": "473f39f1d750f0722cca7e857c12c3c978ebe3c3b2352e325f1248318e508683", + "package/dist/artplayer-plugin-audio-track.legacy.js": "d8dc74bce76112d7430c98e3165605e32fde5d3c603be4b496eac58f574576cb", + "package/dist/artplayer-plugin-audio-track.mjs": "4ac599bc5a1a6ecb0cb1942d4269528bfb2cd9d047f988de61fe671a77ad14cd", + "package/package.json": "c466ae55c40e8f6bdd97bec20fcf916c8c4f44eef3e47694638be005eb445df7", + "package/types/artplayer-plugin-audio-track.d.ts": "27bc0dfedacb7e0188cb668ac8708874a86b00d489f1636037c2465d3344437e" + }, + "manifest": { + "name": "artplayer-plugin-audio-track", + "version": "1.1.0", + "description": "audio-track plugin for ArtPlayer", + "author": "Harvey Zhao ", + "license": "MIT", + "homepage": "https://artplayer.org", + "repository": { + "type": "git", + "url": "git+https://github.com/zhw2590582/ArtPlayer.git" + }, + "bugs": { + "url": "https://github.com/zhw2590582/ArtPlayer/issues" + }, + "keywords": [ + "html5", + "video", + "player" + ], + "exports": { + ".": { + "types": "./types/artplayer-plugin-audio-track.d.ts", + "import": "./dist/artplayer-plugin-audio-track.mjs", + "require": "./dist/artplayer-plugin-audio-track.js" + }, + "./legacy": { + "types": "./types/artplayer-plugin-audio-track.d.ts", + "import": "./dist/artplayer-plugin-audio-track.legacy.js", + "require": "./dist/artplayer-plugin-audio-track.legacy.js" + } + }, + "main": "dist/artplayer-plugin-audio-track.js", + "module": "./dist/artplayer-plugin-audio-track.mjs", + "types": "types/artplayer-plugin-audio-track.d.ts", + "legacy": "dist/artplayer-plugin-audio-track.legacy.js", + "browserslist": "last 1 Chrome version" + } + }, + "sourceSHA256": "d3ffd1e736ed5c6c34a64302eeee2b51ad95de5ad23416e9cb53049a69b11833", + "candidate": "packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.legacy.js", + "audio": { + "sha256": "83e6672b880b5d1c97093b1e26bdc40221c0b279615f40e99dbf9d2ade7b4d56", + "bytes": 132436, + "format": "AAC mono 48000 Hz, 16 seconds, 440 Hz tone in MP4" + }, + "wav": { + "sha256": "3150fc69aa2b94a4b556e2e6d9d67fb52c2926cd144fdd8694a7f8ddfd2f15ff", + "bytes": 512044, + "format": "PCM16LE mono 16000 Hz, 16 seconds, integer square wave 200 Hz" + }, + "scope": "Source or explicit artifact browser checks; no physical device or installed package acceptance" + } + }, + "runs": [ + { + "file": "refactor/.cache/audio03-browser-main-first.json", + "sha256": "2275d896452c9872e23ae3510e971659f64cf32cb5ab750613df1efa230e69b3", + "stats": { + "startTime": "2026-09-11T18:15:42.879Z", + "duration": 49128.574, + "expected": 36, + "skipped": 0, + "unexpected": 6, + "flaky": 0 + }, + "cases": [ + { + "title": "native WAV diagnostic isolates sample decoding from ArtPlayer and plugin", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "native-wav-capability": { + "canPlay": "maybe", + "readyState": 4, + "error": null, + "playerCreated": false + }, + "audio-state": {}, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published AUDIO-LIFE-01: empty src cleanup produces a native media error", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.002805, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + }, + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "chromium", + "status": "failed", + "retry": 0, + "error": "Error: expect(received).toBe(expected) // Object.is equality\n\nExpected: \"\"\nReceived: \"http://127.0.0.1:8084/test/audio-tone.m4a?source=first\"\n\nCall Log:\n- Timeout 7000ms exceeded while waiting on the predicate", + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000216, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.338328, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.800131, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.960521, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + published audio: native pause and end leave external audio playing", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.135247 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000347, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.800117, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 255, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000254, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 2.271867, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 2.271867, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.271972, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.271992, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + published audio: real load error can recover with a new source", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.002612, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 503 (Service Unavailable)" + ], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 255, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000272, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 2.269164, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 2.269164, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.269289, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.270151, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + source audio: real load error can recover with a new source", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.000323, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 503 (Service Unavailable)" + ], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "chromium", + "status": "failed", + "retry": 0, + "error": "Error: expect(received).toBe(expected) // Object.is equality\n\nExpected: \"\"\nReceived: \"http://127.0.0.1:8084/test/audio-tone.m4a?source=first\"\n\nCall Log:\n- Timeout 7000ms exceeded while waiting on the predicate", + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000167, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.337131, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.800243, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.96038, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + published audio: native pause and end leave external audio playing", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.133354 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.002304, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.800138, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 255, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000356, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 2.267244, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 2.267244, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.267358, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.267379, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + published audio: real load error can recover with a new source", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.000323, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 503 (Service Unavailable)" + ], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 255, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000251, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 2.270616, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 2.270616, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.270699, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.270718, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + source audio: real load error can recover with a new source", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.000209, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 503 (Service Unavailable)" + ], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "native WAV diagnostic isolates sample decoding from ArtPlayer and plugin", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "native-wav-capability": { + "canPlay": "maybe", + "readyState": 4, + "error": null, + "playerCreated": false + }, + "audio-state": {}, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published AUDIO-LIFE-01: empty src cleanup produces a native media error", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "firefox", + "status": "failed", + "retry": 0, + "error": "Error: expect(received).toBe(expected) // Object.is equality\n\nExpected: \"\"\nReceived: \"http://127.0.0.1:8084/test/audio-tone.m4a?source=first\"\n\nCall Log:\n- Timeout 7000ms exceeded while waiting on the predicate", + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.375065, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.962473, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: native pause and end leave external audio playing", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.042594 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 241, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: real load error can recover with a new source", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 241, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: real load error can recover with a new source", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "firefox", + "status": "failed", + "retry": 0, + "error": "Error: expect(received).toBe(expected) // Object.is equality\n\nExpected: \"\"\nReceived: \"http://127.0.0.1:8084/test/audio-tone.m4a?source=first\"\n\nCall Log:\n- Timeout 7000ms exceeded while waiting on the predicate", + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.372111, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.967494, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: native pause and end leave external audio playing", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.083126 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 241, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: real load error can recover with a new source", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 241, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: real load error can recover with a new source", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "native WAV diagnostic isolates sample decoding from ArtPlayer and plugin", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "native-wav-capability": { + "canPlay": "probably", + "readyState": 0, + "error": 4, + "playerCreated": false + }, + "audio-state": {}, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published AUDIO-LIFE-01: empty src cleanup produces a native media error", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.04, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "webkit", + "status": "failed", + "retry": 0, + "error": "Error: expect(received).toBe(expected) // Object.is equality\n\nExpected: \"\"\nReceived: \"http://127.0.0.1:8084/test/audio-tone.m4a?source=first\"\n\nCall Log:\n- Timeout 7000ms exceeded while waiting on the predicate", + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.03, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.4382702, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4.000502, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: native pause and end leave external audio playing", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.266041 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 235, + 236, + 12, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.6785224, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 3.0578706, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: real load error can recover with a new source", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 235, + 236, + 12, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.2772223, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.650304, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: real load error can recover with a new source", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "webkit", + "status": "failed", + "retry": 0, + "error": "Error: expect(received).toBe(expected) // Object.is equality\n\nExpected: \"\"\nReceived: \"http://127.0.0.1:8084/test/audio-tone.m4a?source=first\"\n\nCall Log:\n- Timeout 7000ms exceeded while waiting on the predicate", + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.04, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.4228952, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4.000704, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: native pause and end leave external audio playing", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.2183952 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 235, + 236, + 12, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.6544039, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: real load error can recover with a new source", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 235, + 236, + 12, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.04, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.2762833, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.6622668, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: real load error can recover with a new source", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + } + ] + }, + { + "file": "refactor/.cache/audio03-browser-main-confirm.json", + "sha256": "a0f00fd7ff79a1916164c65e21e1082b5571dc95407978221b683df66048c219", + "stats": { + "startTime": "2026-09-11T18:17:19.622Z", + "duration": 40355.757, + "expected": 42, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "cases": [ + { + "title": "native WAV diagnostic isolates sample decoding from ArtPlayer and plugin", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "native-wav-capability": { + "canPlay": "maybe", + "readyState": 4, + "error": null, + "playerCreated": false + }, + "audio-state": {}, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published AUDIO-LIFE-01: empty src cleanup produces a native media error", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000292, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.346374, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.960497, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + published audio: native pause and end leave external audio playing", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.156156 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.002725, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.800075, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 255, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.002357, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.250204, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0.000108, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.636965, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.637001, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + published audio: real load error can recover with a new source", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.000268, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 503 (Service Unavailable)" + ], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 255, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.00023, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 2.263443, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 2.263443, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.263538, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.263551, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + source audio: real load error can recover with a new source", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.000298, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 503 (Service Unavailable)" + ], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.002873, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.340491, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.800267, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.960783, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + published audio: native pause and end leave external audio playing", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.123483 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000267, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.800142, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 255, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000472, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 2.265363, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 2.265363, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.265469, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.26549, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + published audio: real load error can recover with a new source", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.000356, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 503 (Service Unavailable)" + ], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 255, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000476, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0.000054, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.627484, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.627508, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + source audio: real load error can recover with a new source", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.000092, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 503 (Service Unavailable)" + ], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "native WAV diagnostic isolates sample decoding from ArtPlayer and plugin", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "native-wav-capability": { + "canPlay": "maybe", + "readyState": 4, + "error": null, + "playerCreated": false + }, + "audio-state": {}, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published AUDIO-LIFE-01: empty src cleanup produces a native media error", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.3754, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.966304, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: native pause and end leave external audio playing", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.091165 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 241, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.916666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.916666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: real load error can recover with a new source", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 241, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: real load error can recover with a new source", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.380347, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 8.002535, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: native pause and end leave external audio playing", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.043078 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 241, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: real load error can recover with a new source", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 255, + 241, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: real load error can recover with a new source", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "native WAV diagnostic isolates sample decoding from ArtPlayer and plugin", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "native-wav-capability": { + "canPlay": "probably", + "readyState": 0, + "error": 4, + "playerCreated": false + }, + "audio-state": {}, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published AUDIO-LIFE-01: empty src cleanup produces a native media error", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.2094789, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4.00289, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: native pause and end leave external audio playing", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.2675201 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 235, + 236, + 12, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.65749, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: real load error can recover with a new source", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 235, + 236, + 12, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 2.270416, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 2.270416, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.270416, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.270416, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: real load error can recover with a new source", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.4231869, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4.0015516, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: native pause and end leave external audio playing", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.2122286 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 235, + 236, + 12, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.6655716, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: real load error can recover with a new source", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "decoded-frame-pixel": [ + 235, + 236, + 12, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.6668878, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.6668878, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 3.0593098, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: real load error can recover with a new source", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "1d8f8e098f29f02f9ed3910e2788c8daa67a27e663d4705646d9b0b1ab7d0877" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + } + ] + }, + { + "file": "refactor/.cache/audio03-browser-legacy.json", + "sha256": "d7f737d2aaf40b29ce1bfe18f1f99244870d7bfeeaf138a820d650d8a9a4b994", + "stats": { + "startTime": "2026-09-11T18:18:18.473Z", + "duration": 33173.833999999995, + "expected": 42, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "cases": [ + { + "title": "native WAV diagnostic isolates sample decoding from ArtPlayer and plugin", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "native-wav-capability": { + "canPlay": "maybe", + "readyState": 4, + "error": null, + "playerCreated": false + }, + "audio-state": {}, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published AUDIO-LIFE-01: empty src cleanup produces a native media error", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.002378, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000285, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.342144, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.800285, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.960341, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + published audio: native pause and end leave external audio playing", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.132336 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000268, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.800121, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "decoded-frame-pixel": [ + 255, + 255, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000291, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 2.269389, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 2.269389, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.269478, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.269492, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + published audio: real load error can recover with a new source", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.001958, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 503 (Service Unavailable)" + ], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "decoded-frame-pixel": [ + 255, + 255, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000323, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 2.267104, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 2.267104, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.26717, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.267183, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "published core + source audio: real load error can recover with a new source", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.000197, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 503 (Service Unavailable)" + ], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000233, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.327735, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.800225, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.960417, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + published audio: native pause and end leave external audio playing", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.136003 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000388, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.800123, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "decoded-frame-pixel": [ + 255, + 255, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000358, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 2.268487, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 2.268487, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.268594, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.268613, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + published audio: real load error can recover with a new source", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.000344, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 503 (Service Unavailable)" + ], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "decoded-frame-pixel": [ + 255, + 255, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.000233, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 2.267137, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 2.267137, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.267212, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.267226, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "candidate core + source audio: real load error can recover with a new source", + "engine": "chromium", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.000163, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [ + "Failed to load resource: the server responded with a status of 503 (Service Unavailable)" + ], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + } + } + }, + { + "title": "native WAV diagnostic isolates sample decoding from ArtPlayer and plugin", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "native-wav-capability": { + "canPlay": "maybe", + "readyState": 4, + "error": null, + "playerCreated": false + }, + "audio-state": {}, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published AUDIO-LIFE-01: empty src cleanup produces a native media error", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.373582, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.961893, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: native pause and end leave external audio playing", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.043281 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "decoded-frame-pixel": [ + 255, + 241, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: real load error can recover with a new source", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "decoded-frame-pixel": [ + 255, + 241, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.583332, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.583332, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: real load error can recover with a new source", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.37218, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.961808, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: native pause and end leave external audio playing", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.043098 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "decoded-frame-pixel": [ + 255, + 241, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: real load error can recover with a new source", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "decoded-frame-pixel": [ + 255, + 241, + 2, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 2.541666, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: real load error can recover with a new source", + "engine": "firefox", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "native WAV diagnostic isolates sample decoding from ArtPlayer and plugin", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "native-wav-capability": { + "canPlay": "probably", + "readyState": 0, + "error": 4, + "playerCreated": false + }, + "audio-state": {}, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published AUDIO-LIFE-01: empty src cleanup produces a native media error", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.03, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.421916, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4.0121808, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: native pause and end leave external audio playing", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.2992284 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "decoded-frame-pixel": [ + 235, + 236, + 12, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.26, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.26, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.6260142, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + published audio: real load error can recover with a new source", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "decoded-frame-pixel": [ + 235, + 236, + 12, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.0109167, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.6670424, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 3.0353292, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "published core + source audio: real load error can recover with a new source", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.000875, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: native pause/end stop audio and closed references stay inert", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 0.3821869, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 4.0007536, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 7.81, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: native pause and end leave external audio playing", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "published-native-pause-end": { + "videoEnded": true, + "videoPaused": true, + "audioPaused": false, + "audioTime": 8.1639786 + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.03, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 7.8, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: decoded play, offset seek, rate, source and cleanup", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "decoded-frame-pixel": [ + 235, + 236, + 12, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.26, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.26, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + published audio: real load error can recover with a new source", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": "", + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 3, + "error": 4, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: decoded play, offset seek, rate, source and cleanup", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "decoded-frame-pixel": [ + 235, + 236, + 12, + 255 + ], + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 0.02, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "pause", + "time": 2.25, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "seeked", + "time": 2.26, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "playing", + "time": 2.26, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=first" + }, + { + "event": "loadedmetadata", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "playing", + "time": 0.01, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "seeked", + "time": 2.66865, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=second" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + }, + { + "title": "candidate core + source audio: real load error can recover with a new source", + "engine": "webkit", + "status": "passed", + "retry": 0, + "attachments": { + "audio-inputs": { + "sharedInput": "a61e4cb5309708ce5b6388dd2483d0445bb48946f546a535c3d4237e8c700bdb" + }, + "audio-state": { + "audio": { + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "video": { + "src": "http://127.0.0.1:8084/test/pattern.mp4", + "attribute": null, + "time": 0, + "paused": true, + "readyState": 0, + "networkState": 0, + "rate": 1, + "seekable": [] + }, + "events": [ + { + "event": "error", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/audio-fixture/broken.m4a" + }, + { + "event": "loadedmetadata", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "playing", + "time": 0.0005208, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + }, + { + "event": "emptied", + "time": 0, + "src": "http://127.0.0.1:8084/test/audio-tone.m4a?source=recovered" + } + ], + "warnings": [] + }, + "browser-evidence": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "sharedInput": "27258261e9ce712f0e40c6c6b61f26571d2e91ceb961928c08c664edef2ab881" + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=candidate", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + } + } + } + ] + } + ], + "firstFailure": "Six candidate tests expected empty currentSrc. All three engines already had absent src, paused=true, readyState=0, networkState=0 and no error, including the core video. Corrected cleanup assertion to those observed resource states; no timeout increase or production change.", + "limitations": [ + "No isolated installed package, physical devices or acoustic-output certification", + "Source remains JS until PKG-AUDIO-04", + "Negative offset start/duration and complete real buffering/source stress remain open in AUDIO-SYNC-01", + "Each 42-case browser run includes nine explicit published defect observations and three native WAV diagnostics" + ] +} diff --git a/refactor/changes/2026-09-12-PKG-AUDIO-03-lifecycle.md b/refactor/changes/2026-09-12-PKG-AUDIO-03-lifecycle.md new file mode 100644 index 000000000..1e38d43a6 --- /dev/null +++ b/refactor/changes/2026-09-12-PKG-AUDIO-03-lifecycle.md @@ -0,0 +1,53 @@ +# PKG-AUDIO-03:音频同步与资源归属 + +状态:本步生命周期与结构验收完成;起点 803e8725。02 已冻结真实旧版缺陷。 +将媒体状态/操作与 ArtPlayer 事件安装分开,保留公开工厂、同一 audio、同步 update。 +修复原生暂停/结束后继续播放、销毁空 src 错误、销毁后的外部 update 和注册中断清理。 +本步仍为 JS,04 单独完成严格 TS/兼容声明。负偏移起点等未完整验证项继续由 05 接续, +不为本次资源修复顺便改变偏移/空 URL/同 URL 更新语义。 + +## 实现和兼容 + +index.js 只负责读取核心状态、安装/释放订阅、公开 update 和失败回滚。 +track.js 拥有 Audio、URL/offset/sync、关闭状态与媒体操作;不接收整个 art、不依赖新核心工具。 +两个模块职责清楚,不为拆分额外创建纯转发模块。包内 ARCHITECTURE.md 给出实际入口、 +资源归属、时序、错误规则、回归命令及未完成事项。 + +原生 video:pause/ended/waiting/emptied/seeking 暂停音频;seeked/playing 重新同步并按主视频 +实际播放状态恢复。原公开 play/seek/timeupdate 及音量/倍率仍保留。 +销毁先关闭入口、解绑所有自有订阅,再关闭媒体状态、pause/removeAttribute('src')/load。 +每步清理独立尝试,正常销毁传播首个清理错误;初始化失败保留原始错误。 +关闭后的 update/保留事件回调/待决播放拒绝不会重新写入资源或警告;活动状态拒绝仍警告原错误。 + +保持工厂必传对象、注册/返回同步、公开 name/audio/update、同一元素引用、无自动主视频静音、 +空/同 URL 不重载、update 部分配置的运行时支持、默认值和严格漂移阈值。 +没有更改公开 manifest/声明(与 1.1.0 冻结 LF 哈希相同)或新增运行依赖;JS/TS 类型不一致 +由 04 处理。构建产物只通过正式 yarn build 生成,docs/compiled 三份与包内产物逐字节相同。 + +## 验证结果 + +- Source Node 专项 44 项;含候选三格式后 89 项,均通过。六组候选生命周期回归也在 + main/legacy/ESM 执行,不只检查源码;旧版缺陷观察仍绑定旧 npm 归档。 +- 完整 CI 583 项(540+11+32)、254 生产 TS 通过。本步两个音频 JS 文件未计为 TS 完成。 +- main/legacy 各三引擎 42 项通过,无失败、重试或跳过;各包括 9 项旧缺陷观察、3 项原生诊断。 + 新增候选验证确认直接暂停/结束停止音频、直接 currentTime seek 同步、关闭后引用无效及无媒体错误。 +- 正式构建通过;main 2102 字节/gzip 973,旧基线 1471/gzip 676。增加 297 gzip 字节用于 + 原生事件与资源守卫,不称体积优化。所有分发 SHA 与样本/运行输入见冻结记录。 +- 定向 lint 通过;完整 CI 后仅修改浏览器清理断言,额外定向 lint 和两产物矩阵均通过。 + 计划/风险表和 diff 检查通过:216 项任务、126 项风险,无未解决事项豁免。 + +证据:[audio-lifecycle-validation.json](../baselines/audio-lifecycle-validation.json)。 +首轮 36 通过、6 失败全部保留:测试错误要求只读 currentSrc 清空,而三个引擎的 audio +和核心 video 均已 src 属性缺失、paused=true、readyState/networkState=0、error=null, +currentSrc 仍保留旧值。改检查这些可观察资源状态,没有修改媒体源码、扩大等待或忽略错误。 +这也明确限定清理保证:不会伪造浏览器只读属性。 + +## 后续与交付 + +AUDIO-LIFE-01 按已登记范围关闭;不声称所有设备没有泄漏。 +AUDIO-SYNC-01 仅原生暂停/结束/seek 问题已修复,负偏移起点/时长边界、真实缓冲和连续切源 +仍由 05 保持 open。WAV/WebKit、设备、安装包、类型、示例和版本门槛继续保留。 + +独立提交主题:`refactor(audio): [PKG-AUDIO-03] separate track ownership and native lifecycle`。 +可回退本任务提交恢复旧生产行为及生成产物;不要回退旧发布基线或删除历史缺陷证据。 +接续 PKG-AUDIO-04,把这两个职责模块迁移严格 TS,补兼容公开声明和编辑器;无 push/tag/publish/merge。 diff --git a/refactor/plan.md b/refactor/plan.md index 6e7ad17de..87cb8933f 100644 --- a/refactor/plan.md +++ b/refactor/plan.md @@ -4,7 +4,7 @@ 基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 216 项,范围 22 个包及工作区/示例。 -状态:todo 148 / doing 1 / blocked 0 / done 67 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。 +状态:todo 147 / doing 1 / blocked 0 / done 68 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。 前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。 @@ -157,7 +157,7 @@ | --- | --- | --- | --- | --- | --- | --- | | PKG-AUDIO-01 | artplayer-plugin-audio-track
核对包契约与历史用法 | BASE-05 | url/offset/sync、audio 实例暴露、update 与音量语义 | 源码/声明/README/demo/发布包差异已登记;公开形状和版本范围冻结 | H | done | | PKG-AUDIO-02 | artplayer-plugin-audio-track
建立特有行为与错误测试 | PKG-AUDIO-01, ENG-03, ENG-05 | 偏移、倍率、seek、waiting/playing、加载错误和 autoplay 拒绝 | 旧版本行为可重跑,成功/失败/切源/销毁有必要断言 | H | done | -| PKG-AUDIO-03 | artplayer-plugin-audio-track
整理内部职责与资源 | PKG-AUDIO-02, CORE-10 | 外部 audio 的同步策略、监听与源更新生命周期 | 结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过 | H | todo | +| PKG-AUDIO-03 | artplayer-plugin-audio-track
整理内部职责与资源 | PKG-AUDIO-02, CORE-10 | 外部 audio 的同步策略、监听与源更新生命周期 | 结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过 | H | done | | PKG-AUDIO-04 | artplayer-plugin-audio-track
迁移自有源码和公开类型 | PKG-AUDIO-03, ENG-04, ENG-06, CORE-07 | Option/Result/audio、update 输入和事件类型 | 严格类型检查、旧消费样例通过;声明路径/导出和同步异步兼容 | H | todo | | PKG-AUDIO-05 | artplayer-plugin-audio-track
验证新旧核心和组合 | PKG-AUDIO-04, CORE-22 | 主视频切源和缓冲恢复,多实例独立音频、旧核心 | 最终核心与原支持范围核心分别通过;设备/SDK 缺证据不能标完成 | H | todo | | PKG-AUDIO-06 | artplayer-plugin-audio-track
验证分发并同步文档 | PKG-AUDIO-05, ENG-07 | audio.track.js 示例与运行返回值一致的声明 | tarball 入口/资源、类型、8082 demo 和 README 一致,有回退记录 | H | todo | @@ -468,6 +468,7 @@ - PKG-CHAPTER-04: [记录](changes/2026-09-10-PKG-CHAPTER-04-public-types.md) [记录](baselines/chapter-types-validation.json) - PKG-AUDIO-01: [记录](changes/2026-09-12-PKG-AUDIO-01-contract.md) [记录](baselines/audio-track-contract.md) [记录](baselines/audio-track-release.json) - PKG-AUDIO-02: [记录](changes/2026-09-12-PKG-AUDIO-02-tests.md) [记录](audio-validation.md) [记录](baselines/audio-validation.json) +- PKG-AUDIO-03: [记录](changes/2026-09-12-PKG-AUDIO-03-lifecycle.md) [记录](baselines/audio-lifecycle-validation.json) - PKG-HLS-01: [记录](baselines/hls-control-contract.md) [记录](baselines/hls-control-release.json) [记录](changes/2026-09-11-PKG-HLS-01-contract.md) - PKG-HLS-02: [记录](hls-validation.md) [记录](baselines/hls-sdk.json) [记录](baselines/hls-validation.json) [记录](changes/2026-09-11-PKG-HLS-02-tests.md) - PKG-HLS-03: [记录](changes/2026-09-12-PKG-HLS-03-modules.md) [记录](baselines/hls-modules-validation.json) [记录](hls-validation.md) diff --git a/refactor/progress.md b/refactor/progress.md index ea552bb04..6a5bdbc50 100644 --- a/refactor/progress.md +++ b/refactor/progress.md @@ -1,5 +1,18 @@ # 进度与证据 +## 最新完成:PKG-AUDIO-03 源码拆分与生命周期修复 + +Audio Track 已拆为入口事件管理与独立媒体状态两个 JS 模块;修复原生暂停/结束后 +外部音频继续播放、销毁空 src 错误和旧引用复活,补失败回滚与自有订阅清理。 +公开 audio、同步 update、旧 URL/偏移/阈值语义保持,包内架构文档已同步。 + +44 项源码/89 项含三格式 Node 通过,CI 583 项;正式 main/legacy 三引擎各 42 项通过, +其中保留 9 项旧缺陷观察和 3 项原生诊断。三份 docs/compiled 与包产物一致。 +首轮错误 currentSrc 断言及原始 trace 保留;main gzip 973(基线 676),不声称体积优化。 +当前 216 项、68 done、1 doing、147 todo。Audio-02 已提交 803e8725,03 独立提交核实后 +进入 04 严格 TS/公开类型;完整负偏移/缓冲、真机、分发门槛仍待后续,HLS 两风险仍 open。 +详见 [源码交付](changes/2026-09-12-PKG-AUDIO-03-lifecycle.md) 与 [冻结证据](baselines/audio-lifecycle-validation.json)。 + ## 最新完成:PKG-AUDIO-02 行为与真实媒体基线 38 项 Node 契约覆盖源码和发布三格式,完整 CI 577 项、254 个生产 TS 通过。 diff --git a/refactor/risk-table.md b/refactor/risk-table.md index 3bf771a48..dc0a775a9 100644 --- a/refactor/risk-table.md +++ b/refactor/risk-table.md @@ -126,7 +126,7 @@ | HLS-ENV-01 | open / 已复现 | Windows WebKit 缺失 MSE,HLS 播放矩阵尚缺 Safari 证据 | PKG-HLS-05, REL-09, REVIEW-02 | | HLS-CRASH-01 | open / 已复现 | Firefox Hls 1.5.17 worker 销毁可在原生 video 与候选核心复现崩溃 | PKG-HLS-SDK-01, PKG-HLS-05, REVIEW-02 | | HLS-PLAYBACK-01 | open / 已复现 | Firefox 旧核心与 Hls 1.7.2 切组后视频档位未完成切换 | PKG-HLS-SDK-01, PKG-HLS-05, REVIEW-02 | -| AUDIO-LIFE-01 | open / 已复现 | Audio Track 销毁后 update 与媒体/订阅缺少终止守卫 | PKG-AUDIO-02, PKG-AUDIO-03, PKG-AUDIO-05 | +| AUDIO-LIFE-01 | resolved / 已复现 | Audio Track 销毁后 update 与媒体/订阅缺少终止守卫 | PKG-AUDIO-02, PKG-AUDIO-03, PKG-AUDIO-05 | | AUDIO-SYNC-01 | open / 已复现 | Audio Track 未同步原生暂停/结束,偏移边界与切源/缓冲仍待完整验证 | PKG-AUDIO-02, PKG-AUDIO-03, PKG-AUDIO-05 | | AUDIO-TYPE-01 | open / 源码/产物事实 | Audio Track update 部分配置与公开/编辑器声明不一致 | PKG-AUDIO-04 | | AUDIO-DEMO-01 | open / 源码/产物事实 | Audio Track README 示例链接名称不匹配且缺维护说明 | PKG-AUDIO-06 | diff --git a/refactor/risks.json b/refactor/risks.json index 70da2f8d3..6f9cc3f46 100644 --- a/refactor/risks.json +++ b/refactor/risks.json @@ -2648,7 +2648,7 @@ "id": "AUDIO-LIFE-01", "title": "Audio Track 销毁后 update 与媒体/订阅缺少终止守卫", "confirmation": "reproduced", - "status": "open", + "status": "resolved", "owners": [ "PKG-AUDIO-02", "PKG-AUDIO-03", @@ -2662,7 +2662,13 @@ "refactor/baselines/audio-validation.json" ], "compatibleResolution": "保留公开 audio 和同步 update,封闭销毁后的资源写入并管理插件订阅,验证待决播放拒绝。", - "closureCriteria": "受控复现和新旧核心真实媒体切源/销毁验证通过,不以源码观察代替泄漏证据。" + "closureCriteria": "受控复现和新旧核心真实媒体切源/销毁验证通过,不以源码观察代替泄漏证据。", + "resolutionEvidence": [ + "refactor/baselines/audio-lifecycle-validation.json", + "refactor/changes/2026-09-12-PKG-AUDIO-03-lifecycle.md", + "packages/artplayer-plugin-audio-track/ARCHITECTURE.md" + ], + "resolutionRationale": "候选源码/三格式受控回归及 main/legacy 三引擎验证:插件自己解绑,关闭后的 update/回调/拒绝无资源写入,移除 src 后无新增媒体错误;安装/解绑失败仍释放。此关闭只覆盖已登记守卫/空 src 问题,不称全设备无内存泄漏。" }, { "id": "AUDIO-SYNC-01", @@ -2679,9 +2685,10 @@ "refactor/baselines/audio-track-release.json", "test/audio-track.test.js", "test/browser/audio-track.spec.js", - "refactor/baselines/audio-validation.json" + "refactor/baselines/audio-validation.json", + "refactor/baselines/audio-lifecycle-validation.json" ], - "compatibleResolution": "固定严格阈值、偏移正负、倍率和音量语义;实测负目标/超时长及连续切源,按证据修复。", + "compatibleResolution": "PKG-AUDIO-03 已修复原生暂停/结束与直接 seek 同步;严格阈值、偏移正负、倍率/音量不变。PKG-AUDIO-05 继续负目标/超时长、真实缓冲和连续切源的完整验证,条目仍 open。", "closureCriteria": "正常/边界/失败/缓冲恢复有媒体与受控断言,实际支持环境缺口明确处理。" }, { diff --git a/refactor/tasks.json b/refactor/tasks.json index b55ce46f2..154814d74 100644 --- a/refactor/tasks.json +++ b/refactor/tasks.json @@ -1511,11 +1511,14 @@ "PKG-AUDIO-02", "CORE-10" ], - "status": "todo", + "status": "done", "risk": "H", "deliverable": "外部 audio 的同步策略、监听与源更新生命周期", "acceptance": "结构变化和缺陷修复分开记录;原 API/事件/资源生命周期通过", - "evidence": [] + "evidence": [ + "changes/2026-09-12-PKG-AUDIO-03-lifecycle.md", + "baselines/audio-lifecycle-validation.json" + ] }, { "id": "PKG-AUDIO-04", diff --git a/test/audio-track.test.js b/test/audio-track.test.js index 92bf5ea87..52b6cb620 100644 --- a/test/audio-track.test.js +++ b/test/audio-track.test.js @@ -136,7 +136,7 @@ for (const { name, factory } of implementations) { left.audio.calls.length = 0 right.audio.calls.length = 0 first.art.emit('destroy') - assert.deepEqual(left.audio.calls, [['pause'], ['src', ''], ['load']]) + assert.deepEqual(left.audio.calls, [['pause'], name.startsWith('published') ? ['src', ''] : ['removeAttribute', 'src'], ['load']]) assert.deepEqual(right.audio.calls, []) second.art.currentTime = 2 second.art.emit('seek') @@ -145,6 +145,105 @@ for (const { name, factory } of implementations) { } const historical = implementations.find(item => item.name === 'published-main').factory +for (const { name, factory: candidate } of implementations.filter(item => !item.name.startsWith('published'))) { + test(`${name}: closed callbacks and retained update cannot revive resources`, (t) => { + const { art, listeners } = audioHost(t) + const plugin = candidate({ url: 'audio.aac' })(art) + const retained = [...listeners.values()].flatMap(set => [...set]) + art.emit('destroy') + assert.equal([...listeners.values()].reduce((count, set) => count + set.size, 0), 0) + plugin.audio.calls.length = 0 + Object.defineProperty(art, 'playing', { get() { + throw new Error('Closed host read') + } }) + assert.equal(plugin.update({ url: 'revived.aac' }), undefined) + for (const callback of retained) + callback() + assert.deepEqual(plugin.audio.calls, []) + }) + + test(`${name}: pending playback rejection becomes inert after destroy`, async (t) => { + const { art, setPlay, warnings } = audioHost(t) + let reject + const pending = new Promise((resolve, fail) => { + reject = fail + }) + setPlay(() => pending) + candidate({ url: 'audio.aac' })(art) + art.emit('play').emit('destroy') + reject(new Error('Cancelled playback')) + await Promise.resolve() + assert.deepEqual(warnings, []) + }) + + test(`${name}: unsubscription failure does not prevent remaining cleanup`, (t) => { + const { art } = audioHost(t) + const plugin = candidate({ url: 'audio.aac' })(art) + const off = art.off + const failure = new Error('Controlled off failure') + t.mock.method(art, 'off', (event, callback) => { + if (event === 'play') + throw failure + return off(event, callback) + }) + plugin.audio.calls.length = 0 + assert.throws(() => art.emit('destroy'), error => error === failure) + assert.deepEqual(plugin.audio.calls, [['pause'], ['removeAttribute', 'src'], ['load']]) + plugin.audio.calls.length = 0 + art.emit('play') + plugin.update({ url: 'revived.aac' }) + assert.deepEqual(plugin.audio.calls, []) + }) + + test(`${name}: partial subscription failure releases the media and original error`, (t) => { + const { art, instances, listeners } = audioHost(t) + const on = art.on + const failure = new Error('Controlled on failure') + t.mock.method(art, 'on', (event, callback) => { + on(event, callback) + if (event === 'pause') + throw failure + return art + }) + assert.throws(() => candidate({ url: 'audio.aac' })(art), error => error === failure) + assert.deepEqual(instances[0].calls.slice(-3), [['pause'], ['removeAttribute', 'src'], ['load']]) + assert.equal([...listeners.values()].reduce((count, set) => count + set.size, 0), 0) + }) + + test(`${name}: source initialization and pause failures still attempt media release`, (t) => { + const failure = new Error('Controlled src failure') + const { art, instances } = audioHost(t, (audio) => { + Object.defineProperty(audio, 'src', { + get: () => '', + set() { + throw failure + }, + }) + audio.pause = () => { + audio.calls.push(['pause']) + throw new Error('Secondary cleanup failure') + } + }) + assert.throws(() => candidate({ url: 'audio.aac' })(art), error => error === failure) + assert.deepEqual(instances[0].calls.slice(-3), [['pause'], ['removeAttribute', 'src'], ['load']]) + }) + + test(`${name}: native pause/end/seek synchronize audio without public pause calls`, (t) => { + const { art } = audioHost(t) + const { audio } = candidate({ url: 'audio.aac' })(art) + audio.calls.length = 0 + art.emit('video:pause').emit('video:ended').emit('video:seeking') + assert.deepEqual(audio.calls, [['pause'], ['pause'], ['pause']]) + art.currentTime = 3 + art.emit('video:seeked') + assert.equal(audio.currentTime, 3) + art.playing = true + art.currentTime = 4 + art.emit('video:playing') + assert.deepEqual(audio.calls.slice(-2), [['currentTime', 4], ['play']]) + }) +} + test('published defect AUDIO-LIFE-01: retained update reloads audio after destroy', (t) => { const { art, listeners } = audioHost(t) const plugin = historical({ url: 'audio.aac' })(art) diff --git a/test/browser/audio-track.spec.js b/test/browser/audio-track.spec.js index 384989862..cbab45bd2 100644 --- a/test/browser/audio-track.spec.js +++ b/test/browser/audio-track.spec.js @@ -37,8 +37,8 @@ test.beforeAll(async () => { const bytes = readMember(await ensureArchive(release), member) assert.equal(hash(bytes), release.files[member]) publishedCode = bytes.toString() - sourceCode = await compilePackage(release.name, 'umd') - evidence = { release, sourceSHA256: hash(sourceCode), audio: { sha256: hash(tone), bytes: tone.length, format: 'AAC mono 48000 Hz, 16 seconds, 440 Hz tone in MP4' }, wav: { sha256: hash(wav), bytes: wav.length, format: 'PCM16LE mono 16000 Hz, 16 seconds, integer square wave 200 Hz' }, scope: 'Source browser baseline; no physical device or installed package acceptance' } + sourceCode = process.env.ARTPLAYER_AUDIO_ARTIFACT ? fs.readFileSync(process.env.ARTPLAYER_AUDIO_ARTIFACT, 'utf8') : await compilePackage(release.name, 'umd') + evidence = { release, sourceSHA256: hash(sourceCode), candidate: process.env.ARTPLAYER_AUDIO_ARTIFACT || 'workspace source build', audio: { sha256: hash(tone), bytes: tone.length, format: 'AAC mono 48000 Hz, 16 seconds, 440 Hz tone in MP4' }, wav: { sha256: hash(wav), bytes: wav.length, format: 'PCM16LE mono 16000 Hz, 16 seconds, integer square wave 200 Hz' }, scope: 'Source or explicit artifact browser checks; no physical device or installed package acceptance' } }) test.afterEach(async ({ page }, testInfo) => { @@ -116,6 +116,31 @@ test('published AUDIO-LIFE-01: empty src cleanup produces a native media error', }) for (const core of ['published', 'candidate']) { + test(`${core} core + source audio: native pause/end stop audio and closed references stay inert`, async ({ page }, testInfo) => { + await openAudio(page, core, 'source', testInfo) + await page.locator('#play').click() + await expect.poll(() => page.evaluate(() => window.audioPlugin.audio.currentTime)).toBeGreaterThan(0.2) + await page.evaluate(() => window.art.video.pause()) + await expect.poll(() => page.evaluate(() => window.audioPlugin.audio.paused)).toBe(true) + await page.evaluate(() => { + window.art.video.currentTime = 4 + }) + await expect.poll(() => page.evaluate(() => window.audioPlugin.audio.currentTime)).toBeCloseTo(4, 1) + await page.evaluate(() => { + window.art.seek = 7.8 + window.art.play() + }) + await expect.poll(() => page.evaluate(() => window.art.video.ended)).toBe(true) + await expect.poll(() => page.evaluate(() => window.audioPlugin.audio.paused)).toBe(true) + await page.evaluate(() => window.art.destroy()) + await expect.poll(() => page.evaluate(() => window.audioPlugin.audio.networkState)).toBe(0) + expect(await page.evaluate(() => window.audioPlugin.audio.readyState)).toBe(0) + expect(await page.evaluate(() => window.audioPlugin.audio.error)).toBeNull() + await page.evaluate(() => window.audioPlugin.update({ url: '/test/audio-tone.m4a?source=revived' })) + expect(await page.evaluate(() => window.audioPlugin.audio.getAttribute('src'))).toBeNull() + expect(await page.evaluate(() => window.audioPlugin.audio.networkState)).toBe(0) + }) + test(`${core} core + published audio: native pause and end leave external audio playing`, async ({ page }, testInfo) => { await openAudio(page, core, 'published', testInfo) await page.locator('#play').click() @@ -181,7 +206,7 @@ for (const core of ['published', 'candidate']) { window.art.destroy() }) await expect.poll(() => page.evaluate(() => window.audioPlugin.audio.readyState)).toBe(0) - expect(await page.evaluate(() => window.audioPlugin.audio.getAttribute('src'))).toBe('') + expect(await page.evaluate(() => window.audioPlugin.audio.getAttribute('src'))).toBe(plugin === 'published' ? '' : null) expect(await page.evaluate(() => window.audioPlugin.audio.paused)).toBe(true) expect(await page.locator('.art-video-player').count()).toBe(0) }) @@ -200,7 +225,7 @@ for (const core of ['published', 'candidate']) { await page.evaluate(() => window.art.destroy()) await expect.poll(() => page.evaluate(() => window.audioPlugin.audio.readyState)).toBe(0) expect(await page.evaluate(() => window.audioPlugin.audio.paused)).toBe(true) - expect(await page.evaluate(() => window.audioPlugin.audio.getAttribute('src'))).toBe('') + expect(await page.evaluate(() => window.audioPlugin.audio.getAttribute('src'))).toBe(plugin === 'published' ? '' : null) }) } } diff --git a/test/helpers/audio-track.js b/test/helpers/audio-track.js index 8f9179b42..c2ef03d7e 100644 --- a/test/helpers/audio-track.js +++ b/test/helpers/audio-track.js @@ -1,10 +1,27 @@ import assert from 'node:assert/strict' import { Buffer } from 'node:buffer' import fs from 'node:fs' +import path from 'node:path' +import process from 'node:process' import vm from 'node:vm' import { ensureArchive, hash, readMember } from '../../refactor/scripts/releases.mjs' import { loadPackage } from './load.js' +async function readFactory(bytes, esm) { + if (esm) + return (await import(`data:text/javascript;base64,${Buffer.from(bytes).toString('base64')}`)).default + const context = { + module: { exports: {} }, + Audio: function Audio() { + return new globalThis.Audio() + }, + console, + } + context.exports = context.module.exports + vm.runInNewContext(bytes.toString(), context, { timeout: 5000 }) + return context.module.exports +} + export async function audioImplementations() { const { release } = JSON.parse(fs.readFileSync(new URL('../../refactor/baselines/audio-track-release.json', import.meta.url))) const archive = await ensureArchive(release) @@ -13,29 +30,16 @@ export async function audioImplementations() { const member = `package/${release.manifest[format].replace(/^\.\//, '')}` const bytes = readMember(archive, member) assert.equal(hash(bytes), release.files[member]) - let factory - if (format === 'module') { - factory = (await import(`data:text/javascript;base64,${Buffer.from(bytes).toString('base64')}`)).default - } - else { - const context = { - module: { exports: {} }, - Audio: function Audio() { - return new globalThis.Audio() - }, - console, - } - context.exports = context.module.exports - vm.runInNewContext(bytes.toString(), context, { timeout: 5000 }) - factory = context.module.exports - } + const factory = await readFactory(bytes, format === 'module') implementations.push({ name: `published-${format}`, factory }) } + for (const file of (process.env.ARTPLAYER_TEST_AUDIO || '').split(path.delimiter).filter(Boolean)) + implementations.push({ name: `artifact-${path.basename(file)}`, factory: await readFactory(fs.readFileSync(file), file.endsWith('.mjs')) }) return implementations } // Records plugin intent only. It does not decode media or emulate browser timing. -export function audioHost(t) { +export function audioHost(t, initialize = () => {}) { const instances = [] const warnings = [] let play = () => Promise.resolve() @@ -43,17 +47,20 @@ export function audioHost(t) { constructor() { instances.push(this) this.calls = [] + this.values = new Map() this.paused = true for (const [name, initial] of Object.entries({ src: '', preload: '', currentTime: 0, playbackRate: 1, volume: 1, muted: false })) { - let value = initial + this.values.set(name, initial) Object.defineProperty(this, name, { - get: () => value, + configurable: true, + get: () => this.values.get(name), set: (next) => { this.calls.push([name, next]) - value = next + this.values.set(name, next) }, }) } + initialize(this) } play() { @@ -63,6 +70,10 @@ export function audioHost(t) { pause() { this.calls.push(['pause']) } load() { this.calls.push(['load']) } + removeAttribute(name) { + this.calls.push(['removeAttribute', name]) + this.values.set(name, '') + } } const descriptor = Object.getOwnPropertyDescriptor(globalThis, 'Audio') Object.defineProperty(globalThis, 'Audio', { configurable: true, value: Audio })