Domanda

Sto provando a trasmettere video QuickTime su un iPhone da un'applicazione Web ASP.NET utilizzando un HttpHandler. Quando si ospita l'applicazione Web da IIS 5.1 (Windows XP), il lettore video si apre e quindi visualizza l'errore "Il server non è configurato correttamente". Tuttavia, quando si utilizza IIS 7.5 (Windows 7), il video viene riprodotto correttamente.

L'ambiente di produzione esegue IIS 6.0 e presenta lo stesso problema, in cui il tentativo di riprodurre video su iPhone tramite Safari per dispositivi mobili visualizza l'errore riportato sopra.

Ho controllato le intestazioni Http e sembrano essere praticamente le stesse tra i due server (a parte alcuni, come l'intestazione Server , che ovviamente sarà diversa), tranne per il fatto che apparire in un ordine diverso, anche se dubito che ciò stia causando il problema.

Secondo questa discussione su Google I gruppi, aggiungendo l'intestazione 'Accept-Ranges: bytes' possono essere d'aiuto, anche se questo non ha fatto alcuna differenza per noi. Ho anche aggiunto l'intestazione ETag, senza fortuna.

Il codice effettivamente responsabile dell'invio del file è simile al seguente:

Context.Response.Buffer = true;
Context.Response.ContentType = "video/x-m4v";

Context.Response.AppendHeader("Content-Disposition", "filename=\"Video.m4v\"");
Context.Response.AppendHeader("Content-Length", "23456789");

Context.Response.AppendHeader("Accept-Ranges", "bytes");
Context.Response.AppendHeader("ETag", GetETag(path));

Context.Response.TransmitFile(path);

Il codice sopra il quale trasmette i file sembra funzionare correttamente e i file video vengono riprodotti correttamente in tutti i browser desktop e durante l'hosting da IIS 7.5 su Windows 7. Il problema è evidente solo quando si tenta di riprodurre file video su iPhone utilizzando Mobile Safari che utilizza il codice sopra con l'applicazione Web ASP.NET ospitata su IIS 5.1 o IIS 6.0.

Qualcun altro ha sperimentato qualcosa del genere e ha avuto idee su cosa posso fare per farlo funzionare?

È stato utile?

Soluzione

Perché imposti Response.Buffer su true?

Non puoi semplicemente aggiungere " Accept-Ranges " intestazione a meno che non si assicuri anche che il server supporti le richieste di intervallo HTTP. Se il lettore client richiede supporto per le richieste di intervallo e il server rifiuta di gestirle, sembra logico che la richiesta venga rifiutata.

Potresti provare a usare Fiddler come proxy inverso e vedere se l'iPhone effettua una richiesta di intervallo. http://www.fiddler2.com/Fiddler/Help/ReverseProxy.asp

Altri suggerimenti

Dopo alcune ricerche, ho trovato l'articolo Richieste specifiche di intervallo in ASP.NET che descrivono il problema esatto che stavo riscontrando. L'implementazione della classe RangeRequestHandlerBase da questo sito (con alcune piccole modifiche per adattarsi alla struttura del nostro progetto esistente) sembra aver risolto il problema e la riproduzione video ora funziona correttamente da IIS5 / 6.

@Eric - Ho valutato la tua risposta poiché il tuo commento è stato una spinta nella giusta direzione. La semplice aggiunta dell'intestazione "Accept-Ranges" non era sufficiente (nonostante funzionasse in IIS7) e il gestore http doveva essere modificato per gestire le richieste di intervallo e garantire l'invio dei dati corretti.

Usa qualcosa come Fiddler per esporre la risposta HTTP esatta proveniente dai server. Sfuma la stringa User-Agent del client in modo che corrisponda al browser iPhone (o usi semplicemente Safari?) E confronta l'output di IIS 5.1 e 7.5. Ovviamente i flussi di risposta non sono identici o funzionerebbe su entrambi.

Potresti anche usare NetMon, che è un ottimo strumento ... e ti permetterebbe di testare con l'iPhone stesso.

Mi dispiace non ho una risposta specifica per te, ma penso che dovrai sporcarti le mani con questa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top