Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

260
Views
No se puede reproducir video HTML5 con fuente Blob en dispositivos iOS

Tengo una aplicación web React que obtiene la URL del video de un servidor, luego solicita el video como un blob e intenta reproducirlo en una etiqueta de video HTML. Estoy haciendo esto porque el cliente a veces tiene problemas con Internet y los videos pueden tartamudear mientras se reproducen, prefieren esperar más tiempo para que se cargue el video y luego reproducirlo sin problemas que tener un video entrecortado. (También estoy guardando el blob en IndexedDB como caché, pero eso no está relacionado con el problema que tengo ahora, solo estoy agregando esto como contexto, pero se ha desactivado mientras trato de resolver este problema de iOS)

Tengo una función para descargar el video, que luego devuelve el Blob y una URL creada a partir de ese objeto blob.

 async function downloadVideo(videoUrl) { return new Promise(function(resolve, reject) { var req = new XMLHttpRequest(); req.open('GET', videoUrl, true); req.responseType = 'blob'; req.onload = function() { // Onload is triggered even on 404 // so we need to check the status code if (this.status === 200) { var videoBlob = new Blob([this.response], { type: 'video/mp4' }); console.log('Video blob?', videoBlob); var vid = { objBlob: videoBlob, vidURL: URL.createObjectURL(videoBlob) }; // Video is now downloaded and converted into ObjectURL resolve(vid); } else { reject('Video download failed with status ', this.status); } }; req.onerror = function() { reject('Unable to Download Video'); }; req.send(); }); }

Y luego tengo el elemento que reproduce el video blob:

 <video muted={true} autoPlay={true} loop={false} onError={err => { alert('Video load error. ' + err.target.error.iosMessage); }} src={downloadedVideo.url} />

Ese downloadedVideo.url es la URL del objeto blob creado en la función DownloadVideo.

Todo esto funciona bien en el escritorio (Linux) y en Android, pero el video no se reproduce desde Blob en dispositivos iOS. He probado Safari, Chrome y Firefox y el problema es el mismo. en iOS puedo obtener el video Blob y crear una URL a partir de él, pero cuando lo paso como src no funciona, todo lo que puedo obtener del error (un objeto MediaError) es el código, 4, pero el mensaje es indefinido.

Si en lugar del blob paso la URL del video original como src, funciona en todos los dispositivos, pero no puedo almacenar el video en caché y esta característica tendrá que eliminarse.

Probé varios videos y me aseguré de que la codificación fuera compatible con iOS.

No pude encontrar nada que indique que iOS no es compatible con las URL de Blob para video, por lo que debería funcionar, pero no puedo entender por qué no es así.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Hay un error en webkit en las compilaciones de iOS 15, que no incluyen encabezados de rango de bytes para direcciones URL de blob.

Ver: https://bugs.webkit.org/show_bug.cgi?id=232076 y Safari en iOS 15 problemas de reproducción de video en línea

Como se señaló en el problema del webkit, existe una solución alternativa que utiliza un trabajador de servicio. https://bug-232076-attachments.webkit.org/attachment.cgi?id=442151 Tenga en cuenta que los trabajadores de servicio no funcionan en WKWebView.

about 4 years ago · Juan Pablo Isaza Report

0

Tengo un problema similar, pero solo en iOS 15.x (funciona bien hasta iOS 14.5)

Creo que es un error en iOS 15.x; consulte también https://developer.apple.com/forums/thread/693447

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!