クロスデバイスレジュームの実装

RubyとJavaScriptを使用して、Ooyalaのクロスデバイスレジューム機能を実装することができます。

クロスデバイスレジュームを実装するには、次のような高度なステップを実装する必要があります。
  1. プレイヤーの読み込み
  2. 再生位置の取得
  3. 正しい再生位置を探す

参考例:RubyおよびJavaScriptのサンプル

次の例は、完全なクロスデバイスレジューム体験を実現するためのRubyおよびJavaScriptコードを説明しています。

 
file: player_teamplate.erb

<!DOCTYPE html">
<html>
 <head>
   <script src="http://player.ooyala.com/v3/<%= PLAYER_BRANDING_ID %>"></script>
  </head>
  <body>
     <div id='playerwrapper' style='width:920px;height:400px;'></div>
     <script>
         var playheadTime = <%= playhead_position %>;
         var videoPlayer =
            OO.Player.create('playerwrapper','<%= params[:embed_code] %>', {
            embedToken: "<%= signed_embed_code_url %>",
            initialTime: playheadTime
        });
      </script>
  </body>
</html>


file
: sample_sinatra_server_app.rb

require 'sinatra/base'
require "net/http"
require "cgi"
require "digest/sha2"
require "base64"

class SampleSinatraServerApp < Sinatra::Base


 PCODE = "INSERT_PCODE"
 API_KEY = "INSERT_API_KEY"
 PLAYER_BRANDING_ID = "INSERT_PLAYER_BRANDING_ID"
 SECRET = ENV["SECRET_API_KEY"]

 get "/sample_player/:embed_code/:account_id" do
   erb :player_template
 end

 helpers do
   def generate_signature(secret, http_method, request_path, params, body)
     # See docs for signing requests.
   end

   def append_signature_to_uri(uri)
     params_hash = {}      uri.query.split("&").map { |pair| pair.split("=", 2) }.each do |key,value|
       if (key && !key.empty? && value)                                                                                                  
         params_hash[CGI.unescape(key).to_sym] = (value && CGI.unescape(value))
       end
     end
     signature = generate_signature(SECRET, "GET", uri.path, params_hash, "")
     "#{uri.to_s}&signature=#{CGI.escape(signature)}"
   end

   def signed_embed_code_url
     uri = URI.parse("http://player.ooyala.com/sas/embed_token/#{PCODE}/#{params[:embed_code]}?" +
                     "account_id=#{params[:account_id]}&" +
                     "api_key=#{API_KEY}&" +
                     "expires=#{Time.now.to_i + 60 * 60 * 24}")
     return append_signature_to_uri(uri)
   end

   def playhead_position
     uri = URI.parse("http://api.ooyala.com/v2/cross_device_resume/accounts/" +
         "#{params[:account_id]}/viewed_assets/#{params[:embed_code]}/" +
         "playhead_info?expires=#{Time.now.to_i + 60 * 5}&api_key=#{API_KEY}")
     response = Net::HTTP.get_response(URI.parse(append_signature_to_uri(uri)))
     response.code == "200" ? JSON.parse(response.body)["playhead_seconds"]:0
   end
 end
end

この記事はお役にたちましたか?