【问题标题】:how to show thumbnails for vimeo and youtube embedded links in ruby on rails?如何在 ruby​​ on rails 中显示 vimeo 和 youtube 嵌入链接的缩略图?
【发布时间】:2013-06-29 10:29:47
【问题描述】:

我已在我的网站中嵌入了 youtube 和 vimeo 链接,并尝试将视频的缩略图显示为点击时播放的链接。

我尝试了 gem "has_vimeo_video" 但它只接受 vimeo 视频。所以我想显示两个视频的缩略图,即 youtube 和 vimeo。

请需要解决方案。

谢谢

【问题讨论】:

    标签: youtube ruby-on-rails-3.2 vimeo


    【解决方案1】:

    video_info gem 非常适合获取缩略图:

    https://github.com/thibaudgg/video_info

    【讨论】:

      【解决方案2】:

      我昨天发现有carrierwave-video-thumbnailer 这很酷。它基本上可以满足您的需求

      Carrierwave 的缩略图插件。它混合到您的上传器设置中,并可以轻松地为您上传的视频制作缩略图。该软件目前还处于 Alpha 阶段,因此欢迎任何形式的开源合作。

      但您当然需要在您的应用程序中包含载波。希望这会有所帮助

      Carreierwave 是一个上传器,可以让用户在他们的应用中上传内容,我认为

      更新

      您也可以使用embedly,它允许您将嵌入式媒体添加到您的应用程序中。 API 提供了很多响应选项,如 here 所示。在这样做时,您可以执行以下操作:

      $.embedly('http://www.youtube.com/watch?v=_FE194VN6c4',
                 {maxWidth: 600,
                     elems: $('#element'),
                   success: function(oembed, dict){
                              alert(oembed.title);
                            });
      

      elems 属性是您希望嵌入视频的位置,以便在粘贴链接时嵌入视频。您需要传递视频 url 并使用 jQuery 选择器从您将 url 放在 html 中的任何位置获取它。

      您的另一种选择是查看以下auto_html gem

      【讨论】:

      • 因为我只是嵌入链接并将 vimeo 和 youtube 链接保存到我的数据库中,然后想要显示缩略图并播放这些视频,所以carrierwave 会为嵌入链接制作缩略图吗?
      【解决方案3】:

      在“/app/helper”中添加一个新文件“thumbnail_helper.rb”。将以下代码复制并粘贴到该文件中:

      module ThumbnailHelper
      
        # Regex to find YouTube's and Vimeo's video ID
        YOUTUBE_REGEX = %r(^(http[s]*:\/\/)?(www.)?(youtube.com|youtu.be)\/(watch\?v=){0,1}([a-zA-Z0-9_-]{11}))
        VIMEO_REGEX = %r(^https?:\/\/(?:.*?)\.?(vimeo)\.com\/(\d+).*$)
      
        # Finds YouTube's video ID from given URL or [nil] if URL is invalid
        # The video ID matches the RegEx \[a-zA-Z0-9_-]{11}\
        def find_youtube_id url
          url = sanitize url
          matches = YOUTUBE_REGEX.match url.to_str
          if matches
            matches[6] || matches[5]
          end
        end
      
        # Finds youtube video thumbnail
        def get_youtube_thumbnail url
          youtube_id = find_youtube_id url
          result = "http://img.youtube.com/vi/#{youtube_id}/0.jpg"
        end
      
        # Finds Vimeo's video ID from given URL or [nil] if URL is invalid
        def find_vimeo_id url
          url = sanitize url
          matches = VIMEO_REGEX.match url.to_str
          matches[2] if matches
        end
      
        # Finds vimeo video thumbnail
        def get_vimeo_thumbnail url
          vimeo_id = find_vimeo_id url
          result = URI.open("http://vimeo.com/api/v2/video/#{vimeo_id}.json").read
          begin
            JSON.parse(result).first['thumbnail_large']
          rescue StandardError
            nil
          end
        end
      
        # Main function
        # Return a video thumbnail
        # If the url provided is not a valid YouTube or Vimeo url it returns [nil]
        def get_video_thumbnail(url)
          if find_vimeo_id(url)
              get_vimeo_thumbnail(url)
          elsif find_youtube_id(url)
              get_youtube_thumbnail(url)
          end
        end
      end
      

      现在从您的视图中调用 get_video_thumbnail('video_url')。它将返回给定视频的缩略图。

      【讨论】:

        【解决方案4】:

        你不需要任何宝石来完成这么简单的任务

        url = 'https://vimeo.com/126100721'
        id = url.partition('vimeo.com/').last
        result = URI.open("http://vimeo.com/api/v2/video/#{id}.json").read
        
        begin
          JSON.parse(result).first['thumbnail_large']
        rescue StandardError
          nil
        end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-20
          • 2012-02-11
          • 2020-12-09
          • 2012-08-13
          • 2017-04-25
          • 1970-01-01
          • 2013-01-20
          相关资源
          最近更新 更多