CorePlayer: Reproductor de vídeo para Tucson 2015-2017

JKD

Forero Experto
Motor TL
2.0 CRDi 136 CV
Versión TL
Tecno Aut. 4x4
Color TL
Thunder Gray
1/3

De los reproductores de vídeo existentes y que he podido probar en nuestro equipo con Windows CE (TCPMP, voPlayer...) el que mejor rendimiento tiene es CorePlayer. Este reproductor viene como un complemento en el software Menavrus. De hecho, hasta ahora no era posible disfrutar de dicho reproductor sin el software ruso. En el siguiente post de este hilo explicaré el motivo.

En este primer post quiero obsequiaros con el resultado de un par de meses de investigación, análisis, desarrollo y pruebas.

El reproductor CorePlayer funcional e integrable junto con el software de Hyundai/Kia.​

Esto significa que puede ejecutarse sin necesidad de salir a Windows y el reproductor coexistirá con el resto de aplicaciones de la casa.

El volumen del vídeo se baja deliberadamente en varios puntos por temas de copyright en Youtube

Enlaces:

Ofrezco dos posibilidades en mi web:
  • Aquellos que ya tienen una SD con BootLoader pueden descargar el archivo comprimido "Player Only". Descomprime este enlace en la SD. Se creará el item a CorePlayer en la carpeta \boot y en la carpeta \apps colocará CorePlayer.
  • Para los que no tienen BootLoader pueden descargar el archivo "Player + BootLoader" que contiene todos los archivos necesarios para funcionar tras descomprimirlos en una SD vacía.
Modo de uso:
  • Una vez se ejecute CorePlayer, este se mostrará con la interfaz propia de cada vehículo. Esto es, con la apariencia del software de Hyundai o de KIA respectivamente.

    skins.png

  • La interfaz del reproductor es sencilla, mostrando bajo el vídeo los controles de reproducción. Si se pulsa sobre el vídeo se alterna a pantalla completa.

  • Una vez seleccionados los vídeos a reproducir, es posible pasar de un vídeo a otro bien pulsando en los controles que aparecen en pantalla o mediante los botones físicos tanto del equipo como del volante del vehículo.

  • Si se pulsa el botón físico RADIO, CorePlayer se cerrará automáticamente. Una vez que CorePlayer se cierra bien automáticamente o manualmente, en la pantalla del reproductor multimedia (botón MEDIA) aparecerá un botón que permitirá volver a ejecutar CorePlayer en cualquier momento.

    playerbutton.png

  • Si se pulsa el botón físico MAPS, CorePlayer se visualizará en una ventana pequeña en la zona superior derecha de la pantalla, pudiendo esta ocultarse a voluntad o moverla libremente a cualquier otro punto de la pantalla.

    preview.png

  • En cualquier otra pantalla no reconocible o cuando se mete la marcha atrás y se muestra la cámara trasera, el reproductor de vídeo se ocultará (manteniendo la reproducción en segundo plano) para permitir interactuar con el resto del software. En este punto, es posible volver a mostrar CorePlayer pulsando el botón MEDIA o MAPS. En el caso de la marcha atrás, una vez se salga de esa marcha, CorePlayer volverá a mostrarse en pantalla.

Limitacióń temporal:

Lamentablemente hay una limitación para la que aún no he podido aportar una solución sencilla. Al auto ejecutar CorePlayer desde BootLoader, no se puede usar el programa de mapas hasta reiniciar el equipo de nuevo. Esto no es un problema de CorePlayer sino una limitación del software de Hyundai al ejecutar BootLoader. Tengo previsto hacer un programa que quite esa limitación. De hecho, como se puede ver en la imagen anterior y en el vídeo, yo ya he eliminado esa limitación de forma manual. Pero es un proceso delicado. Otra opción es que sea Tucsy el que ejecute CorePlayer. Como Tucsy ya está instalado en el equipo, no se produce esa limitación. Pero esto habría que hablarlo con su desarrollador.


Véase también:
 
Última edición:

JKD

Forero Experto
Motor TL
2.0 CRDi 136 CV
Versión TL
Tecno Aut. 4x4
Color TL
Thunder Gray
2/3

