Problema nella riproduzione di video su Safari per iOS e macOS

Ciao a tutti,

Stiamo riscontrando un problema su 3.6.0.beta3-latest in cui gli utenti iPhone e Safari su macOS vedono uno spinner infinito quando tentano di riprodurre un video .mp4 (H.264) caricato. Gli stessi video venivano riprodotti correttamente fino a poco tempo fa (non sono sicuro di quale fosse l’ultima versione di Discourse in cui funzionavano).

Sembra che Safari effettui una richiesta GET per recuperare i primi byte (Range: bytes=0-1) del video (ad esempio, /uploads/default/original/1X/44395933ccadf546b1b1ce65b742e24f900b33fa.mp4), che restituisce 200 ma fallisce per ragioni che non vengono mostrate nella console JavaScript o nell’ispettore di rete (solo evidenziato in rosso, nessun messaggio di errore). Se lo stesso URL viene incollato direttamente nel browser, è possibile scaricare correttamente l’intero video e riprodurlo.

Firefox e Chrome su macOS non hanno problemi a riprodurre i video. Anche i browser su Android non sembrano avere problemi.

I video sono piccoli (nell’ordine dei 10 MB). Non stiamo utilizzando S3 per i caricamenti.

Qualcun altro può confermare o smentire di non avere problemi con iPhone/Safari nella riproduzione di video? E c’è qualcos’altro che posso diagnosticare per far luce sul problema?

1 Mi Piace

Sto riscontrando un problema simile con il mio forum, ma testare gli stessi file qui sembra funzionare bene. Solo gli utenti iOS/Safari sono interessati. Alcuni video nel contenitore WEBM funzionano, ma la maggior parte degli mp4, mov, ecc., no.

2 Mi Piace

Ciao, ho riscontrato problemi di recente e ho commentato in un thread avviato da @tsk che è stato rimosso. Stavo lavorando con l’ipotesi che il problema fosse con i video codificati in mp4/av1 poiché i video webm/vp9 venivano riprodotti sul nostro forum, ma sembra che il problema sia più di questo per gli utenti Safari.

Per ridere, ho verificato di essere sull’ultima versione, anche se non ho visto nulla nei commit che indichi che influenzi gli utenti Apple.

image

La mia configurazione utilizza l’archiviazione locale per i caricamenti. La maggior parte dei thread è bloccata dietro il livello di fiducia, ma stiamo testando in una categoria pubblica qui:

Puoi condividere un link a detto video, o caricarlo qui?

1 Mi Piace

@Les79 Ho caricato questo video in entrambi i forum come test.

Puoi confermare che il video nel thread di riproduzione di pixelspace safari non funziona per te, ma quello qui sì?

1 Mi Piace

Sì, il video pubblicato qui funziona in Safari sia sul mio iPhone 13 che sul MacBook Pro M3. Non funziona nel forum PixelSpace.

2 Mi Piace

Questo video è H.264 in MP4, dovrebbe essere riproducibile su tutti i browser che eseguono Discourse. Dato che funziona qui e non sulla tua istanza, sospetto che ci sia qualcosa di configurato in modo errato lì.

Esegui qualche reverse proxy aggiuntivo sopra Discourse? Ho visto alcune intestazioni su questa istanza che non esistono nelle installazioni standard, quindi sono curioso di sapere cosa è stato fatto lì.

1 Mi Piace

Lo stesso vale per me.

Uso questo container come proxy inverso

Avevo considerato che questo potesse essere in parte responsabile, ma la configurazione non è cambiata e questo è un problema nuovo per la versione 3.6.0-beta2, per quanto ho potuto capire. Ho iniziato a ricevere lamentele dagli utenti Apple dopo la ricostruzione. Simile a @mandyk, non ricordo quale versione stessimo usando in precedenza.

image

C’è un’impostazione particolare in Discourse che dovrei valutare?

1 Mi Piace

Non è Discourse, ma il proxy.

Sfortunatamente non possiamo coprire realisticamente tutte le infinite possibilità di configurazioni quando le persone aggiungono cose sopra Discourse, motivo per cui spediamo con una configurazione nota e valida nell’installazione standard che viene fornita con un proxy inverso configurato per Discourse.

Potrebbe mancare una singola direttiva di configurazione nginx, ma dovrai approfondire questo aspetto.

1 Mi Piace

Confermo anche che il video pubblicato in questo thread viene riprodotto correttamente in Safari.

Non sono sicuro se questo sia rilevante, ma una differenza che riesco a notare è che il video in questo thread viene servito da S3. Quando Safari effettua la prima richiesta range, S3 risponde con HTTP 206, il che sembra corretto. Sia l’istanza Pixelspace che la mia istanza non utilizzano S3, e sembra che Discourse risponda con HTTP 200 (il che non sembra corretto, poiché la richiesta include un header Range: bytes=0-1).

Ho caricato lo stesso video sulla mia istanza di test su
https://discourse-on-a-pi5.falco.dev/t/test-safari-bug/25?u=falco

Confermato che il video su discourse-on-a-pi5.falco.dev non funziona per me su Safari. Di nuovo, posso vedere che la richiesta video restituisce 200 invece di 206.

Modifica: Inoltre, sembra che la risposta stia tentando di restituire l’intero video anche se è stato specificato Range: bytes=0-1. Sospetto che le richieste di intervallo vengano ignorate e Safari sembra esserne sensibile.

Ulteriore modifica: Ciò probabilmente significa che la ricerca efficiente su video più grandi è interrotta anche per browser diversi da Safari, poiché devono scaricare l’intero video prima di poter cercare.

3 Mi Piace

La riproduzione non funziona per me su Safari

E funziona su Test Safari Bug - Discourse, giusto?

Sì, quello funziona! E vedo HTTP 206 lì.

1 Mi Piace

Sembra una regressione nella nostra configurazione nginx predefinita, grazie per la segnalazione @mandyk

1 Mi Piace

Grazie a @Adubs per aver pubblicato un contro-ripro da confrontare! E al team di Discourse per un ottimo strumento.

5 Mi Piace

Quindi, per ulteriore divertimento, ho copiato il mio app.yml in app2.yml, ho cambiato l’URL e un paio di directory, e ora abbiamo testfor.pixelspace.xyz che esegue il branch stabile.

https://testfor.pixelspace.xyz/t/safari-playback-test/8

I miei utenti confermano che qui funziona tramite lo stesso proxy.

modifica: ora vedo la conferma del problema. Mi scuso per non aver pensato di provare questo prima. Grazie per la tua intuizione @mandyk

Non l’avrei capito da solo.

3 Mi Piace