Serving a FLV through rails

Hello list,

The website I’m developing has many FLV-encoded videos as it’s main products. Currently I’m just throwing the FLVs in a public folder, however, the client would like more control over the serving of these files. I don’t want the webserver to serve it raw, I’d like a Rails controller’s action to serve it, something like /videos/render/1. This action would in turn load the FLV, process any logic (such as checking if the user has access to it etc) and only then serve it to the client. However, I have no clue on how I could possibly accomplish this. Any help would be very much appreciated!

Thanks,

Marcelo.

On thing that may not have been clear, the example I gave of /videos/render/1 would not render html with a code to embed a FLV, instead, it would send the actual FLV file and then the other viewer pages would use this URL to access the video files and not the file name as it would have been the case if the files were served via the webserver (/videos/file.flv) - the point here is that I need to process logic before serving the file something that I would like to integrate into my rails app (such as checking if the logged user has permissions to get this file!).

Thanks!

Hey, I don’t know if you’ve seen this, but it might be informative:

http://blog.snowonrails.com/articles/2007/05/31/how-to-build-a-mini-youtube-using-activemessaging-plugin-and-amazon-s3

Hi Matthew, thanks for the reply - yes, I’ve seen this and it is a very good tutorial, however it does not show how to do what I want - serve FLV through Ruby/Rails. Take for example the serving of images through a script - instead of outputing HTML, you output binary data and tell the client (browser) that it is a image/jpg (I did it many times in PHP) - What I would like to know is how could I do this in Ruby/Rails.

Marcelo.

Marcelo de Moraes Serpa wrote:

Hi Matthew, thanks for the reply - yes, I've seen this and it is a
very good tutorial, however it does not show how to do what I want -
serve FLV through Ruby/Rails. Take for example the serving of images
through a script - instead of outputing HTML, you output binary data
and tell the client (browser) that it is a image/jpg (I did it many
times in PHP) - What I would like to know is how could I do this in
Ruby/Rails.

Look for the send_file method on api.rubyonrail.org. In most cases
involving large files (like FLV) it won't be enough though. You most
likely will get huge Ruby processes lying around because of buffering.
Look for secure download plugins for mongrel or your favorite HTTP
server to solve this problem.

Lionel

Hi Roderick, thanks a bunch for this!

I think what you're looking for is X-Sendfile. There's a Rails plugin
at http://john.guen.in/rdoc/x_send_file/ and it works with an Apache
module that you can find at http://john.guen.in/rdoc/x_send_file/.

This allows Rails to handle the decision to serve the file, but then
let the file itself be statically served. You definitely don't want to
serve video files through send_file.

Michael
www.buildingwebapps.com