ionic-chromecast 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/IonicChromecast.podspec +17 -0
- package/LICENSE +70 -0
- package/Package.swift +28 -0
- package/README.md +284 -0
- package/android/build.gradle +62 -0
- package/android/src/main/AndroidManifest.xml +15 -0
- package/android/src/main/java/com/fabianacevedo/ionicchromecast/CastOptionsProvider.java +32 -0
- package/android/src/main/java/com/fabianacevedo/ionicchromecast/IonicChromecast.java +184 -0
- package/android/src/main/java/com/fabianacevedo/ionicchromecast/IonicChromecastPlugin.java +131 -0
- package/android/src/main/res/.gitkeep +0 -0
- package/dist/docs.json +371 -0
- package/dist/esm/definitions.d.ts +77 -0
- package/dist/esm/definitions.js +2 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/web.d.ts +32 -0
- package/dist/esm/web.js +38 -0
- package/dist/esm/web.js.map +1 -0
- package/dist/plugin.cjs.js +52 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.js +55 -0
- package/dist/plugin.js.map +1 -0
- package/ios/Sources/IonicChromecastPlugin/IonicChromecast.swift +8 -0
- package/ios/Sources/IonicChromecastPlugin/IonicChromecastPlugin.swift +23 -0
- package/ios/Tests/IonicChromecastPluginTests/IonicChromecastPluginTests.swift +15 -0
- package/package.json +87 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
package com.fabianacevedo.ionicchromecast;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import com.getcapacitor.Logger;
|
|
5
|
+
import com.google.android.gms.cast.framework.CastContext;
|
|
6
|
+
import com.google.android.gms.cast.framework.CastOptions;
|
|
7
|
+
import com.google.android.gms.cast.framework.OptionsProvider;
|
|
8
|
+
import com.google.android.gms.cast.framework.SessionProvider;
|
|
9
|
+
import com.google.android.gms.cast.CastMediaControlIntent;
|
|
10
|
+
import java.util.List;
|
|
11
|
+
|
|
12
|
+
public class IonicChromecast {
|
|
13
|
+
|
|
14
|
+
private static final String TAG = "IonicChromecast";
|
|
15
|
+
private CastContext castContext;
|
|
16
|
+
private boolean isInitialized = false;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Initialize the Google Cast SDK with the provided receiver application ID
|
|
20
|
+
* @param context The application context
|
|
21
|
+
* @param receiverApplicationId The Cast receiver application ID
|
|
22
|
+
* @return true if initialization was successful
|
|
23
|
+
*/
|
|
24
|
+
public boolean initialize(Context context, String receiverApplicationId) {
|
|
25
|
+
try {
|
|
26
|
+
if (isInitialized) {
|
|
27
|
+
Logger.info(TAG, "Cast SDK already initialized");
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (receiverApplicationId == null || receiverApplicationId.isEmpty()) {
|
|
32
|
+
Logger.error(TAG, "Receiver Application ID is required");
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
Logger.info(TAG, "Initializing Cast SDK with receiver ID: " + receiverApplicationId);
|
|
37
|
+
|
|
38
|
+
// Initialize CastContext
|
|
39
|
+
castContext = CastContext.getSharedInstance(context);
|
|
40
|
+
|
|
41
|
+
if (castContext != null) {
|
|
42
|
+
isInitialized = true;
|
|
43
|
+
Logger.info(TAG, "Cast SDK initialized successfully");
|
|
44
|
+
return true;
|
|
45
|
+
} else {
|
|
46
|
+
Logger.error(TAG, "Failed to get CastContext");
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
} catch (Exception e) {
|
|
51
|
+
Logger.error(TAG, "Error initializing Cast SDK: " + e.getMessage(), e);
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Check if the Cast SDK is initialized
|
|
58
|
+
* @return true if initialized
|
|
59
|
+
*/
|
|
60
|
+
public boolean isInitialized() {
|
|
61
|
+
return isInitialized;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Get the CastContext instance
|
|
66
|
+
* @return CastContext or null if not initialized
|
|
67
|
+
*/
|
|
68
|
+
public CastContext getCastContext() {
|
|
69
|
+
return castContext;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public String echo(String value) {
|
|
73
|
+
Logger.info("Echo", value);
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Request a Cast session
|
|
79
|
+
* Shows the Cast dialog and starts a session if a device is selected
|
|
80
|
+
* @param context The application context
|
|
81
|
+
* @return true if session started, false otherwise
|
|
82
|
+
*/
|
|
83
|
+
public boolean requestSession(Context context) {
|
|
84
|
+
if (!isInitialized || castContext == null) {
|
|
85
|
+
Logger.error(TAG, "Cast SDK not initialized. Call initialize() first.");
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
// Show the Cast dialog
|
|
90
|
+
castContext.getSessionManager().startSession(false);
|
|
91
|
+
Logger.info(TAG, "Requested Cast session (dialog should appear)");
|
|
92
|
+
return true;
|
|
93
|
+
} catch (Exception e) {
|
|
94
|
+
Logger.error(TAG, "Error requesting Cast session: " + e.getMessage(), e);
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Check if there is an active Cast session
|
|
101
|
+
* @return true if session is active, false otherwise
|
|
102
|
+
*/
|
|
103
|
+
public boolean isSessionActive() {
|
|
104
|
+
if (!isInitialized || castContext == null) {
|
|
105
|
+
Logger.error(TAG, "Cast SDK not initialized. Call initialize() first.");
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
boolean active = castContext.getSessionManager().getCurrentCastSession() != null;
|
|
110
|
+
Logger.info(TAG, "Session active: " + active);
|
|
111
|
+
return active;
|
|
112
|
+
} catch (Exception e) {
|
|
113
|
+
Logger.error(TAG, "Error checking session status: " + e.getMessage(), e);
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Check if there are available Cast devices
|
|
120
|
+
* @return true if devices are available, false otherwise
|
|
121
|
+
*/
|
|
122
|
+
public boolean areDevicesAvailable() {
|
|
123
|
+
if (!isInitialized || castContext == null) {
|
|
124
|
+
Logger.error(TAG, "Cast SDK not initialized. Call initialize() first.");
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
// Check if there are any Cast devices discovered
|
|
129
|
+
int deviceCount = castContext.getDiscoveryManager().getCastDeviceCount();
|
|
130
|
+
boolean available = deviceCount > 0;
|
|
131
|
+
Logger.info(TAG, "Devices available: " + available + " (" + deviceCount + ")");
|
|
132
|
+
return available;
|
|
133
|
+
} catch (Exception e) {
|
|
134
|
+
Logger.error(TAG, "Error checking device availability: " + e.getMessage(), e);
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Load media on the Cast device
|
|
141
|
+
* @param url The media URL
|
|
142
|
+
* @param metadata Optional metadata (title, images, etc)
|
|
143
|
+
* @return true if media loaded successfully
|
|
144
|
+
*/
|
|
145
|
+
public boolean loadMedia(String url, MediaMetadataCompat metadata) {
|
|
146
|
+
if (!isInitialized || castContext == null) {
|
|
147
|
+
Logger.error(TAG, "Cast SDK not initialized. Call initialize() first.");
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
if (url == null || url.isEmpty()) {
|
|
152
|
+
Logger.error(TAG, "Media URL is required");
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
// Build Cast media info
|
|
156
|
+
com.google.android.gms.cast.MediaMetadata castMetadata = new com.google.android.gms.cast.MediaMetadata(com.google.android.gms.cast.MediaMetadata.MEDIA_TYPE_MOVIE);
|
|
157
|
+
if (metadata != null) {
|
|
158
|
+
if (metadata.getString(MediaMetadataCompat.METADATA_KEY_TITLE) != null)
|
|
159
|
+
castMetadata.putString(com.google.android.gms.cast.MediaMetadata.KEY_TITLE, metadata.getString(MediaMetadataCompat.METADATA_KEY_TITLE));
|
|
160
|
+
if (metadata.getString(MediaMetadataCompat.METADATA_KEY_ARTIST) != null)
|
|
161
|
+
castMetadata.putString(com.google.android.gms.cast.MediaMetadata.KEY_SUBTITLE, metadata.getString(MediaMetadataCompat.METADATA_KEY_ARTIST));
|
|
162
|
+
if (metadata.getString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI) != null)
|
|
163
|
+
castMetadata.addImage(new com.google.android.gms.cast.Image(android.net.Uri.parse(metadata.getString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI))));
|
|
164
|
+
// Add more metadata fields as needed
|
|
165
|
+
}
|
|
166
|
+
com.google.android.gms.cast.MediaInfo mediaInfo = new com.google.android.gms.cast.MediaInfo.Builder(url)
|
|
167
|
+
.setStreamType(com.google.android.gms.cast.MediaInfo.STREAM_TYPE_BUFFERED)
|
|
168
|
+
.setContentType(metadata != null && metadata.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI) != null ? metadata.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI) : "video/mp4")
|
|
169
|
+
.setMetadata(castMetadata)
|
|
170
|
+
.build();
|
|
171
|
+
com.google.android.gms.cast.framework.CastSession session = castContext.getSessionManager().getCurrentCastSession();
|
|
172
|
+
if (session == null || !session.isConnected()) {
|
|
173
|
+
Logger.error(TAG, "No active Cast session");
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
session.getRemoteMediaClient().load(mediaInfo, true, 0);
|
|
177
|
+
Logger.info(TAG, "Media loaded to Cast device: " + url);
|
|
178
|
+
return true;
|
|
179
|
+
} catch (Exception e) {
|
|
180
|
+
Logger.error(TAG, "Error loading media: " + e.getMessage(), e);
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
package com.fabianacevedo.ionicchromecast;
|
|
2
|
+
|
|
3
|
+
import com.getcapacitor.JSObject;
|
|
4
|
+
import com.getcapacitor.Plugin;
|
|
5
|
+
import com.getcapacitor.PluginCall;
|
|
6
|
+
import com.getcapacitor.PluginMethod;
|
|
7
|
+
import com.getcapacitor.annotation.CapacitorPlugin;
|
|
8
|
+
import androidx.media.MediaMetadataCompat;
|
|
9
|
+
|
|
10
|
+
@CapacitorPlugin(name = "IonicChromecast")
|
|
11
|
+
public class IonicChromecastPlugin extends Plugin {
|
|
12
|
+
|
|
13
|
+
private IonicChromecast implementation = new IonicChromecast();
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Initialize the Google Cast SDK
|
|
17
|
+
* This method must be called before using any other Cast functionality
|
|
18
|
+
*/
|
|
19
|
+
@PluginMethod
|
|
20
|
+
public void initialize(PluginCall call) {
|
|
21
|
+
String receiverApplicationId = call.getString("receiverApplicationId");
|
|
22
|
+
|
|
23
|
+
if (receiverApplicationId == null || receiverApplicationId.isEmpty()) {
|
|
24
|
+
call.reject("Receiver Application ID is required");
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
boolean success = implementation.initialize(getContext(), receiverApplicationId);
|
|
29
|
+
|
|
30
|
+
JSObject ret = new JSObject();
|
|
31
|
+
ret.put("success", success);
|
|
32
|
+
|
|
33
|
+
if (success) {
|
|
34
|
+
call.resolve(ret);
|
|
35
|
+
} else {
|
|
36
|
+
call.reject("Failed to initialize Cast SDK", ret);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@PluginMethod
|
|
41
|
+
public void echo(PluginCall call) {
|
|
42
|
+
String value = call.getString("value");
|
|
43
|
+
|
|
44
|
+
JSObject ret = new JSObject();
|
|
45
|
+
ret.put("value", implementation.echo(value));
|
|
46
|
+
call.resolve(ret);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Request a Cast session from JavaScript
|
|
51
|
+
*/
|
|
52
|
+
@PluginMethod
|
|
53
|
+
public void requestSession(PluginCall call) {
|
|
54
|
+
boolean success = implementation.requestSession(getContext());
|
|
55
|
+
JSObject ret = new JSObject();
|
|
56
|
+
ret.put("success", success);
|
|
57
|
+
if (success) {
|
|
58
|
+
ret.put("message", "Cast session requested. Dialog should appear.");
|
|
59
|
+
call.resolve(ret);
|
|
60
|
+
} else {
|
|
61
|
+
ret.put("message", "Failed to request Cast session. Make sure SDK is initialized.");
|
|
62
|
+
call.reject("Failed to request Cast session", ret);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Check if there is an active Cast session from JavaScript
|
|
68
|
+
*/
|
|
69
|
+
@PluginMethod
|
|
70
|
+
public void isSessionActive(PluginCall call) {
|
|
71
|
+
boolean active = implementation.isSessionActive();
|
|
72
|
+
JSObject ret = new JSObject();
|
|
73
|
+
ret.put("active", active);
|
|
74
|
+
if (active) {
|
|
75
|
+
ret.put("message", "There is an active Cast session.");
|
|
76
|
+
} else {
|
|
77
|
+
ret.put("message", "No active Cast session.");
|
|
78
|
+
}
|
|
79
|
+
call.resolve(ret);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Check if there are available Cast devices from JavaScript
|
|
84
|
+
*/
|
|
85
|
+
@PluginMethod
|
|
86
|
+
public void areDevicesAvailable(PluginCall call) {
|
|
87
|
+
boolean available = implementation.areDevicesAvailable();
|
|
88
|
+
JSObject ret = new JSObject();
|
|
89
|
+
ret.put("available", available);
|
|
90
|
+
if (available) {
|
|
91
|
+
ret.put("message", "There are Cast devices available.");
|
|
92
|
+
} else {
|
|
93
|
+
ret.put("message", "No Cast devices available.");
|
|
94
|
+
}
|
|
95
|
+
call.resolve(ret);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Load media on the Cast device from JavaScript
|
|
100
|
+
*/
|
|
101
|
+
@PluginMethod
|
|
102
|
+
public void loadMedia(PluginCall call) {
|
|
103
|
+
String url = call.getString("url");
|
|
104
|
+
JSObject metadataObj = call.getObject("metadata");
|
|
105
|
+
MediaMetadataCompat metadata = null;
|
|
106
|
+
if (metadataObj != null) {
|
|
107
|
+
MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder();
|
|
108
|
+
if (metadataObj.has("title")) builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, metadataObj.getString("title"));
|
|
109
|
+
if (metadataObj.has("subtitle")) builder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, metadataObj.getString("subtitle"));
|
|
110
|
+
if (metadataObj.has("images")) {
|
|
111
|
+
// Only use the first image for now
|
|
112
|
+
String img = metadataObj.getJSONArray("images").optString(0, null);
|
|
113
|
+
if (img != null) builder.putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, img);
|
|
114
|
+
}
|
|
115
|
+
if (metadataObj.has("studio")) builder.putString(MediaMetadataCompat.METADATA_KEY_AUTHOR, metadataObj.getString("studio"));
|
|
116
|
+
if (metadataObj.has("contentType")) builder.putString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI, metadataObj.getString("contentType"));
|
|
117
|
+
if (metadataObj.has("duration")) builder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, metadataObj.getLong("duration"));
|
|
118
|
+
metadata = builder.build();
|
|
119
|
+
}
|
|
120
|
+
boolean success = implementation.loadMedia(url, metadata);
|
|
121
|
+
JSObject ret = new JSObject();
|
|
122
|
+
ret.put("success", success);
|
|
123
|
+
if (success) {
|
|
124
|
+
ret.put("message", "Media sent to Cast device.");
|
|
125
|
+
call.resolve(ret);
|
|
126
|
+
} else {
|
|
127
|
+
ret.put("message", "Failed to send media. Check session and device.");
|
|
128
|
+
call.reject("Failed to send media", ret);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
File without changes
|
package/dist/docs.json
ADDED
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
{
|
|
2
|
+
"api": {
|
|
3
|
+
"name": "IonicChromecastPlugin",
|
|
4
|
+
"slug": "ionicchromecastplugin",
|
|
5
|
+
"docs": "",
|
|
6
|
+
"tags": [],
|
|
7
|
+
"methods": [
|
|
8
|
+
{
|
|
9
|
+
"name": "initialize",
|
|
10
|
+
"signature": "(options: InitializeOptions) => Promise<{ success: boolean; }>",
|
|
11
|
+
"parameters": [
|
|
12
|
+
{
|
|
13
|
+
"name": "options",
|
|
14
|
+
"docs": "",
|
|
15
|
+
"type": "InitializeOptions"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"returns": "Promise<{ success: boolean; }>",
|
|
19
|
+
"tags": [],
|
|
20
|
+
"docs": "Initialize the Google Cast SDK\nMust be called before any other Cast operations",
|
|
21
|
+
"complexTypes": [
|
|
22
|
+
"InitializeOptions"
|
|
23
|
+
],
|
|
24
|
+
"slug": "initialize"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "echo",
|
|
28
|
+
"signature": "(options: { value: string; }) => Promise<{ value: string; }>",
|
|
29
|
+
"parameters": [
|
|
30
|
+
{
|
|
31
|
+
"name": "options",
|
|
32
|
+
"docs": "",
|
|
33
|
+
"type": "{ value: string; }"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"returns": "Promise<{ value: string; }>",
|
|
37
|
+
"tags": [],
|
|
38
|
+
"docs": "",
|
|
39
|
+
"complexTypes": [],
|
|
40
|
+
"slug": "echo"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "requestSession",
|
|
44
|
+
"signature": "() => Promise<RequestSessionResult>",
|
|
45
|
+
"parameters": [],
|
|
46
|
+
"returns": "Promise<RequestSessionResult>",
|
|
47
|
+
"tags": [],
|
|
48
|
+
"docs": "Request a Cast session (Android only)",
|
|
49
|
+
"complexTypes": [
|
|
50
|
+
"RequestSessionResult"
|
|
51
|
+
],
|
|
52
|
+
"slug": "requestsession"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "isSessionActive",
|
|
56
|
+
"signature": "() => Promise<SessionStatusResult>",
|
|
57
|
+
"parameters": [],
|
|
58
|
+
"returns": "Promise<SessionStatusResult>",
|
|
59
|
+
"tags": [],
|
|
60
|
+
"docs": "Check if there is an active Cast session (Android only)",
|
|
61
|
+
"complexTypes": [
|
|
62
|
+
"SessionStatusResult"
|
|
63
|
+
],
|
|
64
|
+
"slug": "issessionactive"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "areDevicesAvailable",
|
|
68
|
+
"signature": "() => Promise<DevicesAvailableResult>",
|
|
69
|
+
"parameters": [],
|
|
70
|
+
"returns": "Promise<DevicesAvailableResult>",
|
|
71
|
+
"tags": [],
|
|
72
|
+
"docs": "Check if there are available Cast devices (Android only)",
|
|
73
|
+
"complexTypes": [
|
|
74
|
+
"DevicesAvailableResult"
|
|
75
|
+
],
|
|
76
|
+
"slug": "aredevicesavailable"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"name": "loadMedia",
|
|
80
|
+
"signature": "(options: LoadMediaOptions) => Promise<{ success: boolean; message?: string; }>",
|
|
81
|
+
"parameters": [
|
|
82
|
+
{
|
|
83
|
+
"name": "options",
|
|
84
|
+
"docs": "",
|
|
85
|
+
"type": "LoadMediaOptions"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"returns": "Promise<{ success: boolean; message?: string | undefined; }>",
|
|
89
|
+
"tags": [],
|
|
90
|
+
"docs": "Load media on the Cast device (Android only)",
|
|
91
|
+
"complexTypes": [
|
|
92
|
+
"LoadMediaOptions"
|
|
93
|
+
],
|
|
94
|
+
"slug": "loadmedia"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"name": "addListener",
|
|
98
|
+
"signature": "(eventName: ChromecastEventType, listenerFunc: (event: ChromecastEvent) => void) => PluginListenerHandle",
|
|
99
|
+
"parameters": [
|
|
100
|
+
{
|
|
101
|
+
"name": "eventName",
|
|
102
|
+
"docs": "",
|
|
103
|
+
"type": "ChromecastEventType"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"name": "listenerFunc",
|
|
107
|
+
"docs": "",
|
|
108
|
+
"type": "(event: ChromecastEvent) => void"
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
"returns": "PluginListenerHandle",
|
|
112
|
+
"tags": [],
|
|
113
|
+
"docs": "Listen to Chromecast events (Android only)",
|
|
114
|
+
"complexTypes": [
|
|
115
|
+
"PluginListenerHandle",
|
|
116
|
+
"ChromecastEventType",
|
|
117
|
+
"ChromecastEvent"
|
|
118
|
+
],
|
|
119
|
+
"slug": "addlistenerchromecasteventtype-"
|
|
120
|
+
}
|
|
121
|
+
],
|
|
122
|
+
"properties": []
|
|
123
|
+
},
|
|
124
|
+
"interfaces": [
|
|
125
|
+
{
|
|
126
|
+
"name": "InitializeOptions",
|
|
127
|
+
"slug": "initializeoptions",
|
|
128
|
+
"docs": "",
|
|
129
|
+
"tags": [],
|
|
130
|
+
"methods": [],
|
|
131
|
+
"properties": [
|
|
132
|
+
{
|
|
133
|
+
"name": "receiverApplicationId",
|
|
134
|
+
"tags": [],
|
|
135
|
+
"docs": "The receiver application ID for Google Cast\nUse \"CC1AD845\" for the default media receiver",
|
|
136
|
+
"complexTypes": [],
|
|
137
|
+
"type": "string"
|
|
138
|
+
}
|
|
139
|
+
]
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"name": "RequestSessionResult",
|
|
143
|
+
"slug": "requestsessionresult",
|
|
144
|
+
"docs": "",
|
|
145
|
+
"tags": [],
|
|
146
|
+
"methods": [],
|
|
147
|
+
"properties": [
|
|
148
|
+
{
|
|
149
|
+
"name": "success",
|
|
150
|
+
"tags": [],
|
|
151
|
+
"docs": "",
|
|
152
|
+
"complexTypes": [],
|
|
153
|
+
"type": "boolean"
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"name": "message",
|
|
157
|
+
"tags": [],
|
|
158
|
+
"docs": "",
|
|
159
|
+
"complexTypes": [],
|
|
160
|
+
"type": "string | undefined"
|
|
161
|
+
}
|
|
162
|
+
]
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"name": "SessionStatusResult",
|
|
166
|
+
"slug": "sessionstatusresult",
|
|
167
|
+
"docs": "",
|
|
168
|
+
"tags": [],
|
|
169
|
+
"methods": [],
|
|
170
|
+
"properties": [
|
|
171
|
+
{
|
|
172
|
+
"name": "active",
|
|
173
|
+
"tags": [],
|
|
174
|
+
"docs": "",
|
|
175
|
+
"complexTypes": [],
|
|
176
|
+
"type": "boolean"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"name": "message",
|
|
180
|
+
"tags": [],
|
|
181
|
+
"docs": "",
|
|
182
|
+
"complexTypes": [],
|
|
183
|
+
"type": "string | undefined"
|
|
184
|
+
}
|
|
185
|
+
]
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"name": "DevicesAvailableResult",
|
|
189
|
+
"slug": "devicesavailableresult",
|
|
190
|
+
"docs": "",
|
|
191
|
+
"tags": [],
|
|
192
|
+
"methods": [],
|
|
193
|
+
"properties": [
|
|
194
|
+
{
|
|
195
|
+
"name": "available",
|
|
196
|
+
"tags": [],
|
|
197
|
+
"docs": "",
|
|
198
|
+
"complexTypes": [],
|
|
199
|
+
"type": "boolean"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"name": "message",
|
|
203
|
+
"tags": [],
|
|
204
|
+
"docs": "",
|
|
205
|
+
"complexTypes": [],
|
|
206
|
+
"type": "string | undefined"
|
|
207
|
+
}
|
|
208
|
+
]
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"name": "LoadMediaOptions",
|
|
212
|
+
"slug": "loadmediaoptions",
|
|
213
|
+
"docs": "",
|
|
214
|
+
"tags": [],
|
|
215
|
+
"methods": [],
|
|
216
|
+
"properties": [
|
|
217
|
+
{
|
|
218
|
+
"name": "url",
|
|
219
|
+
"tags": [],
|
|
220
|
+
"docs": "",
|
|
221
|
+
"complexTypes": [],
|
|
222
|
+
"type": "string"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"name": "metadata",
|
|
226
|
+
"tags": [],
|
|
227
|
+
"docs": "",
|
|
228
|
+
"complexTypes": [
|
|
229
|
+
"MediaMetadata"
|
|
230
|
+
],
|
|
231
|
+
"type": "MediaMetadata"
|
|
232
|
+
}
|
|
233
|
+
]
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"name": "MediaMetadata",
|
|
237
|
+
"slug": "mediametadata",
|
|
238
|
+
"docs": "",
|
|
239
|
+
"tags": [],
|
|
240
|
+
"methods": [],
|
|
241
|
+
"properties": [
|
|
242
|
+
{
|
|
243
|
+
"name": "title",
|
|
244
|
+
"tags": [],
|
|
245
|
+
"docs": "",
|
|
246
|
+
"complexTypes": [],
|
|
247
|
+
"type": "string | undefined"
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"name": "subtitle",
|
|
251
|
+
"tags": [],
|
|
252
|
+
"docs": "",
|
|
253
|
+
"complexTypes": [],
|
|
254
|
+
"type": "string | undefined"
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"name": "images",
|
|
258
|
+
"tags": [],
|
|
259
|
+
"docs": "",
|
|
260
|
+
"complexTypes": [],
|
|
261
|
+
"type": "string[] | undefined"
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"name": "studio",
|
|
265
|
+
"tags": [],
|
|
266
|
+
"docs": "",
|
|
267
|
+
"complexTypes": [],
|
|
268
|
+
"type": "string | undefined"
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"name": "contentType",
|
|
272
|
+
"tags": [],
|
|
273
|
+
"docs": "",
|
|
274
|
+
"complexTypes": [],
|
|
275
|
+
"type": "string | undefined"
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"name": "duration",
|
|
279
|
+
"tags": [],
|
|
280
|
+
"docs": "",
|
|
281
|
+
"complexTypes": [],
|
|
282
|
+
"type": "number | undefined"
|
|
283
|
+
}
|
|
284
|
+
]
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"name": "PluginListenerHandle",
|
|
288
|
+
"slug": "pluginlistenerhandle",
|
|
289
|
+
"docs": "",
|
|
290
|
+
"tags": [],
|
|
291
|
+
"methods": [],
|
|
292
|
+
"properties": [
|
|
293
|
+
{
|
|
294
|
+
"name": "remove",
|
|
295
|
+
"tags": [],
|
|
296
|
+
"docs": "",
|
|
297
|
+
"complexTypes": [],
|
|
298
|
+
"type": "() => Promise<void>"
|
|
299
|
+
}
|
|
300
|
+
]
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
"name": "ChromecastEvent",
|
|
304
|
+
"slug": "chromecastevent",
|
|
305
|
+
"docs": "",
|
|
306
|
+
"tags": [],
|
|
307
|
+
"methods": [],
|
|
308
|
+
"properties": [
|
|
309
|
+
{
|
|
310
|
+
"name": "type",
|
|
311
|
+
"tags": [],
|
|
312
|
+
"docs": "",
|
|
313
|
+
"complexTypes": [
|
|
314
|
+
"ChromecastEventType"
|
|
315
|
+
],
|
|
316
|
+
"type": "ChromecastEventType"
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"name": "data",
|
|
320
|
+
"tags": [],
|
|
321
|
+
"docs": "",
|
|
322
|
+
"complexTypes": [],
|
|
323
|
+
"type": "any"
|
|
324
|
+
}
|
|
325
|
+
]
|
|
326
|
+
}
|
|
327
|
+
],
|
|
328
|
+
"enums": [],
|
|
329
|
+
"typeAliases": [
|
|
330
|
+
{
|
|
331
|
+
"name": "ChromecastEventType",
|
|
332
|
+
"slug": "chromecasteventtype",
|
|
333
|
+
"docs": "",
|
|
334
|
+
"types": [
|
|
335
|
+
{
|
|
336
|
+
"text": "'sessionStarted'",
|
|
337
|
+
"complexTypes": []
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
"text": "'sessionEnded'",
|
|
341
|
+
"complexTypes": []
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"text": "'mediaLoaded'",
|
|
345
|
+
"complexTypes": []
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"text": "'mediaError'",
|
|
349
|
+
"complexTypes": []
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"text": "'deviceAvailable'",
|
|
353
|
+
"complexTypes": []
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
"text": "'deviceUnavailable'",
|
|
357
|
+
"complexTypes": []
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"text": "'volumeChanged'",
|
|
361
|
+
"complexTypes": []
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"text": "'playbackStatusChanged'",
|
|
365
|
+
"complexTypes": []
|
|
366
|
+
}
|
|
367
|
+
]
|
|
368
|
+
}
|
|
369
|
+
],
|
|
370
|
+
"pluginConfigs": []
|
|
371
|
+
}
|