Rev. 2.73

최근 파이어폭스(3.6.3)에서 HTML5 Video 요소에 삽입된 ogv 포멧 동영상이 재생되지 않는 문제가 있어 삽질을 하다가 알아낸 사실입니다. 이 문제는 서버의 응답 헤더를 설정해서 해결할 수 있더군요. 예전에는 chunk로 응답해도 잘만 나오던 녀석이 이제는 Partial Content로 응답해 주어야 합니다. 아래는 PHP로 작성된 헤더 설정 코드입니다.

<?php
  $file = basename($_GET['file']);
  $range = 0;
  $size = filesize($file);
  $maxSpeed = 512;

  header('Keep-Alive: timeout=2, max=99');
  header('Connection: Keep-Alive');
  header('Content-Type: video/ogg'); 
  header("Accept-Ranges: bytes");
  if (isset($_SERVER['HTTP_RANGE'])) {
    list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']);
    str_replace($range, "-", $range);
    $size2 = $size - 1;
    $new_length = $size - $range;
    header("HTTP/1.1 206 Partial Content");
    header("Content-Length: $new_length");
    header("Content-Range: bytes $range$size2/$size");
  } else {
    $size2 = $size - 1;
    header("Content-Range: bytes 0-$size2/$size");
    header("Content-Length: ".$size);
  }

  if ($size == 0 ) die('Zero byte file! Aborting download');
  set_magic_quotes_runtime(0); 
  $fp = fopen("$file", "rb");

  fseek($fp, $range);

  while(!feof($fp) and (connection_status() == 0)) {
    set_time_limit(0);
    print(fread($fp, 1024 * $maxSpeed));
    flush();
    ob_flush();
    sleep(1);
  }

  fclose($fp);
?>

Comments

Got something to add? You can just leave a comment.

Your Reaction Time!

captcha

avatar