Usé hls.js para implementar mi reproductor de video y tengo algunos archivos ts en https:/// con un archivo m3u8.
Leí el archivo m3u8 con php y envié el contenido a js (res["manifest"]=el contenido de m3u8), luego lo puse en hls.loadSource(), como se muestra a continuación.
var manifest = res["manifest"]; var blob = new Blob([manifest]); var hls = new Hls(); var url = URL.createObjectURL(blob); hls.loadSource(url); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED, function() { video.load(); });Después de esto, el hls comenzó a obtener los archivos enumerados en m3u8 por
blob:https://<my domain>/<video name>.mp4Por supuesto, no puede encontrar los archivos porque están en
https://<my domain>/<video name>.mp4en vez de
blob:https://<my domain>/<video name>.mp4La URL comienza con "blob:" es creada por URL.createObjectURL en el front-end, pero ahora quiero que hls envíe solicitudes a video.php, luego video.php lee los archivos ts y responde el contenido desde el lado del servidor.
¿Algún método para hacer esto? (modificar el código fuente, cambiar la configuración,... etc.)
No puedo creer que lo logré.
Modifiqué el código fuente de src/loader/fragment.ts a continuación:
@@ -78,9 +78,7 @@ export class BaseSegment { get url(): string { if (!this._url && this.baseurl && this.relurl) { - this._url = buildAbsoluteURL(this.baseurl, this.relurl, { - alwaysNormalize: true, - }); + this._url = 'video.php?f=' + this.relurl; } return this._url || ''; }luego se vuelve a compilar con webpack. Ahora envía la solicitud de obtención a video.php con el parámetro de consulta "f=<nombre del video>.mp4", para que pueda procesar la solicitud con mi video.php.