En estos dos posts voy a comentar un poco cómo he llegado hasta ofreceros esta solución. No es un post determinante pero deja constancia del proceso. No os asustéis...

Tres son los reproductores de vídeo que hay disponibles para nuestro equipo:
  • TCPMP: Fue el primero en salir a la luz. Es un proyecto de código abierto. El inconveniente de este reproductor es que tiene una interfaz algo arcaica y poco adaptada a las pantallas táctiles. Hay alguna versión con soporte para skins que no ha funcionado en nuestro equipo (probablemente por el mismo motivo por el que no funcionaba CorePlayer)

  • voPlayer: Conocido aquí como TucsonPlayer con skin tuneado por @devero tiene una interfaz más intuitiva pero tiene como desventaja una reproducción de vídeo lenta como si el número de frames por segundo fuera inferior a 24.

  • CorePlayer: En su día fue la versión de pago desarrollada a partir del código de TCPMP. Su comercialización finalizó hace ya unos cuantos años y sólo se encuentra en algunos foros al ser un proyecto abandonado. Como ventaja, tiene una reproducción más fluída y soporte para skins. El proyecto Menavrus lo incluye en su paquete de software.

El problema

¿Alguno ha intentado ejecutar cualquier versión encontrada de CorePlayer en nuestro equipo? Si lo intenta, verá que no funciona. Doble click y nada ocurre. Curiosamente, ejecutado en un emulador sí funciona y si se lanza desde Menavrus también, pero no desde el explorador de Windows. Aquí comienza la curiosidad. ¿Se ejecuta algo? ¿Falla? y si falla ¿por qué motivo? ¿es problema de CorePlayer... del sistema operativo... de la configuración...? :cautious:

El primer paso fue crear una pequeña aplicación que ejecutara CorePlayer y obtuviera el código que devuelve el programa una vez que este finaliza. Normalmente si un programa finaliza sin errores devuelve un código 0. Si no, devolverá otro valor. En este caso, CorePlayer devolvió un valor distinto de 0. Por lo tanto, el programa ha cascado. El código de error hacía referencia a un desbordamiento de pila (Stack Overflow) lo que ocasionaba que el programa se cerrara fulminantemente.


Depuración

Aunque ya sabía qué error es el que mata el programa, no tenía información de en qué punto de la aplicación y qué llevaba a ese fatal desencadenamiento. En este mundo de los sistemas embebidos con Windows CE, hay herramientas que permiten conectar el pc al equipo mediante cableado especial para realizar una depuración remota y ver qué está ejecutando un programa paso a paso. Yo carezco de dichas herramientas. Tampoco he localizado software para nuestro equipo que permita depurar aplicaciones. De hecho, no he encontrado ningún debugger que funcione en Windows CE así que empecé el desarrollo de un programa depurador.

Este programa, ejecuta CorePlayer, lo detiene en un determinado punto y a partir de ahí permite ejecutar el software instrucción por instrucción, mostrando los valores de los registros del procesador ARM... la memoria, el código que se está ejecutando, definir puntos en los que se quiere que pare el programa, saltar a otro punto del programa, ignorar saltos... etc.

Durante la ejecución de CorePlayer, ocurre un error de excepción ILEGAL_INSTRUCTION. Pero ese error es normal y el programa lo tiene en cuenta porque CorePlayer trata de deducir qué procesador usa nuestro equipo para optimizar la reproducción y, en este proceso, usa determinadas instrucciones que sabe, fallarán en otros procesadores. Interceptando esos fallos conocidos puede descartar algunos procesadores. Tras esa etapa continua la carga de algunas librerías.

Tras cargar la librería ddraw.dll el programa importa la función DirectDrawCreate de esa librería. Esa función inicializa la aceleración de gráficos 2D. El error de excepción que aparece, por la dirección de memoria que apunta, indica que se produce en la librería ddraw.dll. Si se continua la ejecución, se suceden una lista de errores de desalineación de datos que desencadena finalmente un desbordamiento de pila. Este error fatal se produce en la librería coredll.dll, lo cual era desconcertante ya que esta librería es importante en Windows CE. Si suponemos que coredll.dll está lo suficientemente optimizada como para pensar que el problema no se origina en dicha librería sino que es consecuencia de un error previo, podemos descartar coredll.dll y volver a la librería que hace uso de esta.

