Chromecast Custom Troubleshooting - SergeiGolos/wod-wiki GitHub Wiki
**
The Google Cast Software Development Kit (SDK) enables applications (Senders) to initiate and control playback or display of content on remote devices (Receivers). A common use case involves casting standard audio or video media streams. However, the SDK also supports casting custom applications, typically HTML5-based web pages, hosted at a developer-specified URL. This report addresses the query regarding why the Cast framework might appear to assume an audio casting intent when the developer's objective is to launch a custom HTML-based receiver application, identified by a specific Application ID and hosted URL. The analysis examines the Cast SDK architecture, the process of launching different receiver types, potential misconfigurations in sender applications, the role of metadata, and debugging strategies to clarify the conditions under which the framework might default to media-centric behavior or fail to launch the intended custom receiver.
The Google Cast ecosystem operates on a sender-receiver model.1
-
Sender Application: This is the application controlled by the user, running on a mobile device (Android, iOS) or a web browser (Chrome).1 The sender initiates Cast sessions, discovers available receivers, manages the connection, and sends commands (e.g., load media, send custom data) to the receiver.1
-
Receiver Application: This application runs on the Google Cast-enabled device (e.g., Chromecast, Android TV, smart speakers).1 It receives commands from the sender, displays content, and communicates status updates back to the sender.5
A critical component linking senders and receivers is the Application ID (App ID). This unique identifier is assigned when a developer registers their receiver application through the Google Cast SDK Developer Console.1 Its primary function is to ensure that a sender application connects only to its intended receiver application.1 When a sender initiates a session, it specifies the App ID of the receiver it wishes to launch.4 The Cast device uses this ID to locate and load the corresponding receiver code.9
The Cast SDK supports different types of Web Receiver applications 1:
-
Default Media Receiver (DMR): A pre-built, Google-hosted receiver for basic audio/video streaming.5 It requires no registration and uses a predefined, constant App ID (e.g., chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID for Web, CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID for Android).5 It offers no UI customization.5
-
Styled Media Receiver (SMR): Also pre-built and Google-hosted, designed for audio/video streaming, but allows UI customization via a developer-provided CSS file.5 It requires registration in the Developer Console to obtain a unique App ID.5
-
Custom Web Receiver: A completely custom HTML5/JavaScript application built and hosted by the developer.5 This offers maximum flexibility for displaying non-media content (e.g., dashboards, games, custom UI), handling complex logic, DRM, or specific media types not supported by the SMR.1 It requires registration to obtain a unique App ID and must be hosted at a specified URL (HTTPS required for published apps).6
The distinction between these types is crucial. Launching a session with the DMR's App ID will result in media-centric behavior, as that is its sole purpose. Launching a session with a Custom Receiver's App ID should load the developer's HTML page from the registered URL.6
Successfully launching a custom HTML-based receiver involves two key phases: registration and sender-side session initiation.
A. Registration via Developer Console:
Before a custom receiver can be launched, it must be registered using the Google Cast SDK Developer Console.6 This process involves:
-
Signing into the console (a one-time registration fee applies).6
-
Adding a new application and selecting "Custom Receiver" as the type.6
-
Providing essential details 6:
-
Name: A user-facing name for the application.
-
URL: The publicly accessible URL where the custom receiver's HTML page is hosted. This URL must use HTTPS when the application is published, although HTTP may be permissible during development.6 The URL cannot be localhost but can be an internal IP address during development.6
-
Optional settings for relay casting and audio-only device support.6
-
Saving the configuration, which generates and displays the unique Application ID.6 This ID is the critical link used by sender applications.6
-
Registering test devices (by serial number) in the console allows unpublished receivers to be loaded onto those specific devices for development and debugging.16 Published applications are available to all Cast devices.16
B. Sender Application Implementation:
The sender application (Web, Android, or iOS) initiates the Cast session by specifying the registered Custom Receiver's Application ID.
-
Web Sender: The receiverApplicationId is set within the CastOptions object passed to cast.framework.CastContext.getInstance().setOptions() during initialization.7
JavaScript
// Example Web Sender Initialization
window['__onGCastApiAvailable'] = function(isAvailable) {
if (isAvailable) {
cast.framework.CastContext.getInstance().setOptions({
receiverApplicationId: 'YOUR_CUSTOM_RECEIVER_APP_ID', // Replace with actual ID
autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED
});
}
}; -
Android Sender: The receiverApplicationId is specified within the CastOptions returned by an implementation of the OptionsProvider interface. This provider is declared in the AndroidManifest.xml.4
Java
// Example Android OptionsProvider
public class CastOptionsProvider implements OptionsProvider {
@Override
public CastOptions getCastOptions(Context context) {
return new CastOptions.Builder()
.setReceiverApplicationId("YOUR_CUSTOM_RECEIVER_APP_ID") // Replace with actual ID
//... other options
.build();
}
//... getAdditionalSessionProviders
}
The AndroidManifest.xml must then reference this provider 19:
XML
<meta-data
android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.yourcompany.yourapp.CastOptionsProvider" />
-
iOS Sender: The receiverApplicationID (or discoveryCriteria containing the ID) is set in the GCKCastOptions object used to initialize the GCKCastContext singleton, typically in the AppDelegate.8
Swift
// Example iOS AppDelegate Initialization
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let criteria = GCKDiscoveryCriteria(applicationID: "YOUR_CUSTOM_RECEIVER_APP_ID") // Replace with actual ID
let options = GCKCastOptions(discoveryCriteria: criteria)
GCKCastContext.setSharedInstanceWith(options)
//... other setup
return true
}
It is also possible to dynamically change the target App ID in iOS using specific session options, although this involves less direct mechanisms than Android's setReceiverApplicationId method.27
In all cases, correctly specifying the unique Application ID obtained during registration is paramount to launching the intended custom receiver.
The Cast SDK framework fundamentally differentiates between launching a receiver application and loading media content onto an already running receiver application.1
-
Application Launch: This is initiated by the sender requesting a session with a specific Application ID.9 The Cast device resolves this ID to the registered URL (for Custom/Styled receivers) or loads the Google-hosted code (for Default/Styled receivers).6 The primary goal here is to establish a communication channel between the sender and the newly launched (or joined) receiver application.4 For a custom receiver designed to display an HTML page without media playback capabilities, this launch sequence and subsequent custom message exchange might be the entirety of the interaction.
-
Media Loading: This is a subsequent action, typically performed after a session has been established.7 The sender constructs a MediaInfo object (containing metadata like content URL, content type, title, images) and sends a LoadRequest to the receiver via the active CastSession (e.g., using RemoteMediaClient on Android/iOS or CastSession.loadMedia on Web).7 This explicitly signals an intent to play media. Receivers designed for media playback (Default, Styled, or Custom receivers incorporating the element or media libraries) interpret this request and initiate playback.9
The framework itself does not inherently assume a media context simply because a session is launched. The intent is primarily determined by:
-
The Application ID used to launch the session (Default/Styled IDs imply media).
-
The subsequent messages sent by the sender (e.g., a LoadRequest message explicitly indicates media intent).
-
The capabilities and implementation of the receiver application itself (e.g., whether it includes the element or handles LOAD messages).9
Therefore, launching a custom receiver using its specific App ID should load the designated HTML page. If the sender then sends a loadMedia request, the receiver (if capable) or the framework components will react accordingly, entering a media playback state.
When a sender attempts to launch a custom HTML receiver but observes behavior suggesting an audio or media cast (like the Default Media Receiver launching, or media controls appearing unexpectedly), several factors could be responsible. The framework itself does not arbitrarily assume an audio context for all custom receivers; rather, specific configurations or actions trigger this behavior.
A. Incorrect Application ID Configuration
This is a frequent cause of unexpected behavior.
-
Using Default Media Receiver ID: The sender might be inadvertently configured with the App ID constant for the Default Media Receiver (e.g., chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID, CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID, kGCKDefaultMediaReceiverApplicationID) instead of the unique ID assigned to the custom receiver during registration.5 This directly instructs the framework to launch the DMR, which is inherently audio/video focused.
-
Typos or Incorrect Custom ID: A simple typographical error in the custom App ID within the sender's configuration (CastOptions, GCKCastOptions) will prevent the intended custom receiver from being found and launched.35 The session launch will likely fail with an error like TIMEOUT or RECEIVER_UNAVAILABLE.35 While this doesn't automatically launch the DMR, the failure might be misinterpreted by the developer.
-
Mismatched Registration: The App ID used in the sender must exactly match the one registered in the Developer Console for the specific custom receiver URL.6 Using an ID registered for a different receiver type (e.g., Styled) or an unregistered ID will fail the launch.
B. Inappropriate Use of Media Loading APIs (loadMedia)
Even if the correct custom receiver App ID is used to launch the session, sending a media load request afterwards signals media intent.
-
Sending loadMedia to a Non-Media Receiver: If the sender application, after successfully launching the custom HTML receiver (using the correct App ID), proceeds to call loadMedia (or equivalent platform methods like RemoteMediaClient.load), it explicitly tells the framework and receiver to handle a media item.7 A custom receiver not designed for media playback (i.e., not using or related APIs) might not handle this gracefully, but the sender framework itself will likely react to the media intent.
-
Triggering Media Controls: The appearance of the MiniController and ExpandedController widgets on the sender is typically tied to an active media session state, usually established after a successful loadMedia call.4 If these controls appear when only a custom HTML page launch was intended, it strongly suggests a loadMedia request was erroneously sent by the sender. For custom receivers that do not involve media playback, communication should rely on custom message channels, not media loading APIs.9
C. Ambiguous Sender Metadata or Messages
The data sent from the sender can influence how the receiver or framework behaves.
-
MediaInfo Object Content: When constructing a MediaInfo object (even if potentially misused in a custom message context rather than a loadMedia call), the contentType field is significant.7 If this field is set to an audio or video MIME type (e.g., audio/mp3, video/mp4, application/x-mpegURL), it clearly signals media content, even if the intent was just to pass data.42
-
customData Field: While the customData field within MediaInfo or LoadRequest allows passing arbitrary application-specific data 1, if this data is structured in a way that the custom receiver interprets as media instructions, it could lead to media-like behavior initiated by the receiver itself. However, the framework itself primarily keys off the explicit loadMedia command and standard MediaInfo properties for its core media handling.
D. Custom Receiver Implementation Factors
The code within the custom HTML receiver itself plays a role.
-
Including : If the custom receiver's HTML includes the element, it signals to the CAF framework that this receiver has media playback capabilities.9 Even if the sender doesn't explicitly send a loadMedia request, the presence of this element might initialize media-related components within the receiver framework, potentially leading to default UI behaviors or states associated with media playback.30 For a purely non-media custom receiver, this element should be omitted.41
-
Handling LOAD Messages: Custom receivers can intercept LOAD messages.30 If a custom receiver intercepts a LOAD message (perhaps sent erroneously by the sender) and attempts to process it in a way that involves audio/video elements or APIs, it will naturally exhibit media behavior.
-
Default Receiver State/UI: A basic custom receiver initializes the CastReceiverContext and calls start().9 Without further customization or message handling, it presents a default state. If the sender incorrectly triggers media-related framework components (e.g., via loadMedia), the receiver might display default media UI elements or states if not properly overridden or handled by the custom receiver logic.5
E. Session Launch Failures and Fallback Behavior
Understanding what happens when a launch fails is important.
-
No Automatic Fallback to DMR for Custom ID Failure: If the sender correctly specifies a custom App ID, but the receiver fails to launch (e.g., invalid URL, network error, CORS issue, HTTPS required but not used 6), the Cast framework does not automatically fall back to launching the Default Media Receiver.35 The session initiation will simply fail, usually indicated by an error callback on the sender (e.g., onSessionStartFailed, TIMEOUT, RECEIVER_UNAVAILABLE).35 The perception of fallback might arise if the developer, encountering failures with the custom ID, switches to testing with the DMR ID, which then succeeds.
-
Cast Connect Fallback: Android TV applications using Cast Connect have a specific fallback mechanism. If the native Android TV app is targeted but cannot be launched (e.g., not installed, or a LaunchRequestChecker returns false), the system can fall back to launching the registered Web Receiver associated with that App ID.1 This is specific to Cast Connect and differs from the standard Web Receiver launch process.
-
Session Resumption: The framework attempts automatic session resumption after disconnections.4 However, resumption logic relies on the originally established session's App ID and receiver type; it does not switch to a different receiver type (like the DMR) if resumption fails.54 The autoJoinPolicy setting influences how senders rejoin existing sessions, but it respects the App ID of the running session.7
F. Network and Environment Issues
Connectivity problems can prevent the custom receiver from loading, leading to launch failures.
-
Receiver URL Unreachable: The Cast device must be able to resolve and access the URL specified during registration.6 Firewalls, VPNs, complex enterprise network configurations, or incorrect DNS settings can block access.59 The receiver needs outbound internet access and specific inbound ports open (TCP 8008-8009, UDP 1-65535).59 AP Isolation must be disabled.59
-
CORS (Cross-Origin Resource Sharing): The server hosting the custom receiver HTML page and any resources (scripts, CSS, data APIs) loaded by that page must have appropriate CORS headers configured.9 Specifically, the Access-Control-Allow-Origin header must permit requests from the origin of the Cast device's browser environment. Incorrect CORS configuration is a common reason for receiver failures, especially when loading external resources or making API calls from the receiver JavaScript.47
-
HTTPS Requirement: Published receiver applications must be served over HTTPS.6 While the content loaded by the receiver can be HTTP, the receiver application itself must use HTTPS. Failure to comply can prevent loading. DRM-protected content often requires HTTPS for both the receiver and the media segments.68
-
Device Registration (Development): During development with an unpublished receiver, the specific Cast device's serial number must be registered in the Developer Console and associated with the developer account.16 The device also needs the "Send serial number to Google" option enabled.16 Failure to do this prevents the device from loading the unpublished receiver. A device reboot is often required after registration or changes.16
In summary, the appearance of audio/media casting behavior when targeting a custom HTML receiver is most likely due to sender-side misconfiguration (wrong App ID, inappropriate loadMedia calls) or receiver-side issues (incorrect implementation, hosting/network problems preventing launch) rather than an inherent assumption by the Cast SDK.
Troubleshooting issues where a custom HTML receiver launch behaves unexpectedly requires systematic debugging across the sender, receiver, and network layers.
A. Receiver-Side Debugging:
-
Chrome Remote Debugger: This is the primary tool for inspecting a running Web Receiver.65 Connect a Chrome browser on a computer (on the same network) to the Cast device's IP address on port 9222 (e.g., http://<receiver_ip>:9222).69 This requires the receiver application to be registered (even if unpublished) and the device to be registered for development.16
-
Console: Check for JavaScript errors during the receiver's HTML/JS loading and execution. Errors here can indicate problems with the receiver code itself, or failures to load resources.65 Look for messages like "Failed to load resource" or specific JS exceptions. Check for CORS errors when the receiver tries to fetch external data or scripts.65
-
Network Tab: Inspect network requests made by the receiver. Verify that the receiver's HTML, CSS, and JavaScript files are loading successfully (HTTP status 200). Check for 404 (Not Found) errors if the registered URL is incorrect or the files are not deployed properly.65 Examine requests for media segments or API calls made by the receiver for failures or CORS issues.65
-
DOM Inspection: Verify the HTML structure is as expected.74
-
CastDebugLogger API: Integrate CastDebugLogger within the receiver's JavaScript code for more detailed application-level logging.69 This allows logging custom messages, player events, and lifecycle events, which can be viewed in the Remote Debugger console or the Cast Command and Control (CaC) Tool overlay.69 Enable verbose logging for specific event categories.69
JavaScript
// Example enabling CastDebugLogger in receiver
const castDebugLogger = cast.debug.CastDebugLogger.getInstance();
const context = cast.framework.CastReceiverContext.getInstance();// Enable debug logger and show overlay
castDebugLogger.setEnabled(true);
castDebugLogger.showDebugLogs(true);// Log specific events
castDebugLogger.loggerLevelByEvents = {
'cast.framework.events.category.CORE': cast.framework.LoggerLevel.INFO,
'cast.framework.events.EventType.MEDIA_STATUS': cast.framework.LoggerLevel.DEBUG
};// Log custom messages
castDebugLogger.info('MyReceiverTag', 'Receiver starting...');context.start();
-
Receiver Caching: Chromecast devices cache receiver application data. If changes are made to the receiver code or its registration URL in the Developer Console, the Cast device must often be rebooted to clear the cache and fetch the updated version.16
B. Sender-Side Debugging:
-
Enable SDK Logging: Activate verbose logging for the Cast SDK on the sender platform (Android Logcat, Xcode Console, Chrome DevTools Console).8 Look for errors related to discovery, session initiation, connection, or message sending.
-
Verify Application ID: Log the applicationID being passed to setOptions (Web), CastOptionsProvider (Android), or GCKCastOptions (iOS) immediately before initialization to ensure the correct custom receiver ID is being used, not the Default Media Receiver ID or a typo.4
-
Monitor Session Callbacks: Implement and log the results from session lifecycle listeners/callbacks (SessionManagerListener on Android, GCKSessionManagerListener on iOS, CastContextEventType.SESSION_STATE_CHANGED on Web).4 Pay close attention to failure events like onSessionStartFailed (Android), sessionManager:didFailToStartSessionWithError: (iOS), or SESSION_FAILED state (Web), and log the associated error codes.11
-
Check Message Sending Results: If using custom message channels, log the success/failure callbacks of sendMessage methods to confirm messages are being sent successfully after the session is established.38
-
Inspect loadMedia Calls: Critically examine the sender code to ensure loadMedia (or platform equivalents) is not being called unintentionally after launching the custom receiver, especially if the receiver is not meant for media playback.4
C. Network and Environment Troubleshooting:
-
Basic Connectivity: Ping the Cast device's IP address from the sender device or another machine on the same network to verify basic reachability.59
-
Firewall/Router Configuration: Check firewall rules and router settings. Ensure TCP ports 8008-8009 and UDP ports 1-65535 are open for communication between sender and receiver segments.59 Disable AP/Client Isolation.59 Check for NAT or proxy issues that might interfere.59 Ensure the receiver can reach necessary external services (DNS, Google APIs, content hosts).59
-
Simplify Network: Test casting on a simpler network setup (e.g., a mobile hotspot connecting both sender and receiver) to rule out complex corporate network configurations, VPNs, or VLAN issues as the cause.59
-
CORS Verification: Use browser developer tools (Network tab) when accessing the receiver URL directly, or tools like curl with appropriate Origin headers, to verify that the hosting server returns the correct Access-Control-Allow-Origin headers for the receiver HTML and any resources it loads.64
-
HTTPS Verification: Use browser tools to confirm the receiver URL is served over valid HTTPS (not self-signed, unless specifically configured for testing) if required (i.e., for published apps or DRM).6
D. Development Tools and Resources:
-
Cast Command and Control (CaC) Tool: A web-based tool useful for emulating a sender.69 It allows developers to specify an App ID, connect to a device, launch the receiver, send LOAD requests, and view CastDebugLogger output.16 This helps isolate whether a launch problem lies with the sender implementation or the receiver/network itself.
-
Google Cast Issue Tracker: Search the public issue tracker for known bugs related to the Cast SDK versions, specific devices, or functionalities being used.36 Check for issues matching observed error codes or behaviors. File a detailed bug report if a new issue is suspected.77
-
Sample Applications: Compare sender and receiver implementations against official Google Cast sample apps (e.g., CastVideos, CastReceiver sample) to identify discrepancies in configuration or API usage.23
A systematic approach is essential. First, verify the receiver loads independently using the CaC tool and Chrome Remote Debugger. If successful, investigate the sender's configuration (App ID) and logic (avoiding loadMedia). If the receiver fails to load even with the CaC tool, focus on receiver code, hosting (URL, HTTPS, CORS), network connectivity, and device registration.
The perception that the Google Cast SDK "assumes" an audio casting scenario when launching a custom HTML receiver is generally inaccurate. The framework's behavior is deterministic, primarily driven by the Application ID provided by the sender and the subsequent messages exchanged. The appearance of media-centric behavior, such as the launch of the Default Media Receiver or the activation of sender-side media controls, typically stems from specific, identifiable causes rather than an arbitrary SDK assumption.
Summary of Findings:
-
Architecture: The Cast SDK clearly distinguishes between Senders (controllers) and Receivers (displayers), linked by a unique Application ID registered in the Developer Console.1 Different receiver types (Default, Styled, Custom) cater to different needs, with only Custom Receivers offering full control over non-media HTML content.5
-
Launch Mechanism: Launching a custom receiver requires the sender to explicitly use the correct, registered Application ID during session initialization.4 This action directs the Cast device to load the HTML page from the developer-specified URL.6
-
Launch vs. Load: Session initiation (keyed by App ID) is distinct from media loading (triggered by a loadMedia request containing MediaInfo).1 Sending loadMedia signals media intent, regardless of the receiver type initially launched.
-
Common Failure Points: The most probable reasons for unexpected media behavior include: using the Default Media Receiver's App ID instead of the custom one 5; the sender incorrectly sending a loadMedia request to a non-media custom receiver 4; issues with the custom receiver's hosting (incorrect URL, lack of HTTPS, CORS misconfiguration) preventing it from loading 6; or network configurations blocking communication.59
-
Fallback Behavior: The SDK does not automatically fall back to the Default Media Receiver if launching a specified custom receiver fails due to URL/hosting issues.35 The session launch simply fails. Fallback mechanisms exist primarily within Cast Connect.50
Addressing the "Audio Cast" Assumption:
The SDK does not inherently assume an audio context for custom HTML receivers. The observed behavior likely results from one or more of the following:
-
Explicit DMR Launch: The sender is configured with the DEFAULT_MEDIA_RECEIVER_APPLICATION_ID (or platform equivalent), directly instructing the framework to launch the media-centric Default Receiver.5
-
Media Intent Signaled: The sender correctly launches the custom receiver using its App ID but then sends a loadMedia request.7 This action explicitly puts the Cast session into a media playback state, potentially triggering default media UI elements on the sender (Mini/Expanded Controllers) 4 and receiver (if using or related APIs).9 The specific appearance might resemble audio casting if the contentType in the MediaInfo is audio-related or ambiguous, or if the receiver's default handling leans towards audio UI elements when presented with generic media requests.
-
Launch Failure Misinterpretation: The custom receiver fails to launch due to hosting, network, or registration issues.6 The resulting error state on the sender might be misinterpreted by the developer as the system defaulting to a different behavior.
Final Recommendations:
To ensure a custom HTML receiver launches and operates as intended, without being misinterpreted as an audio or media cast:
-
Verify Application ID: Double-check that the sender application is configured with the exact, unique Application ID obtained from registering the Custom Receiver in the Google Cast SDK Developer Console. Avoid using default media receiver constants.6
-
Use Appropriate Communication: For non-media custom receivers, use custom message channels (CastChannel, GCKGenericChannel, addCustomMessageListener/sendCustomMessage) to exchange data between sender and receiver.24 Avoid calling loadMedia or using RemoteMediaClient unless the custom receiver is explicitly designed to handle media playback.7
-
Ensure Receiver Accessibility: Confirm the custom receiver URL registered in the console is correct, publicly accessible, uses HTTPS (for published apps), and is hosted on a server with proper CORS headers configured to allow access from Cast devices.6
-
Implement Receiver Correctly: For non-media receivers, do not include the element.9 Ensure the receiver initializes CastReceiverContext and calls start().9 Implement listeners for custom message channels if needed.40
-
Employ Systematic Debugging: Utilize Chrome Remote Debugger for the receiver 69, enable verbose logging on the sender 8, check network configurations 59, and use the CaC Tool 69 to isolate the point of failure. Check the Cast Issue Tracker for known problems.81
By adhering to these practices, developers can reliably launch custom HTML receivers and avoid behavior that suggests an unintended media casting context.
-
Overview | Cast | Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/overview
-
DCR Chromecast Android SDK - Engineering Client Portal, accessed April 12, 2025, https://engineeringportal.nielsen.com/wiki/DCR_Chromecast_Android_SDK
-
DCR Chromecast browser SDK - Engineering Client Portal, accessed April 12, 2025, https://engineeringportal.nielsen.com/wiki/DCR_Chromecast_browser_SDK
-
Integrate Cast Into Your Android App - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/android_sender/integrate
-
Web Receiver Overview | Cast - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/web_receiver
-
Registration | Cast - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/registration
-
Integrate Cast SDK into Your Web Sender App - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/web_sender/integrate
-
Integrate Cast Into Your iOS App - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/ios_sender/integrate
-
Custom Web Receiver | Cast - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/web_receiver/basic
-
Glossary | Cast - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/glossary
-
CastMediaControlIntent | Google Play services, accessed April 12, 2025, https://developers.google.com/android/reference/com/google/android/gms/cast/CastMediaControlIntent
-
Google cast receiver sdk integration - android - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/47773897/google-cast-receiver-sdk-integration
-
Sign in - Google Accounts, accessed April 12, 2025, https://cast.google.com/publish
-
Developer Registration - Cast Developer Help - Google Help, accessed April 12, 2025, https://support.google.com/cast-developer/answer/4512496?hl=EN
-
Developer Registration - Cast Developer Help - Google Help, accessed April 12, 2025, https://support.google.com/cast-developer/answer/4512496?hl=en
-
CastCameraReceiver/README.md at master - GitHub, accessed April 12, 2025, https://github.com/googlecast/CastCameraReceiver/blob/master/README.md
-
CastReceiver shows how to develop a fully Cast Design Checklist compliant receiver with additional features. - GitHub, accessed April 12, 2025, https://github.com/googlecast/CastReceiver
-
Troubleshooting - React Native Google Cast, accessed April 12, 2025, https://react-native-google-cast.github.io/docs/getting-started/troubleshooting
-
Enable casting to Chromecast devices (Android) - JW Player, accessed April 12, 2025, https://docs.jwplayer.com/players/docs/android-enable-casting-to-chromecast-devices
-
Using custom receiver in cast with exoplayer · Issue #5458 - GitHub, accessed April 12, 2025, https://github.com/google/ExoPlayer/issues/5458
-
AndroidアプリにGoogle Cast機能を追加する - Qiita, accessed April 12, 2025, https://qiita.com/tomo1139/items/fea907958160f77760ef
-
Connecting from custom Sender applications | THEOdocs - THEO Technologies, accessed April 12, 2025, https://www.theoplayer.com/docs/theoplayer/how-to-guides/cast/chromecast/connecting-from-custom-sender-applications/
-
googlecast/CastVideos-ios: Reference iOS Sender w/ Framework API - GitHub, accessed April 12, 2025, https://github.com/googlecast/CastVideos-ios
-
GoogleApisForiOSComponents/docs/Google/Cast/GettingStarted.md at main - GitHub, accessed April 12, 2025, https://github.com/xamarin/GoogleApisForiOSComponents/blob/master/docs/Google/Cast/GettingStarted.md
-
Enable Chromecast on the Sender | THEOdocs - THEO Technologies, accessed April 12, 2025, https://www.theoplayer.com/docs/theoplayer/how-to-guides/cast/chromecast/enable-chromecast-on-the-sender/
-
GCKCastOptions Class - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/reference/ios/interface_g_c_k_cast_options
-
Question: How to change
applicationID
in Google Cast dynamically? · Issue #101 · googlecast/CastVideos-ios - GitHub, accessed April 12, 2025, https://github.com/googlecast/CastVideos-ios/issues/101 -
CastButton always disabled in React Native v0.73.2 #523 - GitHub, accessed April 12, 2025, https://github.com/react-native-google-cast/react-native-google-cast/issues/523
-
How to change
applicationID
in Google Cast dynamically? iOS SDK - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/65331067/how-to-change-applicationid-in-google-cast-dynamically-ios-sdk -
Add Core Features to Your Custom Web Receiver | Cast - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/web_receiver/core_features
-
DevBytes: Google Cast SDK for Android - YouTube, accessed April 12, 2025, https://www.youtube.com/watch?v=qEeNwIoXkhM
-
Cast Application Framework - Chrome Codelab | PDF | Android (Operating System) - Scribd, accessed April 12, 2025, https://www.scribd.com/document/354827603/Cast-Application-Framework-Chrome-Codelab
-
MediaLoadRequest - React Native Google Cast, accessed April 12, 2025, https://react-native-google-cast.github.io/docs/api/interfaces/medialoadrequest
-
Support Cast default media receiver app ID · Issue #10 · AnteWall/react-cast-sender - GitHub, accessed April 12, 2025, https://github.com/AnteWall/react-cast-sender/issues/10
-
Chromecast app is not working with my application ID - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/36462876/chromecast-app-is-not-working-with-my-application-id
-
Google Cast - Receiver Unavailable - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/21590556/google-cast-receiver-unavailable
-
Cast plugin for the Native SDK for Android, accessed April 12, 2025, https://sdks.support.brightcove.com/android/tv/cast-plugin-native-sdk-android.html
-
Sending messages from Sender to Custom Receiver with Chromecast receiver API V2, accessed April 12, 2025, https://stackoverflow.com/questions/23370019/sending-messages-from-sender-to-custom-receiver-with-chromecast-receiver-api-v2
-
Sending messages from/to Sender to/from Receiver | THEOdocs - THEO Technologies, accessed April 12, 2025, https://www.theoplayer.com/docs/theoplayer/how-to-guides/cast/chromecast/sending-messages-from-to-sender-to-from-receiver/
-
Class: CastReceiverContext - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/reference/web_receiver/cast.framework.CastReceiverContext
-
google cast - Chromecast custom receiver without media - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/22522632/chromecast-custom-receiver-without-media
-
chromecast-demo-receiver/tutorials/chromecast.md at master - GitHub, accessed April 12, 2025, https://github.com/EricssonBroadcastServices/chromecast-demo-receiver/blob/master/tutorials/chromecast.md
-
Google Cast SDK Release Notes, accessed April 12, 2025, https://developers.google.com/cast/docs/release-notes
-
Send custom metadata on a custom Chromecast receiver - Bitmovin Community, accessed April 12, 2025, https://community.bitmovin.com/t/send-custom-metadata-on-a-custom-chromecast-receiver/2172
-
Is there a way to disable the seeking bar of the google home app when casting?, accessed April 12, 2025, https://stackoverflow.com/questions/74631459/is-there-a-way-to-disable-the-seeking-bar-of-the-google-home-app-when-casting
-
Migrate to Web Receiver | Cast - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/migrate_v2/receiver
-
Smart Home CameraStream Trait Schema bookmark_border - Cloud-to-cloud | Google Home Developers, accessed April 12, 2025, https://developers.home.google.com/cloud-to-cloud/traits/camerastream
-
Custom receiver connection failed - android - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/29621040/custom-receiver-connection-failed
-
Android ChromeCast RuntimeException : Remote load failed. No local fallback found, accessed April 12, 2025, https://stackoverflow.com/questions/46678089/android-chromecast-runtimeexception-remote-load-failed-no-local-fallback-foun
-
Troubleshooting | Cast - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/android_tv_receiver/troubleshooting
-
Introducing Cast Connect: a better way to integrate Google Cast directly into your Android TV apps, accessed April 12, 2025, https://developers.googleblog.com/introducing-cast-connect-a-better-way-to-integrate-google-cast-directly-into-your-android-tv-apps/
-
Cast Connect - YouTube, accessed April 12, 2025, https://www.youtube.com/watch?v=3L-XjCf018s
-
Cast Console Duplication of Appilcation ID when saving [270427481] - Issue Tracker, accessed April 12, 2025, https://issuetracker.google.com/issues/270427481
-
Replacement for GCKSession.resume() in Google Cast iOS SDK 4.x? - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/48753991/replacement-for-gcksession-resume-in-google-cast-ios-sdk-4-x
-
CastSession | Google Play services, accessed April 12, 2025, https://developers.google.com/android/reference/com/google/android/gms/cast/framework/CastSession
-
Chromecast with the Native SDKs, accessed April 12, 2025, https://sdks.support.brightcove.com/features/chromecast-with-sdks.html
-
How does a sender app resume the session after being killed? - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/21147421/how-does-a-sender-app-resume-the-session-after-being-killed
-
Class: ApiConfig | Cast - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/reference/web_sender/chrome.cast.ApiConfig
-
Network requirements for cast moderator - Chrome Enterprise and Education Help, accessed April 12, 2025, https://support.google.com/chrome/a/answer/12256492?hl=en
-
Which ports need to be opened on the firewall for Chromecast to work? - Reddit, accessed April 12, 2025, https://www.reddit.com/r/Chromecast/comments/4oe5th/which_ports_need_to_be_opened_on_the_firewall_for/
-
[Issue]: Can connect to Chromecast, but playing any media throws an error #8457 - GitHub, accessed April 12, 2025, https://github.com/jellyfin/jellyfin/issues/8457
-
Network configuration for Chromecast - the Fortinet Community!, accessed April 12, 2025, https://community.fortinet.com/t5/Support-Forum/Network-configuration-for-Chromecast/m-p/61992
-
Set up and view CORS configurations | Cloud Storage, accessed April 12, 2025, https://cloud.google.com/storage/docs/using-cors
-
Cross-origin resource sharing (CORS) | Cloud Storage, accessed April 12, 2025, https://cloud.google.com/storage/docs/cross-origin
-
How to debug streams on Chromecast devices - Bitmovin Docs, accessed April 12, 2025, https://developer.bitmovin.com/playback/docs/how-to-debug-streams-on-chromecast-devices
-
Google Cast Custom Receiver CORS Header - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/49072661/google-cast-custom-receiver-cors-header
-
How to cast Live stream to Chromecast · Issue #58 - GitHub, accessed April 12, 2025, https://github.com/react-native-google-cast/react-native-google-cast/issues/58
-
Mixed content blocking in chrome cast receiver app - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/34063841/mixed-content-blocking-in-chrome-cast-receiver-app
-
Debugging Cast Receiver Apps - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/codelabs/cast-debug-logger
-
Unable to debug the Custom Receiver Application of Chromecast - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/26778782/unable-to-debug-the-custom-receiver-application-of-chromecast
-
How to launch a receiver app in Chrome once Chromecast device has been whitelisted?, accessed April 12, 2025, https://stackoverflow.com/questions/17911932/how-to-launch-a-receiver-app-in-chrome-once-chromecast-device-has-been-whitelist
-
Chromecast Google Cast SDK custom receiver is not getting detected - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/59281560/chromecast-google-cast-sdk-custom-receiver-is-not-getting-detected
-
Unable to connect my Chromecast with my custom receiver - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/69076607/unable-to-connect-my-chromecast-with-my-custom-receiver
-
DevBytes: Overview for Google Cast Receivers - YouTube, accessed April 12, 2025, https://www.youtube.com/watch?v=clhnfUMuhN8
-
Chrome cast custom receiver "Failed to cast. Please try again" - Stack Overflow, accessed April 12, 2025, https://stackoverflow.com/questions/66320727/chrome-cast-custom-receiver-failed-to-cast-please-try-again
-
The Chromecast 2's device authentication certificate has expired - Reddit, accessed April 12, 2025, https://www.reddit.com/r/Chromecast/comments/1j7lhrs/the_chromecast_2s_device_authentication/
-
Error Codes | Cast - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/web_receiver/error_codes
-
Use the IMA DAI SDK on Chromecast | Video Stitcher API Documentation - Google Cloud, accessed April 12, 2025, https://cloud.google.com/video-stitcher/docs/how-to/gam/vod/ima-sdk/cast
-
Use the IMA DAI SDK on Chromecast | Video Stitcher API Documentation - Google Cloud, accessed April 12, 2025, https://cloud.google.com/video-stitcher/docs/how-to/gam/live/ima-sdk/cast
-
Build a Custom Web Receiver | Cast - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/codelabs/cast-receiver
-
componentid:190205+ - Issue Tracker - Google, accessed April 12, 2025, https://issuetracker.google.com/issues?q=componentid%3A190205%2B
-
HLS On Shaka Player Migration | Cast - Google for Developers, accessed April 12, 2025, https://developers.google.com/cast/docs/web_receiver/shaka_migration
-
Google Home Developer Samples | Tools, accessed April 12, 2025, https://developers.home.google.com/samples
**