Un espacio para escribir de vez en cuando acerca de temas de tecnología

About

martes, 28 de agosto de 2018

Y el "transcoding" quemó mi procesador


Anteriormente...

En otros artículos he hablado de "transcoding" y "streaming", si te los perdiste, puedes verlos aquí:


Plex está diseñado para siempre hacer "transcoding" cuando lo ve "necesario"; casi siempre relacionado al hecho de que el dispositivo donde corre la app cliente de Plex no es capaz de reproducir de manera nativa el contenido multimedia que el servidor le envía (video, audio, subtítulos).

Como he mencionado, el procesador de mi computadora no siempre puede hacer la cantidad de "transcodes" que las apps cliente de Plex demandan, lo cual causa "buffering" y las molestas pausas. Lo peor de la situación es que cuando el procesador no puede mantener el ritmo, causa que todos los "streams" se vean afectados, y posiblemente uno o más de ellos tengan que hacer "buffering".


¿"Transcode" por qué me atormentas?

Del lado del servidor de Plex, ya configuré lo más posible para que los diversos "transcodes" simultáneos consuman la menor cantidad de procesador (utilizando aceleración de hardware y bajando la calidad del video de cualquier conversión). Desgraciadamente no puedo desde este lado disminuir o bloquear los "transcodes". Aquí es donde necesito de su ayuda.

Algunas de las razones por las cuales los "transcodes" que están ocurriendo en mi servidor pueden ser:
  1. El video o audio original está codificado en un formato que el dispositivo cliente no puede decodificar. (En el ejemplo se está convirtiendo el video con codec HEVC/H.265 a AVC/H.264)
  2. El dispositivo cliente está pidiendo subtítulos, pero el app de Plex en el dispositivo cliente no soporta el formato de subtítulo en específico, o ningún formato. Esto causa que el servidor quiera recodificar el video para que los subtítulos se "quemen" como parte del video recodificado. (En el ejemplo los subtítulos PGS no los soporta el reproductor nativo del Xbox One)
  3. El video o audio original está codificado en un formato que el dispositivo cliente puede decodificar, pero no es suficiente la velocidad del internet para poder lograr que la transmisión sea fluida (o en términos más técnicos, el "bitrate" del contenido es mayor del que la velocidad de la conexión puede permitir, más sobre "bitrate" más abajo). El servidor determina que un "transcode" es necesario para bajar la calidad y/o la resolución del video para disminuir el "bitrate" a uno para el cual la velocidad de la conexión sea suficiente. (En el ejemplo, se puede ver la calidad reducida a un "bitrate" de 659 kbps y la resolución disminuida de 1080p a 328p)
  4. La velocidad de conexión es suficiente para soportar el "bitrate" del "stream", pero la configuración de la app de Plex en el dispositivo cliente está topando la calidad del video casada con una velocidad de conexión.
  5. El dispositivo cliente pide subtítulos y  soporta el formato del subtítulo, pero la app de Plex está forzando que los subtítulos se "quemen" en el video.

"Direct Play" VS "Direct Stream" VS "Transcode"

Plex denomina "Direct Play" al hecho que el contenido original tal cual como está en el servidor se envíe en el "stream" al app de Plex cliente ya que el dispositivo donde corre el cliente es capaz de reproducir el "stream" tal y como está en su contenedor original.

El hacer "Direct Play" es beneficioso para el cliente porque asegura que le llega la calidad original de los contenidos, y también para el servidor porque el procesamiento necesario para el "stream" es mínimo.

Como puedes ver en el enlace de "Direct Play", Plex permite que en las apps cliente la opción de "Direct Play" se apague. Cuando "Direct Play" no está encendido se fuerza al servidor a siempre hacer "transcode" en todos los "streams". ¿Por qué querría un usuario apagar esta opción? La verdad no tengo idea. Pero a todos nos conviene asegurarnos que esté encendida, y en algunas apps cliente esta opción está deshabilitada por default. Por favor revisa tu configuración y asegúrate que esté encendida.