error.png
Punto de ddraw.dll donde comienza la cadena de errores que mata CorePlayer

Volviendo al punto donde se produce el fallo en ddraw.dll, si le pido a CorePlayer que ignore el error el programa aparece en pantalla pero el vídeo no funciona. Que el fallo se provocase en esa librería es un problema ya que esa librería reside en la carpeta \Windows y no se puede modificar.

Cuando una aplicación quiere hacer uso de una librería, normalmente especifica el nombre de la librería y es el sistema operativo el que se encarga de encontrarla, buscándola en diferentes puntos. Empieza por las carpetas del sistema \Windows y si no la encuentra en la carpeta donde reside la aplicación. Alternativamente usa otras rutas especificadas en el registro de windows.

Se me ocurrió copiar la misma librería ddraw.dll en la misma carpeta donde reside CorePlayer con la idea de que, cuando el programa cargue la librería, el sistema use la de esa carpeta en vez de la existente en la carpeta \Windows pero no hubo éxito. Si existe en Windows, la cargará de ahí. Así que se me ocurrió una alternativa. Renombrar la ddraw.dll en la carpeta de CorePlayer a fdraw.dll y alterar el reproductor para que llame a fdraw en vez de ddraw.dll. Eso sí funcionó pero el error seguía estando ahí.

Hasta el momento, lo que había hecho era ver la reacción del programa si tenía en cuenta el error producido (desencadena desbordamiento de pila) o si le indicaba que ignorara el error (CorePlayer funcionaba sin posibilidad de ver vídeo). Así que me he situado con el depurador en el punto del código de la librería previo al error y he podido ignorar la llamada que intentaba realizar a una zona de memoria no inicializada (quizá por la falta de alguna configuración de DirectDraw en nuestro sistema). ¿El resultado? CorePlayer funcional :) . Así que el problema se produce en esa librería y era posible modificarla para evitar que se desencadene el error. Solucionar esto me llevó casi un mes debido a la dedicación al desarrollo del depurador más que a solucionar el problema de CorePlayer. Esta seguramente no es la única solución al problema. El problema podría tratarse de algún conflicto de versiones entre la existente en nuestro sistema y la que requiere CorePlayer. Lo cierto es que la inicialización de DirectDraw falla en algún punto y es la que mata el reproductor.

Hay una pequeña pega para el que quiera considerarlo como tal. Y es que la función no ejecutada en ddraw.dll tiene como consecuencia que no se reproduzca el vídeo en overlay sino integrada en la ventana del reproductor (lo cual para mí es una ventaja) y el vídeo tiene un pelín menos de resolución. Pero es aceptable como podréis comprobar.

En el vídeo se muestra los pasos dados en el debugger para llegar al punto previo al error, ignorar la ejecución del salto a la memoria no inicializada y continuar la ejecución con los gráficos operativos:

Continua ...
 
Última edición:

JKD

Forero Experto
Motor TL
2.0 CRDi 136 CV
Versión TL
Tecno Aut. 4x4
Color TL
Thunder Gray
3/3

Integración

Que CorePlayer funcione es sólo una parte de la solución. Lo siguiente es procurar éste se integre, mostrando por un lado una interfaz adaptada a la utilizada por cada tipo de vehículo, sea Hyundai o Kia y que permita interactuar con el reproductor sin necesidad de matar las aplicaciones nativas, logrando que el conjunto tenga cierta armonía. Para ello he creado dos skins, uno para Hyundai y otro para Kia. El de Hyundai ya lo publiqué para Menavrus tiempo atrás, pero lo he modificado para que si el reproductor se visualiza en una ventana pequeña, los controles de reproducción (Play / Siguiente / Anterior ...) no se muestren en pantalla, maximizando así el área disponible para el vídeo. Además, he desarrollado un lanzador que controla CorePlayer durante su ejecución y permite ejecutarlo manualmente desde el reproductor nativo. El lanzador se encarga de detectar el tipo de vehículo para establecer la skin más acorde. Así CorePlayer mostrará los controles de reproducción del mismo estilo que el reproductor nativo.

