播放受保护内容的工作流程

  1. 创建 MediaPlayer 实例。
    player = new MediaPlayer();
  2. 向播放器注册 MediaPlayerCapabilityChangeEvent.HAS_DRM_CHANGE 事件。如果内容受 DRM 保护,将调度此事件。
    player.addEventListener(MediaPlayerCapabilityChangeEvent.HAS_DRM_CHANGE, onDRMCapabilityChange);
  3. 在事件处理函数中,获取 DRMTrait 实例。 DRMTrait 是一个接口,通过该接口可以调用与 DRM 相关的方法,如 authenticate() 。在加载受 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; 
                } 
            }