Estoy trabajando en una aplicación para dispositivos Android TV, que usa ExoPlayer como reproductor de video y estoy usando Smooth Streaming video con PlayReady DRM. La aplicación es capaz de realizar solicitudes de claves, etc. sin ningún problema y la mayor parte del contenido se está reproduciendo.

Sin embargo, estoy experimentando problemas con ciertos activos de video. El siguiente registro de errores está visible en Logcat:

E/ExoPlayerImplInternal: Internal runtime error.
android.media.MediaCodec$CodecException: Error 0xffffffff
at android.media.MediaCodec.native_queueSecureInputBuffer(Native Method)
at android.media.MediaCodec.queueSecureInputBuffer(MediaCodec.java:2535)
at com.google.android.exoplayer.MediaCodecTrackRenderer.feedInputBuffer(MediaCodecTrackRenderer.java:721)
at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:529)
at com.google.android.exoplayer.SampleSourceTrackRenderer.doSomeWork(SampleSourceTrackRenderer.java:128)
at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:432)
at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:211)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)
at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)

Sé que los activos en cuestión funcionan, ya que los estamos usando con éxito en Chromecast.

Estoy bastante desconcertado por el error, ya que solo ocurre en algunos activos y aparentemente no hay conexión entre ellos. Cualquier ayuda será muy apreciada.

0
Michell Bak 30 dic. 2016 a las 22:33
También puede enviar un problema aquí: github.com/google/ExoPlayer/issues
 – 
random
3 ene. 2017 a las 07:54
 – 
Michell Bak
3 ene. 2017 a las 15:32

1 respuesta

La mejor respuesta

La respuesta fue publicada por un ingeniero de Nvidia que trabaja en el dispositivo Nvidia SHIELD aquí:

Al observar la singularidad de las muestras, la razón por la que no funcionaba en Nvidia Shield es porque las muestras cifradas tenían todos los IV en cero. Nuestra implementación de referencia PlayReady tenía esto restringido para evitar ataques de "reproducción" (https://crypto.stackexchange.com/questions/8600/why-should-i-use-an-initialization-vector-iv-when-i-have-unique-keys < / a>), y siempre me gustaron los intravenosos salados. Sin embargo, más tarde se descubrió que, si las claves son siempre diferentes y no se repiten en el modo CTR, tener todo cero IV sigue siendo lo suficientemente seguro. ( https://crypto.stackexchange.com/questions/8151/counter -mode-static-iv-but-different-keys). Este problema se ha solucionado y la próxima OTA de Nvidia Shield lo solucionaría.

Vale la pena mencionar que la actualización de OTA mencionada ha estado disponible durante más de medio año.

0
Michell Bak 27 ago. 2019 a las 15:20