Otro aspecto en el que el lanzador hace hincapié es en detectar el idioma en el que está configurado el software nativo para reconfigurar CorePlayer y que se visualice en el mismo idioma.

Además permite el control de los vídeos usando los botones físicos del equipo y los del volante para siguiente/anterior vídeo. Nótese que para que eso funcione es necesario que el pendrive tenga al menos tres mp3. La razón de esto es el lanzador no se instala en el equipo ni modifica el software nativo para conocer qué eventos se han producido en el equipo como la pulsación de algún botón físico o el paso de una canción a otra. El lanzador compara el estado de ciertos parámetros en memoria en tiempo real, como "la canción actual en reproducción" y el "número total de canciones detectadas" por el software de Hyundai/Kia para detectar si se ha avanzado o retrocedido de canción y actuar en consecuencia en CorePlayer.

El lanzador mantiene el reproductor nativo pausado. Al usar los botones físicos para avanzar o retroceder de vídeo, el reproductor nativo comienza a reproducir la siguiente o anterior canción durante unos milisegundos. Normalmente no es apreciable ya que el lanzador restaura la situación tan pronto como detecta los cambios.

Cuando el lanzador detecta que se ha cambiado la fuente de audio a AM, FM, CD (para los modelos que lo soporten) o IPOD, cierra CorePlayer y activa la visualización de un botón en el reproductor multimedia nativo para poder ejecutarlo de nuevo a voluntad. El lanzador evita intervenir cuando se selecciona la fuente de audio Bluetooth. Esto significa que no fuerza de nuevo el audio multimedia ni cierra o pausa la reproducción de CorePlayer. Esto lo he hecho pensando en aplicaciones como Tucsy que usan momentáneamente el audio Bluetooth para reproducir las notificaciones del móvil.

Uno de los problemas más difíciles de afrontar desde el lanzador tiene que ver con la cámara trasera del vehículo. Y es que, al meter la marcha atrás, parte de la emisión del vídeo de CorePlayer se mezclaba con el vídeo de la cámara trasera al desaparecer la ventana de CorePlayer creando un efecto como este o_O :

Ejemplo de imagen de vídeo mezclada con la señal de la cámara trasera

Una vez que el lanzador detecta que se está visualizando la cámara trasera, el vídeo ya se ha mezclado. Cualquier intento de desplazar la ventana de CorePlayer fuera de la pantalla u ocultar la ventana desencadenaba el mismo efecto. En cuanto la ventana deja de ser visible o se sale de la pantalla, las funciones de DirectDraw pierden los límites físicos de la ventana contenedora así que centra la imagen en pantalla. Tras muchas pruebas pude encontrar la forma de desactivar la reproducción de vídeo en CorePlayer antes de ocultar la ventana. Esta es una de las cosas que más tiempo me costó solucionar :thumbsup: .



Des/Activación del vídeo en CorePlayer desde una aplicación externa




¿Habéis llegado hasta aquí o me he quedado solo? ;) En cualquier caso espero que este reproductor os sea útil. Lo siguiente será eliminar la dichosa limitación de software que he comentado en el post inicial.
 
Última edición:

Erperdi

Moderador
Miembro del equipo
Motor TL
1.7 CRDi 115 CV
Versión TL
Style
Color TL
Phantom Black
Eres Dios.
 

mentol

Forero Activo
Ubicación
cadiz
Motor TL
2.0 CRDi 185 CV
Color TL
Platinum Silver
una vez se inserta la sd y se instala se puede quitar la sd y poner la de fabrica del coche?
 

rios09

Forero Novato
Motor TL
2.0 CRDi 136 CV
Versión TL
Tecno
Color TL
Ultimate Red
Madre mía ahora si te quedaste vacío, congratulations, mas tarde lo pruebo y les iré comentando, una vez mas muchas gracias JKD
 

JKD

Forero Experto
Motor TL
2.0 CRDi 136 CV
Versión TL
Tecno Aut. 4x4
Color TL
Thunder Gray
una vez se inserta la sd y se instala se puede quitar la sd y poner la de fabrica del coche?
De momento no. Porque la SD que crees no es para instalar. No se instala ni se modifica nada en el equipo. Se usa una técnica para ejecutar automáticamente el lanzador de Coreplayer. Pero esta técnica está sujeta a la limitación que comento en el post inicial.

