Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision 08ab8adfb2c704f234c751e044723451d5a65e53)
+++ src/services/ActivityPubService.js	(revision 7a93fcf58c1b98f0813247a86370ba0278bd9f98)
@@ -3099,5 +3099,10 @@
     // player for PeerTube. Without one the card stays a thumbnail.
     const player = playback ? playerUrlFor(e.url) : null;
-    return player ? { ...e, 'shaer:playerUrl': player } : e;
+    if (player) return { ...e, 'shaer:playerUrl': player };
+    // The gate is shut and there IS something behind it. Saying so costs
+    // nothing (the card already shows a video thumbnail) and saves the child
+    // from tapping a card that will never answer: the app can explain instead
+    // of doing nothing. It stays a statement of fact, never a way in.
+    return playerUrlFor(e.url) ? { ...e, 'shaer:playable': true } : e;
   } catch { return undefined; }
 }
