IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby Discussion :

Affichage d'une vidéo en 206 Partial-Content qui ne fonctionne pas avec Thin ?


Sujet :

Ruby

  1. #1
    Membre régulier Avatar de luigifab
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 66
    Points : 73
    Points
    73
    Par défaut Affichage d'une vidéo en 206 Partial-Content qui ne fonctionne pas avec Thin ?
    Bonjour bonjour !

    Je lutte depuis quelques heures afin de faire fonctionner l'affichage d'une vidéo (balise vidéo) dont la source (le fichier) provient de la réponse d'un contrôleur.
    À tout hasard, ce contrôleur est fait en Ruby, il fonctionne avec Redmine.

    Tout est bon, sauf la lecture de la vidéo.


    Afin d'illustrer le problème, voici deux adresses avec la même vidéo :
    - http://www.luigifab.info/public/cras...#slideshow-2-4 : lighttpd directement / aucun problème
    - https://redmine.luigifab.info/news/139#slideshow-0-23 : code Ruby via Thin / ne fonctionne pas

    Je ne comprends pas d'où vient le problème (avec Firefox pour commencer)...

    Ci dessous un exemple des réponses HTTP que j'ai (le premier lien à gauche, le second à droite) :
    - La première correspond à l'affichage de la vidéo (l'aperçu de la vidéo s'affiche sur les 2 liens).
    - La seconde correspond au moment ou je clique par exemple à la 30ème secondes (l'aperçu de la vidéo ne s'affiche pas avec Thin)
    - La troisième requête est lancée en même que la deuxième.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    HTTP/1.1 206 Partial Content                     == HTTP/1.1 206 Partial Content
    	                                         ++ Strict-Transport-Security: max-age=31536000
    Accept-Ranges: bytes                             == Accept-Ranges: bytes
    Content-Range: bytes 0-22095028/22095029         == Content-Range: bytes 0-22095028/22095029
    Content-Length: 22095029                         == Content-Length: 22095029
    Last-Modified: Wed, 24 Sep 2014 17:28:39 GMT     == Last-Modified: Wed, 24 Sep 2014 15:06:42 +0000
    	                                         ++ Content-Disposition: inline; filename="604269.webm"
    	                                         ++ Content-Transfer-Encoding: binary
    Content-Type: video/webm                         == Content-Type: video/webm
    	                                         ++ Cache-Control: private
    	                                         ++ X-UA-Compatible: IE=Edge,chrome=1
    	                                         ++ X-Request-Id: a536701f422cbce7b7b6f4a292cf8cbe
    	                                         ++ X-Runtime: 0.021249
    	                                         ++ X-Rack-Cache: miss
    Date: Sun, 28 Sep 2014 13:50:54 GMT                 Date: Sun, 28 Sep 2014 13:50:51 GMT
    Server: lighttpd/1.4.35                             Server: thin 1.3.1 codename Triple Espresso
    Etag: "210449150"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    HTTP/1.1 206 Partial Content                     == HTTP/1.1 206 Partial Content
    	                                         ++ Strict-Transport-Security: max-age=31536000
    Accept-Ranges: bytes                             == Accept-Ranges: bytes
    Content-Range: bytes 332765-22095028/22095029    !! Content-Range: bytes 294379-22095028/22095029
    Content-Length: 21762264                         !! Content-Length: 21800650
    Last-Modified: Wed, 24 Sep 2014 17:28:39 GMT     == Last-Modified: Wed, 24 Sep 2014 15:06:42 +0000
    	                                         ++ Content-Disposition: inline; filename="604269.webm"
    	                                         ++ Content-Transfer-Encoding: binary
    Content-Type: video/webm                         == Content-Type: video/webm
    	                                         ++ Cache-Control: private
    	                                         ++ X-UA-Compatible: IE=Edge,chrome=1
    	                                         ++ X-Request-Id: bea364fcb1a614a24e74b348b2d7bf44
    	                                         ++ X-Runtime: 0.021604
    	                                         ++ X-Rack-Cache: miss
    Date: Sun, 28 Sep 2014 13:50:59 GMT                 Date: Sun, 28 Sep 2014 13:51:07 GMT
    Server: lighttpd/1.4.35                             Server: thin 1.3.1 codename Triple Espresso
    Etag: "210449150"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    HTTP/1.1 206 Partial Content                     == HTTP/1.1 206 Partial Content
    	                                         ++ Strict-Transport-Security: max-age=31536000
    Accept-Ranges: bytes                             == Accept-Ranges: bytes
    Content-Range: bytes 14221312-22095028/22095029  == Content-Range: bytes 14221312-22095028/22095029
    Content-Length: 7873717                          == Content-Length: 7873717
    Last-Modified: Wed, 24 Sep 2014 17:28:39 GMT     == Last-Modified: Wed, 24 Sep 2014 15:06:42 +0000
    	                                         ++ Content-Disposition: inline; filename="604269.webm"
    	                                         ++ Content-Transfer-Encoding: binary
    Content-Type: video/webm                         == Content-Type: video/webm
    	                                         ++ Cache-Control: private
    	                                         ++ X-UA-Compatible: IE=Edge,chrome=1
    	                                         ++ X-Request-Id: 2167c443b84cf73602171516e9d0010c
    	                                         ++ X-Runtime: 0.022575
    	                                         ++ X-Rack-Cache: miss
    Date: Sun, 28 Sep 2014 13:50:59 GMT                 Date: Sun, 28 Sep 2014 13:51:07 GMT
    Server: lighttpd/1.4.35                             Server: thin 1.3.1 codename Triple Espresso
    Etag: "210449150"
    À noter que c'est la même vidéo sur les 2 pages (un md5sum permet de s'en assurer).
    Quelqu'un a t-il une idée ?

  2. #2
    Membre régulier Avatar de luigifab
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 66
    Points : 73
    Points
    73
    Par défaut
    Trouvé ! C'est moi qui fait n'importe quoi dans mon contrôleur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    file_begin = 0
    file_size = @attachment.filesize
    file_end = file_size - 1
     
    if request.headers['Range']
    match = request.headers['Range'].match(/bytes=(\d+)-(\d*)/)
    if match
      file_begin = match[1].to_i
      file_end = match[2].to_i if match[2] && !match[2].empty?
    end
    end
     
    response.header['Accept-Ranges']  = 'bytes'
    response.header['Content-Range']  = 'bytes ' + file_begin.to_s + '-' + file_end.to_s + '/' + file_size.to_s
    response.header['Content-Length'] = (file_end - file_begin + 1).to_s
    response.header['Last-Modified']  = @attachment.created_on.strftime('%a, %d %b %Y %H:%M:%S %z').to_s
     
    if !request.headers['Range']
    send_file(@attachment.diskfile,
      :filename => filename_for_content_disposition(@attachment.filename),
      :type => @attachment.getMimeType, :disposition => 'inline')
    else
    send_data(File.binread(@attachment.diskfile, file_end - file_begin + 1, file_begin),
      :filename => filename_for_content_disposition(@attachment.filename),
      :type => @attachment.getMimeType, :disposition => 'inline', :status => '206 Partial Content')
    end
     
    response.close
    Le response.close n'est pas très au point puisque j'atteins très souvent le maximum de connexion de mon serveur rien qu'en navigant dans la vidéo.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/03/2014, 12h52
  2. [AJAX] xmlhttprequest.send qui ne fonctionne pas avec une variable !
    Par hoaxpunk dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/03/2009, 19h17
  3. LIKE qui ne fonctionne pas avec une espace
    Par CinePhil dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/10/2008, 17h46
  4. Réponses: 2
    Dernier message: 10/07/2008, 15h30
  5. un For Each qui ne fonctionne pas avec une collection maison !
    Par grenouillesiverte dans le forum Windows Forms
    Réponses: 7
    Dernier message: 01/09/2007, 22h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo