保護されたコンテンツの再生ワークフロー

  1. MediaPlayer インスタンスを作成します。
    player = new MediaPlayer();
  2. プレーヤーに MediaPlayerCapabilityChangeEvent.HAS_DRM_CHANGE イベントを登録します。このイベントは、コンテンツが DRM 保護されている場合に送出されます。
    player.addEventListener(MediaPlayerCapabilityChangeEvent.HAS_DRM_CHANGE, onDRMCapabilityChange);
  3. イベントハンドラーで、 DRMTrait インスタンスを取得します。 DRMTrait は、 authenticate() などの DRM 関連メソッドを呼び出すためのインターフェイスです。DRM 保護されたコンテンツを読み込むと、OSMF は DRM 検証を実行し、状態イベントを送出します。 DRMEvent.DRM_STATE_CHANGE イベントハンドラーを DRMTrait に追加します。
    private function onDRMCapabilityChange 
        (event :MediaPlayerCapabilityChangeEvent) :void 
            { 
                if (event.type == MediaPlayerCapabilityChangeEvent.HAS_DRM_CHANGE 
                    && event.enabled) 
                { 
                    drmTrait = player.media.getTrait(MediaTraitType.DRM) as DRMTrait; 
                    drmTrait.addEventListener 
                        (DRMEvent.DRM_STATE_CHANGE,                     onDRMStateChange); 
                } 
            }
  4. onDRMStateChange() メソッド内で DRM イベントを処理します。
            private function onDRMStateChange(event :DRMEvent) :void 
            { 
                trace ( "DRMState: ",event.drmState); 
                switch(event.drmState) 
                { 
                    case DRMState.AUTHENTICATION_NEEDED: 
                        // Identity-based content 
                        var authPopup :AuthWindow = AuthWindow.create(_parentWin); 
                        authPopup.serverURL = event.serverURL; 
                        authPopup.addEventListener("dismiss", function () :void { 
                            trace ("Authentication dismissed"); 
                            if(_drmTrait != null) 
                            { 
                                //Ignore authentication. Just 
                                //try to acquire a license. 
                                _drmTrait.authenticate(null, null); 
                            } 
                        }); 
                        authPopup.addEventListener("authenticate", 
                                        function (event :AuthWindowEvent) :void { 
                            if(_drmTrait != null) 
                            { 
                                _drmTrait.authenticate(event.username, event.password); 
                            } 
                        }); 
                        authPopup.show(); 
                        break; 
                    case DRMState.AUTHENTICATING: 
                        //Display any authentication message. 
                        trace("Authenticating..."); 
                        break; 
                    case DRMState.AUTHENTICATION_COMPLETE: 
                        // Start to retrieve voucher and playback. 
                        // You can display the voucher information at this point. 
                        if(event.token) 
                        // You just received the authentication token. 
                        { 
                            trace("Authentication success. Token: \n", event.token); 
                        } 
                        else 
                        // You have got the voucher. 
                        { 
                            trace("DRM License:");                         
                            trace("Playback window period: ", 
                                !isNaN(event.period) ? event.period == 0 ? 
                                "<unlimited>" : event.period : "<none>"); 
                            trace("Playback window end date: ", 
                                event.endDate != null ? event.endDate : "<none>"); 
                            trace("Playback window start date: ", 
                                event.startDate != null ? event.startDate : "<none>"); 
                        } 
                        break; 
                    case DRMState.AUTHENTICATION_ERROR: 
                        trace ("DRM Error:", event.mediaError.errorID + 
                            "[" + DRMErrorEventRef.getDRMErrorMnemonic 
                            (event.mediaError.errorID) + "]"); 
                        //Stop everything. 
                        player.media = null; 
                        break; 
                    case DRMState.DRM_SYSTEM_UPDATING: 
                        Logger.log("Downloading DRM module..."); 
                        break; 
                    case DRMState.UNINITIALIZED: 
                        break; 
                } 
            }