0.85.0: every approved Blender ident, Paradox with its tagline, and the covered show stopped to smooth the handover
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
# Orbit TV 0.85.0: every Blender ident, and a smoother handover
|
||||
|
||||
- Every channel's ident is now the approved Blender film, except VHS, Riot, Rewind and ToonZ, which stay 2D on purpose. Paradox's ident carries "Expect the unexpected" with a stronger logo shadow. Built by design/channels/build-idents.sh, re-encoded small and silent as before.
|
||||
- Size: idents and intro 17.2 MB, up from 13.7 MB. The app is 31.4 MB, up from 27.9 MB.
|
||||
- Handover: once the ident covers the show completely, the show's player is stopped, which frees its decoder and buffers for the ident and the next programme. Back during an ident now tunes the picture afresh instead of handing back a stopped stream.
|
||||
- Unit tests: 323 passed. Lint passed.
|
||||
@@ -9,8 +9,8 @@ android {
|
||||
applicationId = "tv.orbit.classic"
|
||||
minSdk = 26
|
||||
targetSdk = 36
|
||||
versionCode = 104
|
||||
versionName = "0.84.2-paradox-who"
|
||||
versionCode = 105
|
||||
versionName = "0.85.0-blender-idents-all"
|
||||
}
|
||||
buildFeatures { compose = true }
|
||||
compileOptions { sourceCompatibility = JavaVersion.VERSION_17; targetCompatibility = JavaVersion.VERSION_17 }
|
||||
|
||||
@@ -66,7 +66,7 @@ internal class HttpsEmbyTransport(internal val deviceId: String = UUID.randomUUI
|
||||
connection.connectTimeout = 10_000
|
||||
connection.readTimeout = request.readTimeoutMs ?: if (request.path == "/Sessions/Logout") 5_000 else 15_000
|
||||
connection.setRequestProperty("Accept", "application/json")
|
||||
connection.setRequestProperty("X-Emby-Authorization", "Emby Client=\"Orbit TV\", Device=\"Orbit TV\", DeviceId=\"$deviceId\", Version=\"0.84.2\"")
|
||||
connection.setRequestProperty("X-Emby-Authorization", "Emby Client=\"Orbit TV\", Device=\"Orbit TV\", DeviceId=\"$deviceId\", Version=\"0.85.0\"")
|
||||
request.token?.let { connection.setRequestProperty("X-Emby-Token", it) }
|
||||
if (request.method == "POST") {
|
||||
val bytes = request.body.orEmpty().toByteArray(Charsets.UTF_8)
|
||||
|
||||
@@ -233,6 +233,8 @@ internal fun EmbyPlaybackDialog(session: EmbySampleSession, plan: EmbyPlaybackPl
|
||||
if (covered) {
|
||||
repeat(10) { step -> player.volume = 1f - (step + 1) / 10f; delay(50) }
|
||||
player.pause()
|
||||
// The ident covers it completely now. Stopping frees its decoder and buffers for the ident and the next programme.
|
||||
player.stop()
|
||||
}
|
||||
}
|
||||
LaunchedEffect(player, ready) {
|
||||
@@ -252,7 +254,8 @@ internal fun EmbyPlaybackDialog(session: EmbySampleSession, plan: EmbyPlaybackPl
|
||||
}
|
||||
val dismiss: () -> Unit = { if (intro?.showing == true) intro.skip() else if (trackMenu != null) trackMenu = null else if (numberEntry != null) { numberEntry = null; numberProblem = null } else {
|
||||
// Backing out keeps the stream running in the picture, without subtitles at that size.
|
||||
if (ready && failure == null && foreground && onHandBack?.invoke(player) == true) {
|
||||
// A programme stopped under its ident has nothing left to hand back, so the picture tunes in afresh.
|
||||
if (ready && !covered && failure == null && foreground && onHandBack?.invoke(player) == true) {
|
||||
handedBack = true
|
||||
player.trackSelectionParameters = player.trackSelectionParameters.buildUpon().setTrackTypeDisabled(C.TRACK_TYPE_TEXT, true).build()
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ internal class SecureMediaDataSource(private val session: EmbySampleSession) : B
|
||||
next.instanceFollowRedirects = false
|
||||
next.connectTimeout = 10_000
|
||||
next.readTimeout = 20_000
|
||||
next.setRequestProperty("User-Agent", "OrbitTV/0.84.2")
|
||||
next.setRequestProperty("User-Agent", "OrbitTV/0.85.0")
|
||||
next.setRequestProperty("Accept-Encoding", "identity")
|
||||
session.mediaHeaders(address).forEach { (key, value) -> next.setRequestProperty(key, value) }
|
||||
if (dataSpec.position != 0L || dataSpec.length != C.LENGTH_UNSET.toLong()) {
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,38 +1,38 @@
|
||||
#!/bin/bash
|
||||
# The app's copies of the channel idents: the approved versions, Blender where there is one, re-encoded small and silent, named by channel number.
|
||||
# The app's copies of the channel idents: the approved versions, Blender for all but VHS, Riot, Rewind and ToonZ, which stay 2D on purpose; Paradox with its tagline, re-encoded small and silent, named by channel number.
|
||||
D=${1:?folder holding depth-native}; OUT=$(dirname "$0")/../../android/app/src/main/res/raw
|
||||
while read -r number source; do
|
||||
ffmpeg -nostdin -y -loglevel error -i "$D/$source" -an -vf fps=30 -c:v libx264 -profile:v main -pix_fmt yuv420p -crf 30 -maxrate 1400k -bufsize 2800k -movflags +faststart "$OUT/ident_$number.mp4"
|
||||
done <<'LIST'
|
||||
101 blender/orbit-1/orbit-1_blender.mp4
|
||||
102 world/orbit-2/orbit-2_3d.mp4
|
||||
103 world/orbit-three/orbit-three_3d.mp4
|
||||
104 world/orbit-gold/orbit-gold_3d.mp4
|
||||
102 blender/orbit-2/orbit-2_blender.mp4
|
||||
103 blender/orbit-three/orbit-three_blender.mp4
|
||||
104 blender/orbit-gold/orbit-gold_blender.mp4
|
||||
105 world/orbit-riot/orbit-riot_3d.mp4
|
||||
106 blender/paradox/paradox_blender.mp4
|
||||
107 world/evidence/evidence_3d.mp4
|
||||
106 blender/paradox/paradox_blender_tagline.mp4
|
||||
107 blender/evidence/evidence_blender.mp4
|
||||
201 blender/orbit-terra/orbit-terra_blender.mp4
|
||||
202 blender/orbit-odyssey/orbit-odyssey_blender.mp4
|
||||
203 world/orbit-wild/orbit-wild_3d.mp4
|
||||
204 world/orbit-dark-files/orbit-dark-files_3d.mp4
|
||||
301 world/orbit-premiere/orbit-premiere_3d.mp4
|
||||
302 world/orbit-action/orbit-action_3d.mp4
|
||||
303 world/orbit-sci-fi/orbit-sci-fi_3d.mp4
|
||||
203 blender/orbit-wild/orbit-wild_blender.mp4
|
||||
204 blender/orbit-dark-files/orbit-dark-files_blender.mp4
|
||||
301 blender/orbit-premiere/orbit-premiere_blender.mp4
|
||||
302 blender/orbit-action/orbit-action_blender.mp4
|
||||
303 blender/orbit-sci-fi/orbit-sci-fi_blender.mp4
|
||||
304 blender/orbit-horror/orbit-horror_blender.mp4
|
||||
305 blender/orbit-after-dark/orbit-after-dark_blender.mp4
|
||||
306 world/orbit-vhs/orbit-vhs_3d.mp4
|
||||
307 world/orbit-romance/orbit-romance_3d.mp4
|
||||
308 world/orbit-detour/orbit-detour_3d.mp4
|
||||
309 world/orbit-britx/orbit-britx_3d.mp4
|
||||
401 world/orbit-ring-x/orbit-ring-x_3d.mp4
|
||||
307 blender/orbit-romance/orbit-romance_blender.mp4
|
||||
308 blender/orbit-detour/orbit-detour_blender.mp4
|
||||
309 blender/orbit-britx/orbit-britx_blender.mp4
|
||||
401 blender/orbit-ring-x/orbit-ring-x_blender.mp4
|
||||
601 blender/vortex/vortex_blender.mp4
|
||||
602 city/heroes/heroes_city.mp4
|
||||
603 world/orbit-x/orbit-x_3d.mp4
|
||||
602 blender/heroes/heroes_blender.mp4
|
||||
603 blender/orbit-x/orbit-x_blender.mp4
|
||||
604 world/rewind/rewind_3d.mp4
|
||||
605 world/toonz/toonz_3d.mp4
|
||||
611 world/orbit-junior/orbit-junior_3d.mp4
|
||||
612 world/wonder/wonder_3d.mp4
|
||||
613 world/orbit-pixelz/orbit-pixelz_3d.mp4
|
||||
611 blender/orbit-junior/orbit-junior_blender.mp4
|
||||
612 blender/wonder/wonder_blender.mp4
|
||||
613 blender/orbit-pixelz/orbit-pixelz_blender.mp4
|
||||
LIST
|
||||
# Tots keeps its jingles, and has a film for morning and evening. Built by orbit-tots/build-idents.py.
|
||||
cp "$D/tots/tots_morning.mp4" "$OUT/ident_614_morning.mp4"
|
||||
|
||||
Reference in New Issue
Block a user