DmCloud

Code Climate

I created this gem to simplify request and responses from DailyMotion Cloud API.
With this gem, you can :

  • get generated embed code as a string
  • get direct access url to your files (I used this to provide video flux to TV-connected application)
  • (Lists works, others on the way) create, delete, paginated lists of videos; with video informations (a/v encodings, bitrate, video lenght...)
  • (I'm working on ) CRUD on videos' meta-data

Installation

Add this line to your application's Gemfile:

gem 'dm_cloud', "0.0.60" #stable version

or
gem 'dm_cloud' # edge version

And then execute:

$ bundle

Or install it yourself as:

$ gem install dm_cloud

Usage

First, your will need to specify your :user_id, :api_key and your security level.
I used a file in APP_ROOT/config/initializers/conf.rb.
You can note the securitylevel, for more information about it, take a look at lib/dm_cloud/signing.rb.

# DAILYMOTION CLOUD SETTINGS
require 'dm_cloud'
DMC_USER_ID = 'your user id'
DMC_SECRET = 'your api key'
DMC_SECURITY_LEVEL = :none

DmCloud.configure( { 
  :user_key    =>     DMC_USER_ID,
  :secret_key =>      DMC_SECRET,
  :security_level =>  DMC_SECURITY_LEVEL
})

Description of security levels :

  • None:
    The signed URL will be valid for everyone
  • ASNUM:
    The signed URL will only be valid for the AS of the end-user.
    The ASNUM (for Autonomous System Number) stands for the network identification,
    each ISP have a different ASNUM for instance.
  • IP:
    The signed URL will only be valid for the IP of the end-user.
    This security level may wrongly block some users
    which have their internet access load-balanced between several proxies.
    This is the case in some office network or some ISPs.
  • User-Agent: Used in addition to one of the two former levels,
    this level a limit on the exact user-agent of the end-user.
    This is more secure but in some specific condition may lead to wrongly blocked users.
  • Use Once:
    The signed URL will only be usable once.
    Note: should not be used with stream URLs.
  • Country:
    The URL can only be queried from specified countrie(s).
    The rule can be reversed to allow all countries except some.
  • Referer:
    The URL can only be queried
    if the Referer HTTP header contains a specified value.
    If the URL contains a Referer header with a different value,
    the request is refused. If the Referer header is missing,
    the request is accepted in order to prevent from false positives as some browsers,
    anti-virus or enterprise proxies may remove this header.
  • Delegate:
    This option instructs the signing algorithm
    that security level information won’t be embeded into the signature
    but gathered and lock at the first use.

Second part, get you embed url :
It will return a string containing the iframe with the DailyMotion Cloud player.

DmCloud::Streaming.embed('your video id looks like a secret key')

Or how to get your direct url :
It will return a string containing the direct link to your file.

DmCloud::Streaming.url('your video id', ['asset_name'], {options})

The next parts will come soon, just need some time to finish it
and create corresponding tests.


Video explorer :

If you need to list your video you can use this method :

DmCloud::Media.list({:page => 1, :per_page => 10})

It will return videos information and more :

result to yaml :

'{"result": {  
  "list": [{  
    "embed_url": "http://api.DmCloud.net/player/embed/:your_id/:media_id",  
    "assets": {  
      "source": {  
        "status": "ready",  
        "video_fps": 25.0,  
        "file_extension": "mp4",  
        "video_fps_mode": "CFR",  
        "container": "MPEG-4",  
        "audio_samplerate": 44100,  
        "video_interlaced": false,
        "video_rotation": 0.0,  
        "video_bitrate": 1000618,  
        "created": 1347641702,  
        "audio_nbr_channel": 2,  
        "download_url": "http://cdn.DmCloud.net/route/http/:your_id/:media_id/source-1347634502.mp4?filename=my_video_name-source-1347634502.mp4&auth=1351277028-3-672hcu1m-3fcab065b9bf103e70d3883aa8c657be",  
        "video_aspect": 1.7777777777777777,  
        "video_height": 576,  
        "audio_bitrate": 128017,  
        "audio_codec": "AAC LC",  
        "file_size": 119133958,  
        "duration": 839,  
        "video_codec": "AVC",  
        "video_width": 1024,  
        "global_bitrate": 1134696}},  
        "created": 1347641696,  
        "meta": { "title": "my video 1 title"},  
        "frame_ratio": 1.7740740740740739,  
        "id": "5053616094739936ec0006af" }],  
  "pages": 1,
  "on_this_page": 3,
  "per_page": 10,
  "total": 3, 
  "page": 1}}'

As you can see, this give many information, you can submit a hash like this :

DmCloud::Media.list({:page => 1, :per_page => 10, :fields => {:meta => :title }, :assets => [:download_url, :created ]})

Contributing

Your welcome to share and enhance this gem.
This is my first one (and not the last one) but I know some mistakes might be done by myself.
I do my best and I'm open to all ideas or comments about my work.

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request