Inicio/ trabajo/SpletnaTV
Desarrollador principal · 2020 — 2023 · Streaming

SpletnaTV

Aplicaciones nativas de Android e iOS para un servicio de TV web eslovena — transmisiones en vivo, catálogo VOD, reproducción de vídeo desde múltiples fuentes y navegación por categorías — todo respaldado por WordPress REST API y la plataforma de medios de RTV SLO.

Rol Desarrollador principal
Duración 2020 → 2023
Plataformas Android · iOS
Backend WordPress REST API · RTV SLO AVA
Dominio Streaming · Medios · Móvil
Plataformas entregadas
2 / 2
Android + iOS
Fuentes de vídeo
3
ExoPlayer · YouTube · RTV HLS
Categorías de contenido
8
navegables, paginadas
Infraestructura push
FCM + PN
Firebase + broker propio
SpletnaTV screenshot

Resumen

Como desarrollador principal en ambas plataformas, asumí toda la construcción — desde las decisiones de arquitectura y la integración de APIs hasta el ciclo de vida del reproductor y las notificaciones push. SpletnaTV es un servicio esloveno de TV web que ofrece transmisiones en vivo, un catálogo VOD y contenido que abarca ocho categorías editoriales (noticias, deportes, cultura, videoclips musicales, programación infantil y emisiones en lengua de signos).

La aplicación Android — escrita en Kotlin con Jetpack Navigation — obtiene contenido desde un backend WordPress REST y lo presenta como un feed paginado y navegable por categorías. Al tocar cualquier elemento, en tiempo de ejecución se resuelve la fuente de vídeo correcta: un flujo HLS/MP4 directo vía ExoPlayer, un embebido de YouTube mediante la YouTube Android Player API oficial, o una grabación protegida con DRM de la plataforma RTV SLO AVA que requiere un intercambio JWT en vivo antes de iniciar la reproducción.

La aplicación complementaria de iOS se entregó en Swift 5 / UIKit dirigida a iOS 16.4, ofreciendo paridad de funciones en dispositivos Apple. Firebase (Analytics, Crashlytics, FCM) funciona en toda la versión Android, complementado por un broker secundario de notificaciones push para fiabilidad en dispositivos con recursos limitados.

Arquitectura

~/spletnatv/architecture/system-map.svg
01 — APLICACIONES CLIENTEAplicación AndroidKotlin 1.3 · ExoPlayerRetrofit2 · OkHttp3Aplicación iOSSwift 5 · UIKitiOS 16.4+Capa de pasarela APIWordPress REST API · wp-json/wp/v2/posts · categories · searchRTV SLO AVA · intercambio de tokens JWT → HLS adaptativo (hls_sec)YouTube Data API · extracción de ID de vídeo02 — BACKENDS DE MEDIOS & CONTENIDOWordPress CMSentradas · catálogo VODRTV SLO AVADRM · HLS · JWTYouTubeembebidos · Android APIFirebaseFCM · Analytics · CrashSaneador HTML Jsoup · cargador de imágenes Picasso · búsqueda WP con debounce · feeds paginados · notificaciones push (FCM + broker)03 — UTILIDADES

Leyendo el diagrama: las aplicaciones Android (Kotlin/ExoPlayer) e iOS (Swift/UIKit) se comunican a través de una capa unificada de pasarela API que envuelve tres backends: el WordPress CMS para entradas y metadatos VOD, la plataforma RTV SLO AVA para flujos HLS protegidos con DRM (resueltos mediante un intercambio JWT en dos pasos) y YouTube para contenido embebido. Firebase gestiona push, analítica y reportes de fallos. Un saneador Jsoup elimina widgets sociales e iframes del HTML de WordPress antes de que llegue al WebView.

Lo más difícil no fue el streaming — fue unificar tres fuentes de vídeo completamente distintas tras un único toque. Cada una tenía su propio modelo de autenticación, formato de URL y modo de fallo.
Davor Majc, Desarrollador principal / SpletnaTV
03 Lo que entregué · desafíos resueltos

Seis cosas entregadas,
tres difíciles resueltas.

Contribuciones clave

  • Construí la aplicación Android de extremo a extremo en Kotlin — arquitectura de navegación, lógica del reproductor multi-fuente, feeds paginados.
  • Integré tres backends de vídeo: ExoPlayer para HLS/MP4 directo, YouTube Android Player API y RTV SLO AVA para flujos protegidos con DRM mediante intercambio de tokens JWT.
  • Conecté la WordPress REST API (/wp-json/wp/v2/) para entradas, categorías y búsqueda de texto completo con debounce.
  • Conecté la plataforma AVA de RTV SLO (api.rtvslo.si/ava/) — obteniendo tokens JWT por grabación y resolviendo la URL del flujo adaptativo hls_sec.
  • Implementé búsqueda en tiempo real con debounce (1 s de retardo, mínimo 3 caracteres) sobre la WP API.
  • Configuré Firebase Analytics, Crashlytics y notificaciones push FCM; integré un segundo broker push para entrega personalizada.
  • Entregué la aplicación complementaria de iOS en Swift 5 / UIKit dirigida a iOS 16.4.

Desafíos resueltos

  • Tres fuentes de vídeo heterogéneas — un flujo CDN directo, embebidos de YouTube y contenido de RTV SLO protegido con DRM — requerían lógica de reproductor ramificada en una sola pantalla de detalle.
  • Los flujos de RTV SLO requerían un baile de tokens en dos pasos: obtener un JWT mediante un endpoint y luego resolver la URL HLS adaptativa mediante otro — todo antes de que el usuario pulsara play.
  • El contenido de WordPress contenía HTML mixto (iframes, bloques de galería, widgets de compartir en redes sociales) que debía limpiarse en el servidor con Jsoup antes de renderizarse en un WebView.

Cliente

Llevamos años trabajando con Numen — desde el portal de reservas hasta la aplicación del museo y las herramientas de accesibilidad. Davor entiende de verdad las necesidades de la comunidad sorda y con dificultades auditivas.
Matjaž Juhart, Secretario General / ZDGNS
04 Stack tecnológico

Qué hay bajo el capó.

KotlinSwiftExoPlayerYouTube Player APIRetrofit2OkHttp3JsoupPicassoWordPress REST APIHLSFirebase FCMJetpack Navigation
Hablemos

¿Listo para arreglar, construir
o escalar?

30 minutos, conmigo personalmente. Leo tu sistema como un archivo de logs y te digo qué haría primero. Sin presentaciones, sin embudo de ventas.

Davor Majc, fundador, Numen

Qué obtienes en la llamada
→ un diagnóstico de una página
→ 2–3 formas de solución, ordenadas por impacto
→ coste aproximado + plazo para cada una
→ sí/no — ¿soy la elección adecuada?
+386 40 828 474 · Blejska Dobrava, SI