// 暗証番号入力されたか確認するフラグ var PIN_VALIDATED = false; // 再生を実行させたオブジェクトを保存する変数 var PLAY_ACTION_ELEMENT = null; // 再生を実行させたオブジェクトを保存する変数 var RENTAL_ACTION_ELEMENT = null; // モーダルウィンドウオブジェクト var MODAL_WINDOW = null; $(function(){ // 再生コントローラー初期化 var i = 0; playerControl = new Array(); $(".open_player").each(function() { playerControl[i++] = new PlayerControl($(this)); }); // レンタルコントローラー初期化 var i = 0; rentalControl = new Array(); $(".exec_rental").each(function() { rentalControl[i++] = new RentalControl($(this)); }); // 閉じる $(".close_player").on("click", function() { //chrome利用者への注意文−非表示 //$("#chromeinstallhelp").hide(); $("#player_section").slideUp("slow"); $("#crumbs").css("display","block"); }); }); var RentalControl = function(rentalElement) { rentalElement.on("click",function() { RENTAL_ACTION_ELEMENT = rentalElement; // 暗証番号入力有無 var pin = rentalElement.attr("pin"); // 遷移先 var url = rentalElement.attr("href"); // 暗証番号入力画面表示 if (pin == "1" && !PIN_VALIDATED) { MODAL_WINDOW = new ModalWindow({ url:"https://video.crank-in.net/auth/password_validate_input", name:"PinWindow", id:"PinWindow", width:500, height:245, unfocusclose:true, }); return false; } }); }; var PlayerControl = function(playElement) { var force_term = false; // 暗証番号入力有無 var pin = playElement.attr("pin"); // コンテンツCD var content_cd = playElement.attr("ccd"); // 商品CD var product_cd = playElement.attr("pcd"); // 字幕/吹替 var subtitles_dubbing = playElement.attr("subs"); // HD/SD var device_name = playElement.attr("hdsd"); // つづきから再生フラグ var posFlg = 0; // 再生情報 var playInfo = null; // 同期処理用オブジェクト var playPositionDeferred = new $.Deferred(); var playInfoDeferred = new $.Deferred(); // // 再生制御用エレメント // var playerPosElement = $("#player_playbookmark"); var playerPosButtonElement = $("#player_playbookmark .playbookmark_select"); var playerSubElement = $("#player_sub"); var playerSubButtonElement = $("#player_sub .sub_select"); // // 再生ボタンクリック // playElement.on("click",function() { //chrome利用者への注意文-表示 var userAgent = window.navigator.userAgent.toLowerCase(); //if (userAgent.indexOf('chrome') != -1) { // $("#chromeinstallhelp").show(); //} PLAY_ACTION_ELEMENT = playElement; // 暗証番号入力画面表示 if (pin == "1" && !PIN_VALIDATED) { MODAL_WINDOW = new ModalWindow({ url:"https://video.crank-in.net/auth/password_validate_input", name:"PinWindow", id:"PinWindow", width:500, height:245, unfocusclose:true, }); return; } // ページ最上部にスクロールさせる //$('body,html').animate({scrollTop:0},400,"swing"); $("html,body").animate({scrollTop:$('#player_section').offset().top}); //playerElement.removeClass("loading"); $("#player_section").slideDown("slow",function() { }); $("#crumbs").css("display","none"); // 再生位置情報取得 initPlayPosition(); playPositionDeferred.promise().then(function() { // 再生途中データがない場合 if (posFlg == 0) { // 字幕/吹替 if (subtitles_dubbing.indexOf("|") != -1) { //playerElement.removeClass("loading"); $("#player_sub").show(); return; } // 再生 else { playExec(); } } // 再生途中データがある場合 else { //playerElement.removeClass("loading"); playerPosElement.show(); return; } }); // // つづきから // if(content_cd.indexOf("-00") === -1){ //予告編の場合セットしてはいけない 2016.3.3 playerPosButtonElement.off("click"); //ws提案 バグ回避2-1 playerPosButtonElement.on("click",function() { posFlg = $(this).attr("value"); playerPosElement.hide(); // 字幕/吹替 if (subtitles_dubbing.indexOf("|") != -1) { playerSubElement.show(); } // 再生 else { playExec(); } }); } // // 字幕/吹替 // if(content_cd.indexOf("-00") === -1){ //予告編の場合セットしてはいけない 2016.3.3 playerSubButtonElement.off("click"); //ws提案 バグ回避2-2 playerSubButtonElement.on("click",function() { subtitles_dubbing = $(this).html(); playExec(); }); } }); /** * 再生に必要な情報を取得し、プレイヤー表示します。 */ function playExec() { //playerElement.addClass("loading"); playerPosElement.hide(); playerSubElement.hide(); initPlayInfo(); playInfoDeferred.promise().then(function() { if (playInfo["media_url"]) { play_key = playInfo["play_key"]; play_time = playInfo["play_time"]; playerObject = new PlayerObject(); playerObject.setparam("MediaUrl",playInfo["media_url"]); if (posFlg == 1) { playerObject.setparam("StartPosition",playInfo["start_position"]); } else { playerObject.setparam("StartPosition",0); } playerObject.setparam("CustomData",playInfo["custom_data"]); // 2016/05/27 動画プレイヤー呼び分け k.satou START ========== var playertype = "silverlight"; var _checkoldfilename = playInfo["media_url"]; switch(playertype){ case "silverlight" : $("#silverlightplayer").html(playerObject.getPlayerHtml(".mpd")); break; case "html5": html5player(playerObject); $("#videoArea").show(); break; default : break; } // 2016/05/27 動画プレイヤー呼び分け k.satou END ========== } else { } }); } /** * 再生位置を取得します。 */ function initPlayPosition() { var url = "https://video.crank-in.net/playmanager/startposition"; $.ajax({ type: "POST", url: url, dataType: "json", data: { "tracking_id": "f34f3b7b19155df94797f35995be214648543e00", "content_cd": content_cd, }, async: true, success: function(data){ if (data["status"] == "OK") { start_position_sec = data["start_position_sec"]; } else if (data["message"]) { $(".close_player").trigger("click"); alert(data["message"]); if (data["redirect_url"]) { location.href = data["redirect_url"]; } } }, error: function(XMLHttpRequest, textStatus, errorThrown){ $(".close_player").trigger("click"); alert("エラーが発生しました。CODE:001"); } }).done(function () { if (start_position_sec == null || start_position_sec == 0) { posFlg = 0; } else { posFlg = 1; } playPositionDeferred.resolve(); }); } /** * 再生情報を取得します。 */ function initPlayInfo() { var url = "https://video.crank-in.net/playmanager/playinfo"; $.ajax({ type: "POST", url: url, dataType: "json", data: { "tracking_id": "f34f3b7b19155df94797f35995be214648543e00", "content_cd": content_cd, "subtitles_dubbing": subtitles_dubbing, "device_name": device_name, "start_position_flg": posFlg }, async: true, success: function(data){ if (data["status"] == "OK") { playInfo = data; } else if (data["message"]) { $(".close_player").trigger("click"); alert(data["message"]); if (data["redirect_url"]) { location.href = data["redirect_url"]; } } }, error: function(XMLHttpRequest, textStatus, errorThrown){ $(".close_player").trigger("click"); alert("エラーが発生しました。 CODE:002"); } }).done(function () { playInfoDeferred.resolve(); }); } }; var PlayerObject = function() { "use strict"; //既定値 this.param = { "playersource":"/assets/pc/js/player/STPlayer_hc.xap?date=20160728", "width":"854", "height":"480", "AutoPlay":"true", "StartPosition":"00:00:00", "BeaconInterval":"90", //1 = 1sec ※ミリ秒指定ではないので注意 "BigPlayButton":"true", "background":"black", "minRuntimeVersion":"5.0.61118.0", "autoUpgrade":"true", "windowless":"true", "MediaUrl":"", "CustomData":"", "LAUrl":"https://wspr.webstream.ne.jp/wsprapi/rightsmanager/dramax", //サービス固有URL "sparam":"0000000000000000000000000000000000000000" //ユーザー識別コード }; } /** * 再生キーを取得し、プレイヤーを起動します。 */ PlayerObject.prototype.init = function(content_cd,subtitles_dubbing,device_name){ "use strict"; var parent = this; var url = "https://video.crank-in.net/playmanager/playinfo"; play_key = null; $.ajax({ type: "POST", url: url, dataType: "json", data: { "tracking_id": "f34f3b7b19155df94797f35995be214648543e00", "content_cd": content_cd, "subtitles_dubbing": subtitles_dubbing, "device_name": device_name }, async: false, success: function(data){ if (data["status"] == "OK") { play_key = data["play_key"]; parent.setparam("CustomData",data["custom_data"]); play_time = data["play_time"]; parent.setparam("MediaUrl",data["media_url"]); parent.setparam("StartPosition",data["start_position"]); } // 失敗 else if (data["message"]) { $(".close_player").trigger("click"); alert(data["message"]); } }, error: function(XMLHttpRequest, textStatus, errorThrown){ $(".close_player").trigger("click"); alert("エラーが発生しました。CODE:003"); } }); if (play_key) { return this; } else { return null; } }; //再生開始 PlayerObject.prototype.getPlayerHtml = function(media_extension){ "use strict"; var param = this.param, formdata = "", LAUrl = param["LAUrl"]+"?sparam="+param["sparam"]; formdata+= '
'+"\n"; formdata+= '
'+"\n"; formdata+= ''+"\n"; formdata+= ''+"\n"; formdata+= ''+"\n"; formdata+= ''+"\n"; formdata+= ''+"\n"; formdata+= ''+"\n"; formdata+= ''+"\n"; formdata+= ''+"\n"; formdata+= 'Microsoft Silverlight の取得'+"\n"; formdata+= ''+"\n"; formdata+= ''+"\n"; //formdata+= ''+"\n"; formdata+= '
'+"\n"; formdata+= '
'+"\n"; return formdata; } PlayerObject.prototype.setparam = function(key,val){ "use strict"; this.param[key] = val; }; PlayerObject.prototype.getparam = function(key){ "use strict"; return this.param[key]; }; /** * 再生中動画の再生位置を通知します。 * * @param time curtime 動画の再生位置(フォーマットはhh:mm:ss) * @param time lasttime 再生中動画の尺(フォーマットはhh:mm:ss) */ function movieBeacon(curtime,lasttime) { beaconSender(curtime,"play",lasttime); } /** * 再生が中断されたことを通知します。 * * @param time curtime 動画の再生位置(フォーマットはhh:mm:ss) * @param time lasttime 再生中動画の尺(フォーマットはhh:mm:ss) */ function movieStop(curtime,lasttime) { beaconSender(curtime,"pause",lasttime); } /** * 再生が完了したことを通知します。 * * @param time lasttime 再生中動画の尺(フォーマットはhh:mm:ss) */ function movieComplete(lasttime) { $("#playerObject").remove(); beaconSender(lasttime,"stop",lasttime); } /** * プレイヤーから受け取った情報をビーコンレシーバーに送信します。 * * @param time curtime 動画の再生位置(フォーマットはhh:mm:ss) * @param time lasttime 再生中動画の尺(フォーマットはhh:mm:ss) * @param string event playing , play , pause , seek , stop */ function beaconSender(curtime,event,lasttime) { if (play_time) { lasttime = play_time; } $.ajax({ type: "POST", url: "https://video.crank-in.net/playmanager/beacon", data: { "env": "PRODUCTION", "event": event, "pos": curtime, "play_time": lasttime, "play_key": play_key }, dataType: "html", cache: false, success: function(data,status){ }, error: function(xmlHttpRequest,status,error){ } }); } /** * モーダルウィンドを閉じた時にコールされる関数です。 */ var modalWindowClose = function() { MODAL_WINDOW.close(); } /** * モーダルウィンドを終了するときにコールされる関数です。 */ var modalWindowFinish = function() { $rental = RENTAL_ACTION_ELEMENT; $paly = PLAY_ACTION_ELEMENT; RENTAL_ACTION_ELEMENT = null; PLAY_ACTION_ELEMENT = null; PIN_VALIDATED = true; //$(".open_player").attr("pin","0"); if ($rental != null) { location.href = $rental.attr("href"); } else if ($paly != null) { $paly.trigger("click"); } MODAL_WINDOW.close(); } /** * モーダルウィンドウ閉じる */ $(function(){ var intervalObject; intervalObject = setInterval(function(){ if ($("#PinWindow")[0] != null && $("#PinWindow").contents()[0] != null && $("#PinWindow").contents().find(".modalWindowClose")[0]) { modalWindowFinish(); clearInterval(intervalObject); return; } },1000); }); //HTML5プレイヤー用 JS function html5player(playerObject){ var tmpSettings = wsplayer.settings(); // 現在のプレイヤー設定をロードします tmpSettings.autoplay = true; //動画選択と同時に再生を開始する tmpSettings.autoHideTitle = true; //タイトルを自動で隠す tmpSettings.autoHideControl = true; //コントロールを自動で隠す tmpSettings.overlapControl = true; //コントロールを動画にかさねる tmpSettings.overlapTitle = true; //タイトルを動画にかさねる var opt = wsplayer.playerConfig(); opt.FIRST_SWITCH_INTERVAL = 3; // 再生直後1 秒は切替え禁止にします opt.MIN_SWITCH_INTERVAL = 3; // 品質切替え後1 秒は切替え禁止にします wsplayer.playerConfig(opt); wsplayer.settings(tmpSettings); // 現在のプレイヤー設定を更新します wsplayer.loadSettings(); // 更新した設定をプレイヤー画面に反映します wsplayer.BeaconInterval = 10; // PlayerのBeacon送信間隔の指定 var custom = playerObject.getparam("CustomData"); console.log(custom); //mpdファイルSample //var url = "http://d1pw4monq01e10.cloudfront.net/hls/newvideo/ismv/C101000362500121/C101000362500121.mpd"; var _mediaurl = playerObject.getparam("MediaUrl"); var url = (_mediaurl.indexOf(".pyv") == -1) ? _mediaurl + ".mpd" : _mediaurl; // WS 認証用DRMサーバー(本番用) var laPR = "https://cenc.webstream.ne.jp/drmapi/pr/dramax"; var laWV = "https://cenc.webstream.ne.jp/drmapi/wv/dramax"; var info = { "url": url, "name": "", "isDirect":true, //コンテンツがDRMなしの場合、省略可能 ========= "protData": { "com.microsoft.playready": { "serverURL": laPR, "customData": custom }, "com.widevine.alpha": { "serverURL": laWV, "customData": custom } } //コンテンツがDRMなしの場合、省略可能 ========= }; wsplayer.playSource(info); //HTML5プレイヤーは再生時間指定がhh:ii:ssではなく秒なので変換 var _sp = "2000/1/1 " + playerObject.getparam("StartPosition"); //年月日は不要なため適当な値 var d = new Date(_sp); var _startposition = (d.getHours() * 60 * 60) + (d.getMinutes() * 60) + (d.getSeconds()); //最初から再生はNaN //再生位置を指定 video.onloadeddata = function(){ video.currentTime = _startposition; }; };