qhkr2z22o: Prefer direct mp4Url for feed video playback with hls fallback

This commit is contained in:
2026-10-19 17:11:33 -06:00
parent 9719b8dc83
commit 102f2f534a
5 changed files with 78 additions and 14 deletions
+17 -1
View File
@@ -144,7 +144,7 @@ describe("video transcoding", () => {
it("keeps a just-published video as a thumbnail with no hlsUrl", () => {
const [p] = vid(null);
expect(p.media).toEqual([{ kind: "video", src: "https://i/t.jpg", hlsUrl: null }]);
expect(p.media).toEqual([{ kind: "video", src: "https://i/t.jpg", hlsUrl: null, mp4Url: null }]);
});
it("keeps a video with neither thumbnail nor hlsUrl as a pending card", () => {
@@ -161,6 +161,22 @@ describe("video transcoding", () => {
expect(upgradeVideos(shown, vid(null))).toBe(shown);
});
it("captures mp4Url on the feed CDN and rejects other hosts", () => {
const mk = (u: unknown) =>
toCardPosts([post("9", "2026-10-19T10:00:00Z", { mediaItems: [{ mediaType: "video", thumbnailUrl: "https://i/t.jpg", mp4Url: u }] })])[0].media[0];
expect(mk("https://cdn.feed.sharedservices.vt.com/v.mp4").mp4Url).toBe("https://cdn.feed.sharedservices.vt.com/v.mp4");
expect(mk("https://evil.example/v.mp4").mp4Url).toBeNull();
expect(mk("http://cdn.feed.sharedservices.vt.com/v.mp4").mp4Url).toBeNull();
});
it("upgrades the thumbnail in place when only mp4Url appears", () => {
const withMp4 = toCardPosts([post("7", "2026-10-19T10:00:00Z", { mediaItems: [{ mediaType: "video", thumbnailUrl: "https://i/t.jpg", mp4Url: "https://cdn.feed.sharedservices.vt.com/v.mp4" }] })]);
const shown = vid(null);
const next = upgradeVideos(shown, withMp4);
expect(next[0].media[0].mp4Url).toContain("cdn.feed");
expect(upgradeVideos(next, vid(null))).toBe(next);
});
it("renders the thumbnail while transcoding and the player once hlsUrl is present", () => {
const html = render({ posts: vid(null) });
expect(html).toContain("https://i/t.jpg");