@24i/smartapps-bigscreen-rnv-build-engine 0.17.3 → 0.17.5-alpha.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/dist/src/scripts/releaseAllWithScheme.js +1 -1
- package/dist/src/sdks/sdk-androidtv/sdkAndroidtv.js +6 -2
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/bridge/BridgeFromJavaScript.kt +44 -0
- package/dist/templates/platforms/androidtv/project/app/src/main/java/com/twentyfouri/tvbridge/webview/viewmodel/WebViewModel.kt +11 -0
- package/package.json +1 -1
|
@@ -76,4 +76,4 @@ const startTimestamp = Date.now();
|
|
|
76
76
|
releaseAllWithScheme();
|
|
77
77
|
const msPerSecond = 1000;
|
|
78
78
|
const scriptTotalTimeInSeconds = Math.ceil((Date.now() - startTimestamp) / msPerSecond);
|
|
79
|
-
console.log(`
|
|
79
|
+
console.log(`releaseAllWithScheme: done in ${scriptTotalTimeInSeconds} second(s)!`);
|
|
@@ -59,8 +59,12 @@ const buildAndroidTVProject = async (c) => {
|
|
|
59
59
|
const taskFlavourName = capitalizeFirstLetter(flavourName);
|
|
60
60
|
const taskAssembleName = `assemble${taskFlavourName}${taskBuildType}`;
|
|
61
61
|
const taskBundleName = `bundle${taskFlavourName}${taskBuildType}`;
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
const cmd1 = `cd ${projectDir} && ${gradlew} --stacktrace ${taskAssembleName}`;
|
|
63
|
+
const cmd2 = `cd ${projectDir} && ${gradlew} --stacktrace ${taskBundleName}`;
|
|
64
|
+
console.log(`Running command: ${cmd1}`);
|
|
65
|
+
(0, child_process_1.execSync)(cmd1);
|
|
66
|
+
console.log(`Running command: ${cmd2}`);
|
|
67
|
+
(0, child_process_1.execSync)(cmd2);
|
|
64
68
|
fs.rmSync(tmpOutputDir, { recursive: true, force: true });
|
|
65
69
|
fs.mkdirSync(tmpOutputDir);
|
|
66
70
|
if (!fs.existsSync(outputDir)) {
|
|
@@ -282,6 +282,50 @@ class BridgeFromJavaScript(
|
|
|
282
282
|
viewModel.subtitleTrack?.let { toJson(it) } ?: DISABLED_SUBTITLE_TRACK
|
|
283
283
|
}
|
|
284
284
|
|
|
285
|
+
/*
|
|
286
|
+
Returns VIDEO track BITRATE, if not available returns null
|
|
287
|
+
*/
|
|
288
|
+
@JavascriptInterface
|
|
289
|
+
fun bridgeJavaScriptToAndroid_GetBitrate(): Int? = runBlocking("bridgeJavaScriptToAndroid_GetBitrate") {
|
|
290
|
+
viewModel.videoTrack?.bitrate
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/*
|
|
294
|
+
Returns VIDEO track RENDITION, if not available returns null
|
|
295
|
+
*/
|
|
296
|
+
@JavascriptInterface
|
|
297
|
+
fun bridgeJavaScriptToAndroid_GetRendition(): String? = runBlocking("bridgeJavaScriptToAndroid_GetRendition") {
|
|
298
|
+
viewModel.videoTrack?.run {
|
|
299
|
+
return@runBlocking "${width}x${height}${formatBitrate(bitrate)}"
|
|
300
|
+
}
|
|
301
|
+
null
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
private fun formatBitrate(bitrate: Int): String {
|
|
305
|
+
return when {
|
|
306
|
+
bitrate <= 0 -> ""
|
|
307
|
+
bitrate < 1e3 -> "@${bitrate}bps"
|
|
308
|
+
bitrate < 1e6 -> "@${(bitrate / 1e3).roundToInt()}Kbps"
|
|
309
|
+
else -> "@${(bitrate / 1e4).roundToInt() / 1e2}Mbps"
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/*
|
|
314
|
+
Returns AUDIO track CODEC, if not available returns null
|
|
315
|
+
*/
|
|
316
|
+
@JavascriptInterface
|
|
317
|
+
fun bridgeJavaScriptToAndroid_GetAudioCodec(): String? = runBlocking("bridgeJavaScriptToAndroid_GetAudioCodec") {
|
|
318
|
+
viewModel.audioTrack?.codec
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/*
|
|
322
|
+
Returns VIDEO track CODEC, if not available returns null
|
|
323
|
+
*/
|
|
324
|
+
@JavascriptInterface
|
|
325
|
+
fun bridgeJavaScriptToAndroid_GetVideoCodec(): String? = runBlocking("bridgeJavaScriptToAndroid_GetVideoCodec") {
|
|
326
|
+
viewModel.videoTrack?.codec
|
|
327
|
+
}
|
|
328
|
+
|
|
285
329
|
/*
|
|
286
330
|
Set the cookies to localstorage
|
|
287
331
|
*/
|
|
@@ -68,6 +68,8 @@ class WebViewModel @Inject constructor(
|
|
|
68
68
|
|
|
69
69
|
private var contentModel: ContentModel? = null
|
|
70
70
|
|
|
71
|
+
val videoTrack: VideoTrack?
|
|
72
|
+
get() = player?.selectedVideoTrack
|
|
71
73
|
val audioTrack: AudioTrack?
|
|
72
74
|
get() = player?.selectedAudioTrack
|
|
73
75
|
val subtitleTrack: TextTrack?
|
|
@@ -355,6 +357,12 @@ class WebViewModel @Inject constructor(
|
|
|
355
357
|
jsBridge.bridgeAndroidToJavaScript_ErrorEvent(MediaEventType.ERROR, "${event.error.message} - ${event.error.nativeCode}")
|
|
356
358
|
stopPlayer()
|
|
357
359
|
}
|
|
360
|
+
is LoadedMetadataEvent -> {
|
|
361
|
+
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.LOADEDMETADATA)
|
|
362
|
+
}
|
|
363
|
+
is CanPlayEvent -> {
|
|
364
|
+
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.CANPLAY)
|
|
365
|
+
}
|
|
358
366
|
is EndedEvent -> {
|
|
359
367
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.ENDED)
|
|
360
368
|
}
|
|
@@ -365,6 +373,9 @@ class WebViewModel @Inject constructor(
|
|
|
365
373
|
view?.setBlackCurtainVisibility(View.GONE)
|
|
366
374
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.PLAYING)
|
|
367
375
|
}
|
|
376
|
+
is SeekingEvent -> {
|
|
377
|
+
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.SEEKING)
|
|
378
|
+
}
|
|
368
379
|
is SeekedEvent -> {
|
|
369
380
|
jsBridge.bridgeAndroidToJavaScript_MediaEvent(MediaEventType.SEEKED)
|
|
370
381
|
}
|