mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-26 00:31:20 -08:00
refactor(mediabunny): [PKG-MB-04] isolate typed playback and readiness coordination
This commit is contained in:
1 parent
9af253a5a9
commit
5d0b128483
29 files changed
+2841
-726
No files matched your search
@@ -0,0 +1,728 @@
|
||||
{
|
||||
"task": "PKG-MB-04",
|
||||
"status": "done",
|
||||
"parentCommit": "9af253a5a9db9c10062f7552f4e084582d5f6e94",
|
||||
"sourceSha256LF": {
|
||||
"packages/artplayer-proxy-mediabunny/src/AudioEngine.d.ts": "2d59216f234173253b87e2b3ab8710efd25666f6cadbb2d1052b5c1cb829635a",
|
||||
"packages/artplayer-proxy-mediabunny/src/AudioEngine.js": "910d6831372e4895d55dec78010f281a199bc88f99735630a5a3b621f192ac35",
|
||||
"packages/artplayer-proxy-mediabunny/src/engine-ports.ts": "43a5b9277f2b52a537c522f1cf2a2c92ce4cfb1d2fb6c91e73519371a92940a2",
|
||||
"packages/artplayer-proxy-mediabunny/src/engine-types.ts": "857a61f1fa3531bd737626658981eaab1b83eb369266fb45528676b9f57a293a",
|
||||
"packages/artplayer-proxy-mediabunny/src/EventTarget.ts": "4cea57e59b0a1118744a55b0a87c1df28cb0d69c26c50f9275039fe7540c9720",
|
||||
"packages/artplayer-proxy-mediabunny/src/hls-selection.ts": "a8632c0ea7d0c59434de005eee81bbf8d1dea8ae73c690673b603e5d6fa3cfd6",
|
||||
"packages/artplayer-proxy-mediabunny/src/hls-state.ts": "ff9ffd742f9763349df1f50eac6b6bd488a80d05aaab8ca198f387f0d17d5e25",
|
||||
"packages/artplayer-proxy-mediabunny/src/index.js": "4e1be8937908ff6e6ef8a4e863e22b4468312cf31d66ac299322e475757773bb",
|
||||
"packages/artplayer-proxy-mediabunny/src/input.ts": "d25b1c4ee4aee358c86fd8c554b8b36bfc23fdbd3c27fa21d2cd7e812c98bf9c",
|
||||
"packages/artplayer-proxy-mediabunny/src/load-session.ts": "560fbd5935fc787bde5f413fcaa41b8829506179c5328ce3cb51e734bbba8cec",
|
||||
"packages/artplayer-proxy-mediabunny/src/m3u8.js": "4639f09e0c743dc2b24078f48ca1e58eaaedaa3f5e6b863583cbd4bc4a7d3142",
|
||||
"packages/artplayer-proxy-mediabunny/src/media.ts": "e745cd8e750e05d0fcfa4bc588f7eb5a5576f3be20f5e67b65b704f57d539ae9",
|
||||
"packages/artplayer-proxy-mediabunny/src/MediaBunnyEngine.ts": "d13bdd700399b57a4ff90a0fa9bdedf10206609e994ff07326a37c6838be135c",
|
||||
"packages/artplayer-proxy-mediabunny/src/playback.ts": "0512f6a1b253d754b6644266327e368e0e18cce1cf9a3af62b6747ed55d691f7",
|
||||
"packages/artplayer-proxy-mediabunny/src/preflight.ts": "d296234312f23b97a1e0a054f1d7dbbc988d5240c5fd5089c36df1677c7b7348",
|
||||
"packages/artplayer-proxy-mediabunny/src/readiness.ts": "9aa24b5e994006b45bda9eafad602785c3e0e334cef54ff45a4939e386c4aceb",
|
||||
"packages/artplayer-proxy-mediabunny/src/shim-frames.ts": "172b222f997a711c2cc7741f189f05127a4ac5099c1cbe2729e903b36b4ce24a",
|
||||
"packages/artplayer-proxy-mediabunny/src/shim-values.ts": "a93ee17e87cc7db24f4b02d866af8af206d3007d01def446906fb769c20de17d",
|
||||
"packages/artplayer-proxy-mediabunny/src/tracks.ts": "6da68530c1fc7105ab17ed742d87d93e84447e822e84386591f9c3e6d0bec733",
|
||||
"packages/artplayer-proxy-mediabunny/src/VideoEngine.d.ts": "172fd4d30fa98a3eaa540ac8e5b653ae321c4ad8f376f3954550e2298bff5a9d",
|
||||
"packages/artplayer-proxy-mediabunny/src/VideoEngine.js": "5ac862b0fd9c196dc6656f8908a214c1b3a0a53a7e85ff845d9068888831986b",
|
||||
"packages/artplayer-proxy-mediabunny/src/VideoShim.ts": "1fef3028a3937182c31503129655efdb88118ea0f6d3be96e9be99dcbcc5fdc7",
|
||||
"packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.js": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.legacy.js": "7c39173fdc56ce9089542191f8e0d731d825967244828e4a358d951421889cfc",
|
||||
"packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.mjs": "aed179b85002f5ddab3f26a02b20ad5e0fae203bc865cb0a241a003aa22c8a9e",
|
||||
"packages/artplayer-proxy-mediabunny/ARCHITECTURE.md": "9bd639cab075ac3e5c333b509c016614ad64e14fd58b3f308e0656e325662a43",
|
||||
"package.json": "f91ece4140c07c5bcec06556d088cd98b0d368471df7b129999e3239d5960334",
|
||||
"test/mediabunny-coordination.test.js": "1ce97e02492c0b85e041f3bf33b75ec9915af160d7fd7550bef84408e034cba9",
|
||||
"test/browser/mediabunny-inputs.spec.js": "561fbb9316691210c239831aa9f87ec5f2b6adaa5a7cde7b5830b721bd9d56de",
|
||||
"test/browser/mediabunny.spec.js": "59491aa2007e1816fb8561f3feaf4d149c74667994ed2632ea3d37cf10891364"
|
||||
},
|
||||
"node": {
|
||||
"total": 108,
|
||||
"coordinator": 40,
|
||||
"sameCoordinatorAssertionsOnPreviousMain": {
|
||||
"passed": 8,
|
||||
"failed": 32
|
||||
},
|
||||
"main": 72,
|
||||
"legacy": 72,
|
||||
"artifactScope": "Each 72-case command includes 68 candidate assertions and four frozen normal-event controls."
|
||||
},
|
||||
"browser": {
|
||||
"total": 39,
|
||||
"outcomes": {
|
||||
"native-input-playback-and-seek": 10,
|
||||
"trackless-rejected-before-decoder-setup": 3,
|
||||
"unsupported-capability-control": 5,
|
||||
"native-pending-stream-cancellation": 9,
|
||||
"native-synthetic-raf": 9,
|
||||
"native-mp4-playback-observed": 2,
|
||||
"verified-unsupported-capability-control": 1
|
||||
},
|
||||
"records": [
|
||||
{
|
||||
"project": "chromium",
|
||||
"browser": "153.0.8010.12",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "webm",
|
||||
"outcome": "native-input-playback-and-seek",
|
||||
"cleanup": {
|
||||
"audioContext": "closed",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"reentrantPlay": {
|
||||
"paused": true,
|
||||
"events": [
|
||||
"video:play",
|
||||
"video:pause"
|
||||
]
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "chromium",
|
||||
"browser": "153.0.8010.12",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "blob",
|
||||
"outcome": "native-input-playback-and-seek",
|
||||
"cleanup": {
|
||||
"audioContext": "closed",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "chromium",
|
||||
"browser": "153.0.8010.12",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "stream",
|
||||
"outcome": "native-input-playback-and-seek",
|
||||
"cleanup": {
|
||||
"audioContext": "closed",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": true
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "chromium",
|
||||
"browser": "153.0.8010.12",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "audio",
|
||||
"outcome": "native-input-playback-and-seek",
|
||||
"cleanup": {
|
||||
"audioContext": "closed",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "chromium",
|
||||
"browser": "153.0.8010.12",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "hls",
|
||||
"outcome": "native-input-playback-and-seek",
|
||||
"cleanup": {
|
||||
"audioContext": "closed",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "chromium",
|
||||
"browser": "153.0.8010.12",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "trackless",
|
||||
"outcome": "trackless-rejected-before-decoder-setup",
|
||||
"cleanup": {
|
||||
"audioContext": "not-created",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"browser": "155.0",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "webm",
|
||||
"outcome": "native-input-playback-and-seek",
|
||||
"cleanup": {
|
||||
"audioContext": "closed",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"reentrantPlay": {
|
||||
"paused": true,
|
||||
"events": [
|
||||
"video:play",
|
||||
"video:pause"
|
||||
]
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"browser": "155.0",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "blob",
|
||||
"outcome": "native-input-playback-and-seek",
|
||||
"cleanup": {
|
||||
"audioContext": "closed",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"browser": "155.0",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "stream",
|
||||
"outcome": "native-input-playback-and-seek",
|
||||
"cleanup": {
|
||||
"audioContext": "closed",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": true
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"browser": "155.0",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "audio",
|
||||
"outcome": "native-input-playback-and-seek",
|
||||
"cleanup": {
|
||||
"audioContext": "closed",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"browser": "155.0",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "hls",
|
||||
"outcome": "native-input-playback-and-seek",
|
||||
"cleanup": {
|
||||
"audioContext": "closed",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"browser": "155.0",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "trackless",
|
||||
"outcome": "trackless-rejected-before-decoder-setup",
|
||||
"cleanup": {
|
||||
"audioContext": "not-created",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"browser": "26.6",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "webm",
|
||||
"outcome": "unsupported-capability-control",
|
||||
"cleanup": {
|
||||
"audioContext": "not-created",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"browser": "26.6",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "blob",
|
||||
"outcome": "unsupported-capability-control",
|
||||
"cleanup": {
|
||||
"audioContext": "not-created",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"browser": "26.6",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "stream",
|
||||
"outcome": "unsupported-capability-control",
|
||||
"cleanup": {
|
||||
"audioContext": "not-created",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": true
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"browser": "26.6",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "audio",
|
||||
"outcome": "unsupported-capability-control",
|
||||
"cleanup": {
|
||||
"audioContext": "not-created",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"browser": "26.6",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "hls",
|
||||
"outcome": "unsupported-capability-control",
|
||||
"cleanup": {
|
||||
"audioContext": "not-created",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"browser": "26.6",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"input": "trackless",
|
||||
"outcome": "trackless-rejected-before-decoder-setup",
|
||||
"cleanup": {
|
||||
"audioContext": "not-created",
|
||||
"pendingFrames": 0,
|
||||
"streamCancelled": false
|
||||
},
|
||||
"scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance."
|
||||
},
|
||||
{
|
||||
"project": "chromium",
|
||||
"browser": "153.0.8010.12",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"ending": "destroy",
|
||||
"outcome": "native-pending-stream-cancellation",
|
||||
"cancellations": [
|
||||
"old"
|
||||
],
|
||||
"scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup."
|
||||
},
|
||||
{
|
||||
"project": "chromium",
|
||||
"browser": "153.0.8010.12",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"ending": "source",
|
||||
"outcome": "native-pending-stream-cancellation",
|
||||
"cancellations": [
|
||||
"old",
|
||||
"new"
|
||||
],
|
||||
"scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup."
|
||||
},
|
||||
{
|
||||
"project": "chromium",
|
||||
"browser": "153.0.8010.12",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"ending": "timeout",
|
||||
"outcome": "native-pending-stream-cancellation",
|
||||
"cancellations": [
|
||||
"old"
|
||||
],
|
||||
"scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup."
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"browser": "155.0",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"ending": "destroy",
|
||||
"outcome": "native-pending-stream-cancellation",
|
||||
"cancellations": [
|
||||
"old"
|
||||
],
|
||||
"scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup."
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"browser": "155.0",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"ending": "source",
|
||||
"outcome": "native-pending-stream-cancellation",
|
||||
"cancellations": [
|
||||
"old",
|
||||
"new"
|
||||
],
|
||||
"scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup."
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"browser": "155.0",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"ending": "timeout",
|
||||
"outcome": "native-pending-stream-cancellation",
|
||||
"cancellations": [
|
||||
"old"
|
||||
],
|
||||
"scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup."
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"browser": "26.6",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"ending": "destroy",
|
||||
"outcome": "native-pending-stream-cancellation",
|
||||
"cancellations": [
|
||||
"old"
|
||||
],
|
||||
"scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup."
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"browser": "26.6",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"ending": "source",
|
||||
"outcome": "native-pending-stream-cancellation",
|
||||
"cancellations": [
|
||||
"old",
|
||||
"new"
|
||||
],
|
||||
"scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup."
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"browser": "26.6",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"ending": "timeout",
|
||||
"outcome": "native-pending-stream-cancellation",
|
||||
"cancellations": [
|
||||
"old"
|
||||
],
|
||||
"scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup."
|
||||
},
|
||||
{
|
||||
"project": "chromium",
|
||||
"browser": "153.0.8010.12",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"scenario": "callback",
|
||||
"outcome": "native-synthetic-raf",
|
||||
"result": {
|
||||
"idType": "number",
|
||||
"calls": [
|
||||
{
|
||||
"owner": "first",
|
||||
"time": "number",
|
||||
"mediaTime": 0,
|
||||
"presentedFrames": 0
|
||||
}
|
||||
],
|
||||
"listeners": 0
|
||||
},
|
||||
"scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed."
|
||||
},
|
||||
{
|
||||
"project": "chromium",
|
||||
"browser": "153.0.8010.12",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"scenario": "destroy",
|
||||
"outcome": "native-synthetic-raf",
|
||||
"result": {
|
||||
"idType": "number",
|
||||
"calls": [],
|
||||
"listeners": 0
|
||||
},
|
||||
"scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed."
|
||||
},
|
||||
{
|
||||
"project": "chromium",
|
||||
"browser": "153.0.8010.12",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"scenario": "independent",
|
||||
"outcome": "native-synthetic-raf",
|
||||
"result": {
|
||||
"idType": "number",
|
||||
"calls": [
|
||||
{
|
||||
"owner": "second"
|
||||
}
|
||||
],
|
||||
"listeners": 0
|
||||
},
|
||||
"scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed."
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"browser": "155.0",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"scenario": "callback",
|
||||
"outcome": "native-synthetic-raf",
|
||||
"result": {
|
||||
"idType": "number",
|
||||
"calls": [
|
||||
{
|
||||
"owner": "first",
|
||||
"time": "number",
|
||||
"mediaTime": 0,
|
||||
"presentedFrames": 0
|
||||
}
|
||||
],
|
||||
"listeners": 0
|
||||
},
|
||||
"scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed."
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"browser": "155.0",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"scenario": "destroy",
|
||||
"outcome": "native-synthetic-raf",
|
||||
"result": {
|
||||
"idType": "number",
|
||||
"calls": [],
|
||||
"listeners": 0
|
||||
},
|
||||
"scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed."
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"browser": "155.0",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"scenario": "independent",
|
||||
"outcome": "native-synthetic-raf",
|
||||
"result": {
|
||||
"idType": "number",
|
||||
"calls": [
|
||||
{
|
||||
"owner": "second"
|
||||
}
|
||||
],
|
||||
"listeners": 0
|
||||
},
|
||||
"scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed."
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"browser": "26.6",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"scenario": "callback",
|
||||
"outcome": "native-synthetic-raf",
|
||||
"result": {
|
||||
"idType": "number",
|
||||
"calls": [
|
||||
{
|
||||
"owner": "first",
|
||||
"time": "number",
|
||||
"mediaTime": 0,
|
||||
"presentedFrames": 0
|
||||
}
|
||||
],
|
||||
"listeners": 0
|
||||
},
|
||||
"scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed."
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"browser": "26.6",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"scenario": "destroy",
|
||||
"outcome": "native-synthetic-raf",
|
||||
"result": {
|
||||
"idType": "number",
|
||||
"calls": [],
|
||||
"listeners": 0
|
||||
},
|
||||
"scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed."
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"browser": "26.6",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"scenario": "independent",
|
||||
"outcome": "native-synthetic-raf",
|
||||
"result": {
|
||||
"idType": "number",
|
||||
"calls": [
|
||||
{
|
||||
"owner": "second"
|
||||
}
|
||||
],
|
||||
"listeners": 0
|
||||
},
|
||||
"scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed."
|
||||
},
|
||||
{
|
||||
"project": "chromium",
|
||||
"browser": "153.0.8010.12",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"outcome": "native-mp4-playback-observed",
|
||||
"scope": "Identified published or candidate proxy with actual core5.4.0; native MP4 pixels/clock or explicitly unsupported Windows WebKit APIs. No HLS or long-run AV-sync acceptance."
|
||||
},
|
||||
{
|
||||
"project": "firefox",
|
||||
"browser": "155.0",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"outcome": "native-mp4-playback-observed",
|
||||
"scope": "Identified published or candidate proxy with actual core5.4.0; native MP4 pixels/clock or explicitly unsupported Windows WebKit APIs. No HLS or long-run AV-sync acceptance."
|
||||
},
|
||||
{
|
||||
"project": "webkit",
|
||||
"browser": "26.6",
|
||||
"platform": "win32",
|
||||
"implementation": "candidate-artifact",
|
||||
"sha256": "01b88c915804e1c42b90c8c37aa948029472c7f47f6eb3a266629ed945be9fb1",
|
||||
"outcome": "verified-unsupported-capability-control",
|
||||
"scope": "Identified published or candidate proxy with actual core5.4.0; native MP4 pixels/clock or explicitly unsupported Windows WebKit APIs. No HLS or long-run AV-sync acceptance."
|
||||
}
|
||||
],
|
||||
"report": "refactor/.cache/mb04-coordination-results/report.json",
|
||||
"reportSha256": "17dbd77680e414f0b27e94e278b24d46cd6cde443ed1bb96dcc2f3d285a6557f",
|
||||
"results": "refactor/.cache/mb04-coordination-results/results"
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"command": "yarn test:mediabunny",
|
||||
"result": "pass",
|
||||
"tests": 108
|
||||
},
|
||||
{
|
||||
"command": "main/legacy shim, load and coordinator tests",
|
||||
"result": "pass",
|
||||
"eachRun": 72
|
||||
},
|
||||
{
|
||||
"command": "same 40 coordinator assertions on adba8a3d main",
|
||||
"result": "expected historical failures",
|
||||
"passed": 8,
|
||||
"failed": 32
|
||||
},
|
||||
{
|
||||
"command": "package strict tsc and focused eslint --no-fix",
|
||||
"result": "pass",
|
||||
"productionModules": 16,
|
||||
"temporaryDecoderDeclarationBridges": 2
|
||||
},
|
||||
{
|
||||
"command": "yarn build artplayer-proxy-mediabunny",
|
||||
"result": "pass",
|
||||
"formats": [
|
||||
"main",
|
||||
"legacy",
|
||||
"esm"
|
||||
]
|
||||
},
|
||||
{
|
||||
"command": "four browser specs with built main",
|
||||
"result": "pass",
|
||||
"tests": 39
|
||||
},
|
||||
{
|
||||
"command": "yarn ci:check",
|
||||
"result": "pass",
|
||||
"tests": {
|
||||
"unit": 1114,
|
||||
"engineering": 14,
|
||||
"baseline": 141,
|
||||
"mainTotal": 1269,
|
||||
"repeatedContractExecutions": 44
|
||||
},
|
||||
"strictProductionTypeScriptFiles": 306,
|
||||
"log": "refactor/.cache/mb04-coordination-ci.log"
|
||||
},
|
||||
{
|
||||
"command": "built ESM default export and source function name",
|
||||
"result": "pass",
|
||||
"log": "refactor/.cache/mb04-coordination-esm.log"
|
||||
}
|
||||
],
|
||||
"limitations": [
|
||||
"AudioEngine and VideoEngine remain JS behind explicit temporary declarations; their late internal work is MB-05/06.",
|
||||
"Six Windows WebKit capability controls are not successful playback.",
|
||||
"Trackless false readiness is corrected; existing-track unsupported codec behavior remains a capability/decoder task.",
|
||||
"Synthetic RAF is not decoded frame accuracy; native sampled frames and short clocks are not long-run AV sync.",
|
||||
"HLS query source ownership is guarded; full concurrent selection/UI topology remains MB-07.",
|
||||
"No npm release or next-major approval is implied."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
# PKG-MB-04:VideoShim、事件与主协调器
|
||||
|
||||
任务通过完整CI后标记done,并立即以专用本地提交交付。前置shim检查点为9af253a5;本轮将
|
||||
MediaBunnyEngine.js实际迁移为严格TS,删除其临时声明桥。包内现在16个生产TS模块,
|
||||
AudioEngine/VideoEngine两个显式临时声明桥不计作实现迁移,分别留给MB-06/05。
|
||||
文件职责、状态归属、错误传播和继续维护入口见包内ARCHITECTURE.md。
|
||||
|
||||
## 行为修复与兼容性
|
||||
|
||||
- playback.ts独立管理播放意图和操作完成信号;pause能够阻止pending play或seek恢复,
|
||||
新操作使旧结果失效。取消可先结束公开Promise,底层晚结果仍被观察。
|
||||
- seek完成信号先于可选恢复播放,避免play等待seek而seek又等待play的死锁。
|
||||
play-pause-play共享尚未结束的audio resume,只有当前操作启动video和发送play/playing。
|
||||
- 每次就绪/播放事件前重新检查归属,允许用户在回调中同步切源、销毁或改变播放状态。
|
||||
正常play/pause、seek/resume和HLS replacement事件顺序由对照测试保持。
|
||||
- 两个metadata参与者均完成才发布一次metadata;无轨道容器提前报code 4,信息为
|
||||
`Input has no audio or video tracks.`,不再错误地readyState 4。有效媒体行为保持。
|
||||
- 活动play失败保留原始Promise拒绝并恢复paused;活动seek失败报告一次error并拒绝。
|
||||
currentTime同步setter观察无法返回的拒绝,直接调用engine.seek仍能捕获错误。
|
||||
- HLS旧source查询失败不污染新source,当前查询失败继续拒绝;replacement改变media对象
|
||||
后的活动错误也不能被误认为旧查询并吞掉。
|
||||
- destroy尽力执行所有input/audio/video释放步骤,之后保留首个异常;shim仍以finally
|
||||
清理事件和synthetic RAF。事件安静不等于底层解码器晚操作已完全停止。
|
||||
|
||||
工厂签名、公开声明、canvas描述符和同步/Promise接口保持。正常事件顺序、方法转发及
|
||||
描述符对照继续纳入验证。非正常行为差异是以上明确的竞态/错误修复,不宣称逐字节行为不变。
|
||||
旧createTimeout帮助方法保持原样,受管理的load路径不使用它;不要称所有手动调用的内部
|
||||
帮助方法也都具备自动取消。
|
||||
|
||||
## 验证
|
||||
|
||||
新增40项协调器测试,使用实际构建代理、受控异步音视频操作和实际SDK解析输入。
|
||||
同一断言对adba8a3d冻结main为8通过/32失败,候选全部通过。包专项108项通过。
|
||||
main与legacy各72项通过,其中68候选产物断言、4冻结正常事件对照。三格式构建通过。
|
||||
|
||||
初轮main产物测试有一条断言把新source合法waiting/loadstart误当作旧replacement事件。
|
||||
已缩小到旧seek/readiness结果并保留完整禁止列表,重新运行main/legacy均72通过;未修改
|
||||
生产代码来消除新来源合法事件。历史同断言仍32失败,修复回归证据没有被放宽掉。
|
||||
|
||||
浏览器报告及整个results归档后记录到mb-coordination-validation.json。39项候选检查区分
|
||||
12真实播放、9原生Stream取消、9synthetic RAF、6Windows WebKit能力对照及3无轨道拒绝。
|
||||
WebM在Chromium/Firefox另验证真实播放的play回调内pause后不会再发playing。
|
||||
此断言附属于现有播放用例,不增加测试数量。长播放、听觉输出和AV同步仍为MB-09。
|
||||
|
||||
## 后续边界
|
||||
|
||||
MB-05/06继续实际视频帧、解码器迭代器和Web Audio调度迁移;两处声明桥必须移除。
|
||||
MB-07继续HLS控件拓扑与并发选轨;MB-08完整公开类型/工厂兼容矩阵;MB-09/10完成组合、
|
||||
长播放、demo、真实安装包与许可通知。MB-LIFE-01/MB-READY-01保持open并更新已修复范围,
|
||||
既有轨道但不支持codec的路径仍需要解码器验证。此任务不构成npm发布验收。
|
||||
|
||||
最终完整CI1269项(1114单元+14工程+141基线)通过,另44重复契约;306生产TS。
|
||||
所有记录的源码/测试/产物及报告哈希已核验,三格式docs/compiled与dist一致。ESM默认工厂
|
||||
及实际源码名称artplayerProxyMediabunny保持;首次临时检查误写大小写,已按实际入口修正。
|
||||
回退本任务可revert专用提交;旧shim检查点9af253a5与更早adba8a3d基线仍可对照。
|
||||
未推送、打tag或发布;下一项PKG-MB-05处理视频迭代器、晚帧与seek释放。
|
||||
@@ -45,3 +45,12 @@ MB-03实施将input分离为六个strict TS模块,接入加载session、Range
|
||||
Chrome连接不可用时可使用内置浏览器;CLI自动化也按现有Playwright三引擎流程执行。
|
||||
保留report.json及整个results目录。受控输入不能替代真实解码,iframe不能替代原生Document PiP。
|
||||
VAST脚本VPN豁免不适用于本包。
|
||||
|
||||
## MB-04 coordinator implementation
|
||||
|
||||
VideoShim/EventTarget与主协调器已拆为严格TS模块,详情见
|
||||
[协调器变更](changes/2026-09-12-PKG-MB-04-coordination.md)及
|
||||
[验证记录](baselines/mb-coordination-validation.json)。包专项命令已包含新的协调器回归用例。
|
||||
无轨道容器由历史readyState 4改为code 4错误;有效媒体的正常顺序保持,重复就绪和
|
||||
失效操作结果被阻止。不要把synthetic RAF、受控竞态或Windows WebKit能力对照计为真实播放。
|
||||
音视频解码器仍通过两个显式声明桥连接,MB-05/06继续实际实现迁移和底层晚操作清理。
|
||||
+3
-3
@@ -4,7 +4,7 @@
|
||||
|
||||
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 222 项,范围 22 个包及工作区/示例。
|
||||
|
||||
状态:todo 114 / doing 8 / blocked 0 / done 100 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
状态:todo 114 / doing 7 / blocked 0 / done 101 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
|
||||
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
|
||||
|
||||
@@ -332,7 +332,7 @@
|
||||
| PKG-MB-01 | artplayer-proxy-mediabunny<br>核对 shim 与媒体契约 | BASE-05 | 全部 option、art.mediabunny、canvas/shim 属性及事件表 | 公开暴露成员和实际发布依赖/资源范围明确;核实 third-party.json 所记录依赖 MPL-2.0 元数据与实际 bundle 的许可/通知范围,不从根 MIT 推断 | H | done |
|
||||
| PKG-MB-02 | artplayer-proxy-mediabunny<br>建立真实媒体与事件基线 | PKG-MB-01, ENG-05, ENG-08 | MP4/WebM/HLS/Blob/Stream、seek/错误/轨道切换样本 | ready 事件顺序、音画同步、超时和释放可重跑 | H | done |
|
||||
| PKG-MB-03 | artplayer-proxy-mediabunny<br>整理 input 与加载取消 | PKG-MB-02, CORE-09 | input.js 源检测、输入资源、Range 与取消 | HLS 检测在 input 边界,旧来源类型和超时保持 | H | done |
|
||||
| PKG-MB-04 | artplayer-proxy-mediabunny<br>整理 VideoShim/EventTarget/Engine 协调 | PKG-MB-03, CORE-06, CORE-11 | shim 描述符、事件桥、加载状态和操作隔离 | 公开属性/同步异步返回与事件重入顺序保持 | H | doing |
|
||||
| PKG-MB-04 | artplayer-proxy-mediabunny<br>整理 VideoShim/EventTarget/Engine 协调 | PKG-MB-03, CORE-06, CORE-11 | shim 描述符、事件桥、加载状态和操作隔离 | 公开属性/同步异步返回与事件重入顺序保持 | H | done |
|
||||
| PKG-MB-05 | artplayer-proxy-mediabunny<br>整理视频解码、seek 和帧释放 | PKG-MB-04 | VideoEngine 调度、队列、晚帧处理和资源释放 | 暂停/seek/切源无旧帧覆盖,默认丢帧策略不变 | H | todo |
|
||||
| PKG-MB-06 | artplayer-proxy-mediabunny<br>整理音频解码、时钟与同步 | PKG-MB-04 | AudioEngine 时钟、缓冲和 AudioContext 归属 | AV sync、倍速、无音轨、静音/音量和暂停恢复通过 | H | todo |
|
||||
| PKG-MB-07 | artplayer-proxy-mediabunny<br>整理 HLS 配对轨道与 selector | PKG-MB-05, PKG-MB-06, CORE-14 | m3u8 配对、质量/音频选择及拓扑清理 | 实际选择高亮、切到无轨道来源清理、无重复 readiness | H | todo |
|
||||
@@ -523,5 +523,5 @@
|
||||
- PKG-MB-01: [记录](baselines/mb-release.json) [记录](baselines/mb-surface.json) [记录](baselines/mb-contract.md) [记录](baselines/mb-contract-validation.json) [记录](mb-validation.md) [记录](changes/2026-09-12-PKG-MB-01-contract.md)
|
||||
- PKG-MB-02: [记录](changes/2026-09-12-PKG-MB-02-checkpoint.md) [记录](baselines/mb-media-checkpoint.json) [记录](mb-validation.md) [记录](changes/2026-09-12-PKG-MB-02-baseline.md) [记录](baselines/mb-behavior-validation.json)
|
||||
- PKG-MB-03: [记录](changes/2026-09-12-PKG-MB-03-input.md) [记录](baselines/mb-input-validation.json)
|
||||
- PKG-MB-04: [记录](baselines/mb-coordination-source.json) [记录](changes/2026-09-12-PKG-MB-04-shim-checkpoint.md) [记录](baselines/mb-shim-checkpoint.json)
|
||||
- PKG-MB-04: [记录](baselines/mb-coordination-source.json) [记录](changes/2026-09-12-PKG-MB-04-shim-checkpoint.md) [记录](baselines/mb-shim-checkpoint.json) [记录](changes/2026-09-12-PKG-MB-04-coordination.md) [记录](baselines/mb-coordination-validation.json)
|
||||
- PKG-FACTORY-01: [记录](baselines/factory-assignment-gaps.json) [记录](baselines/factory-compatibility-proposals.json) [记录](factory-compatibility-decision.md) [记录](changes/2026-09-12-PKG-FACTORY-01-decision.md)
|
||||
@@ -1,5 +1,17 @@
|
||||
# 进度与证据
|
||||
|
||||
## PKG-MB-04完成:主协调器TS与操作隔离
|
||||
|
||||
MediaBunnyEngine实际迁移TS,并拆分playback/readiness/HLS查询职责;正常接口和事件顺序
|
||||
保持,修复旧play/seek覆盖、错误吞掉、重复就绪及无轨道假就绪。新增40项测试在旧main上
|
||||
8通过/32失败,候选全通过;包专项108通过、main/legacy各72通过。最终39项浏览器
|
||||
包括12真实播放、9Stream取消、9synthetic RAF、6能力对照及3无轨道拒绝;另在已有
|
||||
Chromium/Firefox播放用例内验证play回调同步pause后无playing。完整CI1269通过,
|
||||
另44重复契约,306生产TS;包内16生产TS和2个未迁移解码器声明桥明确区分。
|
||||
见[变更](changes/2026-09-12-PKG-MB-04-coordination.md)及[证据](baselines/mb-coordination-validation.json)。
|
||||
222项:101 done、7 doing、114 todo;立即专用本地提交,下一项MB-05视频帧资源。
|
||||
MB-LIFE-01/MB-READY-01剩余解码器/能力与组合范围仍open;不构成npm发布验收。
|
||||
|
||||
## 当前检查点:PKG-MB-04 VideoShim、事件与RAF资源
|
||||
|
||||
新增五个生产TS模块,保持shim/canvas布局和正常事件/Promise/属性契约;修复销毁后的RAF、
|
||||
|
||||
+8
-4
@@ -3648,7 +3648,7 @@
|
||||
"PKG-MB-07",
|
||||
"PKG-MB-09"
|
||||
],
|
||||
"compatibleResolution": "Reproduce pending operations and destroy/source-switch races before migrating each owner; preserve public event and promise behavior while preventing stale resource use. MB-02 now reproduces late load rejection and uncancelled waiting/loadstart timers after destroy in all three historical implementations using a controlled host. Other interleavings and full-core native behavior are not yet verified. Expanded MB-02 baseline reproduces play-after-pause/destroy, rejected-play false state, seek-after-destroy and retained successful-load timeout timers in all three actual historical implementations; Range and active-timeout normal controls remain separate. MB-03 candidate owns pending Input before track selection and cancels load/HEAD/timers on source replacement, timeout and destroy; source/main/legacy regressions pass. Pending play/seek, late decoder work and full readiness coordination remain MB-04/05/06, so this risk stays open. MB-04 shim checkpoint fixes synthetic RAF retention and terminal event-listener cleanup, including engine cleanup exceptions. Closing the event bridge does not prove pending engine operations stopped; coordination remains in progress.",
|
||||
"compatibleResolution": "Reproduce pending operations and destroy/source-switch races before migrating each owner; preserve public event and promise behavior while preventing stale resource use. MB-02 now reproduces late load rejection and uncancelled waiting/loadstart timers after destroy in all three historical implementations using a controlled host. Other interleavings and full-core native behavior are not yet verified. Expanded MB-02 baseline reproduces play-after-pause/destroy, rejected-play false state, seek-after-destroy and retained successful-load timeout timers in all three actual historical implementations; Range and active-timeout normal controls remain separate. MB-03 candidate owns pending Input before track selection and cancels load/HEAD/timers on source replacement, timeout and destroy; source/main/legacy regressions pass. Pending play/seek, late decoder work and full readiness coordination remain MB-04/05/06, so this risk stays open. MB-04 shim checkpoint fixes synthetic RAF retention and terminal event-listener cleanup, including engine cleanup exceptions. Closing the event bridge does not prove pending engine operations stopped; coordination remains in progress. MB-04 now guards play/seek/replacement completion, preserves explicit pause, observes stale failures and isolates reentrant event sequences. Decoder-internal late frames/audio and HLS UI races remain MB-05/06/07; risk stays open.",
|
||||
"closureCriteria": "Historical failing interleavings and candidate cancellation/cleanup pass with real media and event evidence, including long playback and track topology.",
|
||||
"status": "open",
|
||||
"evidence": [
|
||||
@@ -3660,7 +3660,9 @@
|
||||
"refactor/changes/2026-09-12-PKG-MB-02-baseline.md",
|
||||
"refactor/baselines/mb-behavior-validation.json",
|
||||
"refactor/changes/2026-09-12-PKG-MB-03-input.md",
|
||||
"refactor/changes/2026-09-12-PKG-MB-04-shim-checkpoint.md"
|
||||
"refactor/changes/2026-09-12-PKG-MB-04-shim-checkpoint.md",
|
||||
"refactor/changes/2026-09-12-PKG-MB-04-coordination.md",
|
||||
"refactor/baselines/mb-coordination-validation.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -3707,11 +3709,13 @@
|
||||
"PKG-MB-04",
|
||||
"PKG-MB-09"
|
||||
],
|
||||
"compatibleResolution": "Use explicit coordinated readiness and failure state, preserving valid event order while preventing duplicate or stale callbacks; evaluate trackless behavior separately from normal media.",
|
||||
"compatibleResolution": "Use explicit coordinated readiness and failure state, preserving valid event order while preventing duplicate or stale callbacks; evaluate trackless behavior separately from normal media. MB-04 coordinates metadata once, suppresses stale readiness and rejects trackless input before decoder setup. Existing-track unsupported-codec behavior and full native combinations remain MB-05/06/09; risk stays open.",
|
||||
"closureCriteria": "Candidate metadata/data/canplay ordering and counts pass normal, absent-track and failure interleavings in native browsers and controlled race tests.",
|
||||
"evidence": [
|
||||
"refactor/changes/2026-09-12-PKG-MB-02-baseline.md",
|
||||
"refactor/baselines/mb-behavior-validation.json"
|
||||
"refactor/baselines/mb-behavior-validation.json",
|
||||
"refactor/changes/2026-09-12-PKG-MB-04-coordination.md",
|
||||
"refactor/baselines/mb-coordination-validation.json"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
+4
-2
@@ -3460,14 +3460,16 @@
|
||||
"CORE-06",
|
||||
"CORE-11"
|
||||
],
|
||||
"status": "doing",
|
||||
"status": "done",
|
||||
"risk": "H",
|
||||
"deliverable": "shim 描述符、事件桥、加载状态和操作隔离",
|
||||
"acceptance": "公开属性/同步异步返回与事件重入顺序保持",
|
||||
"evidence": [
|
||||
"baselines/mb-coordination-source.json",
|
||||
"changes/2026-09-12-PKG-MB-04-shim-checkpoint.md",
|
||||
"baselines/mb-shim-checkpoint.json"
|
||||
"baselines/mb-shim-checkpoint.json",
|
||||
"changes/2026-09-12-PKG-MB-04-coordination.md",
|
||||
"baselines/mb-coordination-validation.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user