2011-05-23 19 views
16

birden fazla video istekleri yapar. Ben dosyayı .NET Framework v2.0 çalıştıran IIS 7 üzerinde barındırılan bir ASP.NET .ashx dosyası aracılığıyla el ile iletiyorum.Mobil Safari Mobil safari HTML5 kullanan iPad için bir web uygulama tasarlama

temel kod kısmen şuna benzer:

// If we receive range header only transmit partial file 
if (context.Request.Headers["Range"] != null) 
{ 
    var fi = new FileInfo(filePath); 
    long fileSize = fi.Length; 

    // Read start/end index 
    string headerRange = context.Request.Headers["Range"].Replace("bytes=", ""); 
    string[] range = headerRange.Split('-'); 
    int startIndex = Convert.ToInt32(range[0]); 
    int endIndex = Convert.ToInt32(range[1]); 

    // Add header Content-Range,Last-Modified 
    context.Response.StatusCode = (int)HttpStatusCode.PartialContent; 
    context.Response.AddHeader(HttpWorkerRequest.GetKnownResponseHeaderName(HttpWorkerRequest.HeaderContentRange), String.Format("bytes {0}-{1}/{2}", startIndex, endIndex, fileSize)); 
    context.Response.AddHeader(HttpWorkerRequest.GetKnownResponseHeaderName(HttpWorkerRequest.HeaderLastModified), String.Format("{0:r}", fi.CreationTime)); 

    long length = (endIndex - startIndex) + 1; 
    context.Response.TransmitFile(filePath, startIndex, length); 
} 
else 
    context.Response.TransmitFile(filePath); 

Şimdi ne olacak sonu beni karıştırması safari kullanmak gibi görünüyor istemek için protokoller olduğunu. İstemciler aracılığıyla istekleri proxy'den aprox 2MB dosyası için aşağıdakileri aldım.

Fiddler requests

NOT: Bir mp4 dosya isterken, doğrudan, protokol ve istek miktarı bunu okumak için izin verir 2 byte rica aynı

  1. İlk vardır IIS 7 aracılığıyla sunulan 'İçerik Aralığı' başlığı.
  2. Şimdi tüm içerik isteğinde
  3. (?) -
  4. Yine adımı 1. & 2. yapmaya devam
  5. (??)
  6. -
  7. Şimdi dosyanın sadece bazı kısımlarını istekleri (dosya büyükse ???)

son adımlar çok daha fazla olacaktır. Her isteğin dosyanın eşit olarak bölünmüş bir kısmını içerdiği en fazla 99 isteği test ettim. Bu mantıklı ve bence beklenecek olan şey. Anlayamadığım şey, ilk 2 bayt için 2 başlangıç ​​isteğinin yanı sıra, dosyanın tamamını farklı bölümlerde istemeden önce tüm dosya için 2 istek oluşturmasıdır.

bu 2 arasında indirilen dosyaya neden sonuçlandırmak üzere - dosyanın uzunluğuna ve kullanıcı yeterince uzun saatler olmasına bağlı olarak, 3 kez.

kimse bu davranışın mantıklı ve belki birden fazla indirme önlemek için neler yapabileceğini açıklar. Teşekkürler. Sorunuzun benim Başına yorum

+0

i aynı şey geldi:

İşte konuyla ilgili benim orijinal (cevapsız) sorudur. onun da ipod ve mp3 dosyaları ile uğraşıyorsanız. Ne yazık ki çözüm yok ... – worenga

+0

Çok büyük (30meg) bir videoyla aynı şeyi fark ettim. Bazen istek, bir iPad'den geldiğinde tüm dosya için istekte bulunur! –

+0

MPMoviePlayerController içindeki mp3 dosyaları ile aynı deneyimi yaşadım. İşte bunun hakkında cevapsız bir soru sordum. Sorumun, yapılan isteklerle ilgili biraz daha fazla bilgisi var. http://stackoverflow.com/questions/4855485/mpmovieplayercontroller-not-playing-full-length-mp3 – TomSwift

cevap

1

, geçmişte benzer bir sorun yaşadım. Sunucunun denetimini (denemediyseniz) deneyebilirseniz deneyebileceğiniz bir şey, dosyanın gzip veya kimlik kodlamasını devre dışı bırakmaktır. Tüm içeriğin ilk talebinde (listenizde # 2), içeriğin gzip kodlamasıyla (sıkıştırılmış) sorulması gerektiğine inanıyorum. Belki de IIS'nizi gzip-kodlama isteği için dosyaya hizmet etmeyecek şekilde yapılandırabilirsiniz.

https://stackoverflow.com/questions/4855485/mpmovieplayercontroller-not-playing-full-length-mp3

İlgili konular