Por eso ahora mismo, veo prioritario crear el programa que quite esa y otras limitaciones. De esa forma podrás tener junto con bootloader las apps que quieras y los mapas de Hyundai en una tarjeta no original sin tener que hacer trucos.
 

mentol

Forero Activo
Ubicación
cadiz
Motor TL
2.0 CRDi 185 CV
Color TL
Platinum Silver
Okkkkk gracias crack lo he probado y va muy bien solo que no se poner el logo de kia
Saludos
 

tate

Forero Habitual
Ubicación
Córdoba
Motor TL
2.0 CRDi 136 CV
Versión TL
Tecno
Color TL
White Sand
Una vez más para levanrsrse el sombrero!! Chapeau!!!!
 

JKD

Forero Experto
Motor TL
2.0 CRDi 136 CV
Versión TL
Tecno Aut. 4x4
Color TL
Thunder Gray
Okkkkk gracias crack lo he probado y va muy bien solo que no se poner el logo de kia
Saludos
¿Tu coche es un kia y aparece el logo de Hyundai? Prueba a eliminar el archivo Skin.cps de la SD. Esta en\apps\coreplayer\. El lanzador lo generará de nuevo en base al valor que identifica a tu modelo de vehículo. Si aún así te sigue saliendo el logo de Hyundai me dices porque me podrías pasar el archivo de configuración que específica el modelo.
 

mentol

Forero Activo
Ubicación
cadiz
Motor TL
2.0 CRDi 185 CV
Color TL
Platinum Silver
¿Tu coche es un kia y aparece el logo de Hyundai? Prueba a eliminar el archivo Skin.cps de la SD. Esta en\apps\coreplayer\. El lanzador lo generará de nuevo en base al valor que identifica a tu modelo de vehículo. Si aún así te sigue saliendo el logo de Hyundai me dices porque me podrías pasar el archivo de configuración que específica el modelo.
okkk mañana lo pruebo saludos
 

Eneko

Forero Activo
Ubicación
Vitoria-Gasteiz
Motor TL
1.7 CRDi 115 CV
Versión TL
Klass
Color TL
White Sand
Con pelos y señales, asi da gusto leerte.
Excelente trabajo.
La de horas que has tenido que meter para que nosotros podamos disfrutar aun más de nuestros vehiculos (infoentretenimiento)
Me quito el sombrero, chapeau !
 

mentol

Forero Activo
Ubicación
cadiz
Motor TL
2.0 CRDi 185 CV
Color TL
Platinum Silver
¿Tu coche es un kia y aparece el logo de Hyundai? Prueba a eliminar el archivo Skin.cps de la SD. Esta en\apps\coreplayer\. El lanzador lo generará de nuevo en base al valor que identifica a tu modelo de vehículo. Si aún así te sigue saliendo el logo de Hyundai me dices porque me podrías pasar el archivo de configuración que específica el modelo.
lo borre y sigue saliendo el simbolo de hyundai.
 

Guanchito03

Forero Activo
Ubicación
Tenerife
Motor TL
1.7 CRDi 115 CV
Versión TL
Style
Color TL
Polar White
Qué buen aporte. Había dejado de ver vídeos y ahora nos lo has puesto muy fácil con este método. Si se elimina la limitación y se incluye con Tucsy sería la repera. Miles de usuarios te lo agradecen en todo el mundo
 

Hispany

Forero Activo
Ubicación
Cadiz
Motor TL
2.0 CRDi 184 CV
Versión TL
Style Aut. 4x4
Color TL
Thunder Gray
Hola @JKD muchas gracias por "mantener" vivo nuestro viejo sistema de infoentretenimiento. Yo poseo un Santa Fe del 2017 y gracias a tus aportes he podido aprovechar algunas de sus caracteristicas :). Si necesitas algun "beta tester" no dudes en contar conmigo.

Act. Aun no lo he podido probar, pero como espero que pronto lo actualices para que se puedan usar los mapas y el reproductor de video he decidido hacer una pequeña donación por PayPal.

Saludos.
 
Última edición:
  • Me Gusta
Reacciones: JKD
Arriba