Rails4:如何限制流媒体视频文件的访问?

时间:2014-02-10 20:17:32

标签: ruby-on-rails ruby-on-rails-4 video-streaming html5-video assets

我想在我的页面中放置一些html5视频,但只能向登录的用户提供对此视频的访问权限(因此,未登录的用户必须看不到视频,如果他们有网址的话):

<video width="320" height="240" controls>
  <source src="/video.mp4" type="video/mp4">
  <source src="/video.m4v" type="video/m4v">
Your browser does not support the video tag.
</video>

我在我的行动中尝试了类似的东西(使用前置过滤器进行访问限制):

  def video
    respond_to do |format|
      format.m4v{
        send_data File.join([Rails.root, "public", "videos", "sample.m4v"]), type: 'video/m4v', disposition: :inline
      }
      format.mp4{
        send_data File.join([Rails.root, "public", "videos", "sample.mp4"]), type: 'video/mp4', disposition: :inline
      }
    end
  end

但是这是将文件作为附件发送,而不仅仅是提供服务。

有可能吗?如果是的话,怎么办呢?

谢谢

2 个答案:

答案 0 :(得分:0)

您不想使用video_tag将视频呈现为视图的一部分吗?

如果是这样,只需使用您希望视频显示的ERB文件中的设计助手user_signed_in?。这样可确保只有已登录的用户才能在video_tag中看到该视频。< / p>

<% if user_signed_in? %>
  <%= video_tag ['/video.mp4', '/video.m4v'], controls: true, height: '240', width: '320' %>
<% end %>

有关video_tag的详细信息,请参阅: http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html#method-i-video_tag http://guides.rubyonrails.org/layouts_and_rendering.html#linking-to-videos-with-the-video-tag

答案 1 :(得分:0)

现在这个工作正常,我错过了一个选项,即:stream =&gt;真正。随着视频以正确的方式提供。

send_file File.join([Rails.root, "private/videos", @lesson.link_video1 + ".#{extension}"]), 
      :disposition => :inline, :stream => true

现在的问题是另一个问题,我在这里问了

Rails serving large files