Sha256: 7c3fc9b8375ce5fabedd719598ff0980da55377bb2a36738e74de274f0d83a26

Contents?: true

Size: 1.94 KB

Versions: 2

Compression:

Stored size: 1.94 KB

Contents

require 'uri'
require 'mime/types'

module AirPlayer
  # http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AirPlayGuide/PreparingYourMediaforAirPlay/PreparingYourMediaforAirPlay.html
  #
  # File Extension | MIME type       | Ruby `mime-types`
  # -------------- | --------------- | -----------------------------
  # .ts            | video/MP2T      | video/MP2T 
  # .mov           | video/quicktime | video/quicktime
  # .m4v           | video/mpeg4     | video/vnd.objectvideo
  # .mp4           | video/mpeg4     | application/mp4, video/mp4
  SUPPORTED_MIME_TYPES = %w(
    application/mp4
    video/mp4
    video/vnd.objectvideo
    video/MP2T
    video/quicktime
    video/mpeg4
  )

  SUPPORTED_DOMAINS = %w(
    youtube
    youtu.be
  )

  class Media
    attr_reader :title, :path, :type

    def initialize(target)
      path = File.expand_path(target)

      if File.exist? path
        @path  = path
        @title = File.basename(path)
        @type  = :file
      else
        uri = URI.encode(target)
        @path  = online_media_path(uri)
        @title = online_media_title(uri)
        @type  = :url
      end
    end

    def self.playable?(path)
      MIME::Types.type_for(path).each do |mimetype|
        return SUPPORTED_MIME_TYPES.include?(mimetype)
      end

      host = URI.parse(URI.escape(path)).host
      SUPPORTED_DOMAINS.each do |domain|
        return true if host =~ /#{domain}/
      end

      false
    end

    def file?
      @type == :file
    end

    def url?
      @type == :url
    end

    private
      def online_media_path(uri)
        case URI.parse(uri).host
        when /youtube|youtu\.be/
          uri = `youtube-dl -g #{uri}`
        else
          uri
        end
      end

      def online_media_title(uri)
        case URI.parse(uri).host
        when /youtube|youtu\.be/
          title = `youtube-dl -e #{uri}`
        else
          title = File.basename(uri)
        end
      end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
airplayer-0.1.0 lib/airplayer/media.rb
airplayer-0.0.9 lib/airplayer/media.rb