From 9425b943dd56b3ca4789ed6a02a94c9ccab691da Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 4 Nov 2021 18:09:21 +0100 Subject: [PATCH] Add separate cast media entrypoint (with ES5) (#10527) --- build-scripts/bundle.js | 1 + build-scripts/gulp/entry-html.js | 18 +++++++++++++ cast/src/html/media.html.template | 45 +++++++++++++++++++++++++++++++ cast/src/media/entrypoint.ts | 25 +++++++++++++++++ 4 files changed, 89 insertions(+) create mode 100644 cast/src/html/media.html.template create mode 100644 cast/src/media/entrypoint.ts diff --git a/build-scripts/bundle.js b/build-scripts/bundle.js index c15e1ab1dc..2325d80bca 100644 --- a/build-scripts/bundle.js +++ b/build-scripts/bundle.js @@ -165,6 +165,7 @@ module.exports.config = { cast({ isProdBuild, latestBuild }) { const entry = { launcher: path.resolve(paths.cast_dir, "src/launcher/entrypoint.ts"), + media: path.resolve(paths.cast_dir, "src/media/entrypoint.ts"), }; if (latestBuild) { diff --git a/build-scripts/gulp/entry-html.js b/build-scripts/gulp/entry-html.js index 8627d61713..156d100cf9 100644 --- a/build-scripts/gulp/entry-html.js +++ b/build-scripts/gulp/entry-html.js @@ -154,6 +154,15 @@ gulp.task("gen-index-cast-dev", (done) => { contentReceiver ); + const contentMedia = renderCastTemplate("media", { + latestMediaJS: "/frontend_latest/media.js", + es5MediaJS: "/frontend_es5/media.js", + }); + fs.outputFileSync( + path.resolve(paths.cast_output_root, "media.html"), + contentMedia + ); + const contentFAQ = renderCastTemplate("launcher-faq", { latestLauncherJS: "/frontend_latest/launcher.js", es5LauncherJS: "/frontend_es5/launcher.js", @@ -192,6 +201,15 @@ gulp.task("gen-index-cast-prod", (done) => { contentReceiver ); + const contentMedia = renderCastTemplate("media", { + latestMediaJS: latestManifest["media.js"], + es5MediaJS: es5Manifest["media.js"], + }); + fs.outputFileSync( + path.resolve(paths.cast_output_root, "media.html"), + contentMedia + ); + const contentFAQ = renderCastTemplate("launcher-faq", { latestLauncherJS: latestManifest["launcher.js"], es5LauncherJS: es5Manifest["launcher.js"], diff --git a/cast/src/html/media.html.template b/cast/src/html/media.html.template new file mode 100644 index 0000000000..e8ad478488 --- /dev/null +++ b/cast/src/html/media.html.template @@ -0,0 +1,45 @@ + + + + + + + + + <%= renderTemplate('_js_base') %> + + + + + + + + diff --git a/cast/src/media/entrypoint.ts b/cast/src/media/entrypoint.ts new file mode 100644 index 0000000000..3648e8b318 --- /dev/null +++ b/cast/src/media/entrypoint.ts @@ -0,0 +1,25 @@ +import { CastReceiverContext } from "chromecast-caf-receiver/cast.framework"; + +const castContext = + cast.framework.CastContext.getInstance() as unknown as CastReceiverContext; + +const playerManager = castContext.getPlayerManager(); + +playerManager.setMessageInterceptor( + cast.framework.messages.MessageType.LOAD, + (loadRequestData) => { + const media = loadRequestData.media; + // Special handling if it came from Google Assistant + if (media.entity) { + media.contentId = media.entity; + media.streamType = cast.framework.messages.StreamType.LIVE; + media.contentType = "application/vnd.apple.mpegurl"; + // @ts-ignore + media.hlsVideoSegmentFormat = + cast.framework.messages.HlsVideoSegmentFormat.FMP4; + } + return loadRequestData; + } +); + +castContext.start();