Plex va a hacer "Direct Play" si las siguientes condiciones se cumplen en el dispositivo cliente:
  • El contenedor multimedia es compatible. Yo utilizo Matroska (.mkv) para todo, y aunque es el contenedor más popular actualmente, no todos los dispositivos lo soportan.
  • El "bitrate" usado en la codificación es compatible. A más calidad, más "bitrate", y dependiendo del desempeño del procesador en el dispositivo cliente es el "bitrate" que puede soportar.
  • El video y audio están codificados con "codecs" compatibles. Desgraciadamente sólo los dispositivos más nuevos o con modelos más caros tienen un amplio soporte de codecs de video y audio. Yo utilizo los codecs más nuevos HEVC/H.265 y AVC/H.264 para el video, AAC, AC-3, FLAC para el audio (en otro artículo hablaré a detalle de codecs). Es común encontrar dispositivos que no soporten codecs nuevos.
  • El video está en una resolución compatible. Hay dispositivos que pueden reproducir cualquier resolución que se les envía y aunque el "display" en cuestión no soporte la resolución sean capaces de hacer "downscale" del video a la resolución más alta soportada. Muchos otros dispositivos no pueden hacer este "downscale".
Plex denomina "Direct Stream" al hecho que el servidor desempaquete los elementos multimedia de un "contenedor" no compatible con el dispositivo donde corre el app cliente, y lo empaquete en un nuevo "contenedor" que sí es compatible antes de iniciar el "stream". Este re-empaquetado consume más procesamiento que un "Direct Play", pero sigue siendo un nivel bajo y manejable por mi procesador.

Al igual que la opción de "Direct Play", Plex permite que en las apps cliente la opción de "Direct Stream" pueda ser apagada. Aplica lo mismo, no hay necesidad de tenerla apagada aunque es probable que por default lo esté. Por favor revisa tu configuración y asegúrate que esté encendida.

Plex va a hacer "Direct Stream" si y sólo si los elementos multimedia empaquetados sí son compatibles pero solamente el "contenedor" no lo es.

- ¿Qué es lo que todos queremos?
- ¡"Direct Play"!
- ¿Cuándo lo queremos?
- ¡Ahora mismo!

El hecho que Plex haga "transcode" en un "stream" siempre va a ser indeseable si el dispositivo que usas es suficientemente capaz de reproducir contenido en diversos formatos y en alta calidad.

Lo deseable siempre es que Plex haga lo siguiente al comenzar un "stream", y Plex puede hacerlo de manera automática siempre y cuando las condiciones de compatibilidad se cumplan:

  1. Intentar que el "stream" use "Direct Play".
  2. Si no se puede, intentar que el "stream" use "Direct Stream".
  3. Si no se puede, hacer "transcode".


Te recuerdo que todo "transcode":

  • Recodifica el video y el audio SIEMPRE en una calidad menor a la original. Aunque se mantenga en la misma resolución y tú pienses que todo se ve "bien", te aseguro que si el "stream" se hiciera con "Direct Play" o con "Direct Stream" obtendrías una calidad mucho más alta tanto de video como de audio.
  • Puede causar pausas indeseables al hacer "buffering" porque el procesador de mi servidor no puede hacer el "transcode" al ritmo necesario.
  • El "buffering" podría potencialmente afectar a todos los "streams" en curso.
  • Pone a mi computadora de rodillas, la ahorca y otros procesos se vuelven prácticamente inutilizables.


Espero que hayas encontrado toda esta información útil y una lectura agradable.

¡Saludos!
Share:
Ubicación: Monterrey, Nuevo Leon, Mexico

0 comentarios:

Publicar un comentario

Nota: sólo los miembros de este blog pueden publicar comentarios.

BTemplates.com

Buscar este blog

Con tecnología de Blogger.