Give every channel its own ident film
Blender versions on seven channels, new films for Wild, Detour, BritX and Junior. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
# Orbit TV 0.80.0
|
||||
|
||||
- Every channel now has its own ident film: 29 in the app, 12 MB, 7 s each.
|
||||
- Blender versions on 101, 106, 201, 202, 304, 305, 601. New films for 203, 308, 309, 611. Refined flat versions on the rest.
|
||||
- Still to confirm on the TV: a changeover with a Blender ident, and any stutter from the larger files on 305 and 601.
|
||||
@@ -9,8 +9,8 @@ android {
|
||||
applicationId = "tv.orbit.classic"
|
||||
minSdk = 26
|
||||
targetSdk = 36
|
||||
versionCode = 89
|
||||
versionName = "0.79.3-orbithive-canvas"
|
||||
versionCode = 90
|
||||
versionName = "0.80.0-blender-idents"
|
||||
}
|
||||
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.79.3\"")
|
||||
connection.setRequestProperty("X-Emby-Authorization", "Emby Client=\"Orbit TV\", Device=\"Orbit TV\", DeviceId=\"$deviceId\", Version=\"0.80.0\"")
|
||||
request.token?.let { connection.setRequestProperty("X-Emby-Token", it) }
|
||||
if (request.method == "POST") {
|
||||
val bytes = request.body.orEmpty().toByteArray(Charsets.UTF_8)
|
||||
|
||||
@@ -33,9 +33,9 @@ internal const val IDENT_LOAD_AHEAD_MS = 12_000L
|
||||
private const val IDENT_SHORTEST_PROGRAMME_MS = 3 * 60_000L
|
||||
|
||||
private val IdentVideos = mapOf(101 to R.raw.ident_101, 102 to R.raw.ident_102, 103 to R.raw.ident_103, 104 to R.raw.ident_104, 105 to R.raw.ident_105, 106 to R.raw.ident_106, 107 to R.raw.ident_107,
|
||||
201 to R.raw.ident_201, 202 to R.raw.ident_202, 204 to R.raw.ident_204, 301 to R.raw.ident_301, 302 to R.raw.ident_302, 303 to R.raw.ident_303, 304 to R.raw.ident_304, 305 to R.raw.ident_305,
|
||||
306 to R.raw.ident_306, 307 to R.raw.ident_307, 401 to R.raw.ident_401, 601 to R.raw.ident_601, 602 to R.raw.ident_602, 603 to R.raw.ident_603, 604 to R.raw.ident_604, 605 to R.raw.ident_605,
|
||||
612 to R.raw.ident_612, 613 to R.raw.ident_613)
|
||||
201 to R.raw.ident_201, 202 to R.raw.ident_202, 203 to R.raw.ident_203, 204 to R.raw.ident_204, 301 to R.raw.ident_301, 302 to R.raw.ident_302, 303 to R.raw.ident_303, 304 to R.raw.ident_304, 305 to R.raw.ident_305,
|
||||
306 to R.raw.ident_306, 307 to R.raw.ident_307, 308 to R.raw.ident_308, 309 to R.raw.ident_309, 401 to R.raw.ident_401, 601 to R.raw.ident_601, 602 to R.raw.ident_602, 603 to R.raw.ident_603, 604 to R.raw.ident_604, 605 to R.raw.ident_605,
|
||||
611 to R.raw.ident_611, 612 to R.raw.ident_612, 613 to R.raw.ident_613)
|
||||
|
||||
internal fun identVideo(number: Int) = IdentVideos[number]
|
||||
internal fun identLength(number: Int) = if (number in IdentVideos) IDENT_VIDEO_MS else IDENT_STING_MS
|
||||
|
||||
@@ -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.79.3")
|
||||
next.setRequestProperty("User-Agent", "OrbitTV/0.80.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.
@@ -22,11 +22,11 @@ class IdentTest {
|
||||
|
||||
@Test fun channelsWithoutAFilmUseAShorterSting() {
|
||||
assertEquals(IDENT_VIDEO_MS, identLength(101))
|
||||
assertNull(identVideo(308))
|
||||
assertEquals(IDENT_STING_MS, identLength(308))
|
||||
assertNull(identVideo(999))
|
||||
assertEquals(IDENT_STING_MS, identLength(999))
|
||||
}
|
||||
|
||||
@Test fun everyIdentBelongsToARealChannel() {
|
||||
SmartChannels.map { it.number }.filter { identVideo(it) == null }.let { assertEquals(listOf(203, 308, 309, 611), it.sorted()) }
|
||||
@Test fun everyChannelHasItsOwnIdent() {
|
||||
SmartChannels.map { it.number }.filter { identVideo(it) == null }.let { assertEquals(emptyList<Int>(), it) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +1,36 @@
|
||||
#!/bin/bash
|
||||
# The app's copies of the channel idents: the approved 3D versions, re-encoded small and silent, named by channel number.
|
||||
# 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.
|
||||
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 world/orbit-1/orbit-1_3d.mp4
|
||||
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
|
||||
105 world/orbit-riot/orbit-riot_3d.mp4
|
||||
106 world/paradox/paradox_3d.mp4
|
||||
106 blender/paradox/paradox_blender.mp4
|
||||
107 world/evidence/evidence_3d.mp4
|
||||
201 world/orbit-terra/orbit-terra_3d.mp4
|
||||
202 world/orbit-odyssey/orbit-odyssey_3d.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
|
||||
304 world/orbit-horror/orbit-horror_3d.mp4
|
||||
305 world/orbit-after-dark/orbit-after-dark_3d.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
|
||||
601 world/vortex/vortex_3d.mp4
|
||||
601 blender/vortex/vortex_blender.mp4
|
||||
602 city/heroes/heroes_city.mp4
|
||||
603 world/orbit-x/orbit-x_3d.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
|
||||
LIST
|
||||
|
||||
Reference in New Issue
Block a user