es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Función Video.js Unit Level Hls.xhr.beforeRequest en español: Función antes de solicitud de XHR en nivel de unidad de Video.js HLS.

Estoy siguiendo este tutorial de vídeo de Amplify para cargar y transmitir vídeo bajo demanda. Amplify Video restringe automáticamente el “output” del bucket S3 de los vídeos HLS, en el que se debe añadir un token a cada URL de HLS que se ejecute desde la unidad de Video.js para poder acceder a él.

El tutorial recomienda utilizar la función videojs.Hls.xhr.beforeRequest para añadir este token a cada solicitud de m3u8 que se ejecute, como sigue:

videojs.Hls.xhr.beforeRequest = (options) => {
options.uri = ${options.uri}${token};
return options;
}

aunque esta es una función global, por lo que falla si hay 2 unidades de vídeo separadas cargando vídeos diferentes en la página.

¿Hay alguna manera de imitar la función de la función beforeRequest, pero a nivel de unidad en lugar de a nivel global?

EDIT:

Tengo una solución temporal, aunque es bastante desordenada y estaría abierto a otras soluciones. En lugar de pasar el token a cada unidad individual, tengo un objeto global videoTokens en el que cada token se establece como {videoId: token}, luego en mi función beforeRequest obtengo la ID de la URL, luego saco el token de ese objeto global (estoy usando Vue y Vuex):

videojs.Vhs.xhr.beforeRequest = (options) => {
  const splitUrl = options.uri.split(".");
  const splitId = splitUrl[splitUrl.length - 2].split("/");
  const id = splitId[splitId.length - 2];
  const token = this.$store.state.videoTokens[id] || "";

options.uri = ${options.uri}${token};
  return options;
}

Luego, en mi beforeDestroy en el componente, elimino esa clave para evitar almacenar demasiadas.

Como se mencionó, estaría abierto a otras soluciones más limpias.

Tags:  , ,

Answer

Comments are closed.