Воспроизведение MP3 через Ruby on Rails в Chrome - PullRequest
1 голос
/ 30 сентября 2011

Я пишу приложение Ruby on Rails, которое позволяет пользователю загружать mp3-файлы, а затем воспроизводить их.У меня это работает до такой степени, что пользователь может делать такие вещи, НО есть проблема при поиске в песне.Если пользователь ищет впереди (или позволяет ему играть) место в песне, обычно около 2/3 или 3/4 пути через песню, а затем пытается вернуться к началу (например, 0:20),таймер воспроизведения перейдет к 0:20, как и должно быть, но реальное аудио начнется снова, как если бы пользователь стремился к 0: 00.

Сейчас я просто пытаюсь заставить песню воспроизводиться вОсновной html5 mp3-плеер chrome, который используется при передаче mp3-файла.Это код, который я использую для обработки файла, надеюсь, со всеми правильными заголовками:

  file_begin = 0
  file_size = @media.file_file_size 
  file_end = file_size - 1

  if !request.headers["Range"]
    status_code = "200 OK"
  else
    status_code = "206 Partial Content"
    match = request.headers['range'].match(/bytes=(\d+)-(\d*)/)
    if match
      file_begin = match[1]
      file_end = match[1] if match[2] && !match[2].empty?
    end
    response.header["Content-Range"] = "bytes " + file_begin.to_s + "-" + file_end.to_s + "/" + file_size.to_s
  end
  response.header["Content-Length"] = (file_end.to_i - file_begin.to_i + 1).to_s
  response.header["Last-Modified"] = @media.file_updated_at.to_s

  response.header["Cache-Control"] = "public, must-revalidate, max-age=0"
  response.header["Pragma"] = "no-cache"
  response.header["Accept-Ranges"]=  "bytes"
  response.header["Content-Transfer-Encoding"] = "binary"
  send_file(DataAccess.getUserMusicDirectory(current_user.public_token) + @media.sub_path, 
            :filename => @media.file_file_name,
            :type => @media.file_content_type, 
            :disposition => "inline",
            :status => status_code,
            :stream =>  'true',
            :buffer_size  =>  4096)

Буду признателен за понимание этой проблемы.Я чувствую, что я так близко, потому что это почти все работает, за исключением поиска в начале, вызывающего новый запрос.

Спасибо!

1 Ответ

0 голосов
/ 30 сентября 2011

Требуется ли повторное изобретение колеса?Причина, по которой я спрашиваю, заключается в том, что вы могли просто позволить пользователю загрузить файл MP3 и использовать функцию html5, когда вы настраиваете Chrome.Скрепка могла бы позаботиться о загрузке, куда-нибудь предпочтительнее в общедоступном каталоге, и вы просто передали этот путь к тегу .

Сумасшедшие идеи удалены измои комментарии (ниже), чтобы не запутать других ТАК читателей.См. Мой последний комментарий по поводу решения, но Amazon S3 - в значительной степени лучшее решение.

...