NetStream 類別的 DRM 相關成員和事件

Flash Player 10.1 以及更新的版本,Adobe AIR 1.0 以及更新的版本

NetStream 類別將在 Flash Player 或 AIR 應用程式與 Flash Media Server 或本機檔案系統之間提供單向串流連線 (NetStream 類別也支援漸進式下載)。NetStream 物件是 NetConnection 物件內的通道。NetStream 類別會傳送四個 DRM 相關事件:

事件

說明

drmAuthenticate

(僅限 AIR)

定義於 DRMAuthenticateEvent 類別。如果 NetStream 物件嘗試播放的受保護內容,需要在播放之前進行使用者憑證驗證,則會傳送這個事件。

此事件的屬性包括 header、usernamePrompt、passwordPrompt 和 urlPrompt 屬性,可用來取得與設定使用者的憑證。此事件將反覆發生,直到 NetStream 物件收到有效的使用者憑證為止。

drmError

定義於 DRMErrorEvent 類別,而且會在 NetStream 物件嘗試播放保護的內容以及發生 DRM 相關錯誤時傳送。例如,一旦使用者授權失敗,便會傳送 DRM 錯誤事件物件。使用者尚未購買檢視內容的權限,也會發生此錯誤。如果內容提供者不支援檢視應用程式,也會發生此錯誤。

drmStatus

定義於 DRMStatusEvent 類別。開始播放保護的內容時 (使用者通過驗證並授權播放內容時),會傳送這個事件。DRMStatusEvent 物件包含與憑證相關的資訊。憑證資訊包括是否可以離線檢視內容,或者憑證何時到期且屆滿後再也無法檢視內容。

status

定義於 events.StatusEvent,只有在應用程式透過叫用 NetStream.play() 方法,嘗試播放保護的內容時才會傳送。狀態碼屬性的值將是 "DRM.encryptedFLV"。

NetStream 類別包括下列 DRM 特有方法 (僅用於 AIR):

方法

說明

resetDRMVouchers()

刪除所有本機快取的數位版權管理 (DRM) 憑證資料。應用程式必須重新下載憑證,使用者才能存取加密內容。

例如,下列程式碼會從快取移除所有憑證:

NetStream.resetDRMVouchers();

setDRMAuthenticationCredentials()

將一組驗證憑證 (包括使用者名稱、密碼和驗證類型) 傳遞給 NetStream 物件以進行驗證。有效的驗證類型為 "drm" "proxy" 。使用 "drm" 驗證類型時,提供的憑證將交由 Adobe Access 進行驗證。使用 "proxy" 驗證類型時,憑證則是由 Proxy 伺服器進行驗證,而且必須符合 Proxy 伺服器所需的憑證。例如,企業可以要求 Proxy 伺服器先驗證應用程式,然後使用者才可以存取網際網路。Proxy 選項允許此一驗證類型。除非使用匿名驗證,否則使用者在 Proxy 驗證後還是必須由 Adobe Access 進行驗證,才能取得憑證並播放內容。您可以再次使用 setDRMAuthenticationCredentials() 搭配 “ drm " 選項,由 Adobe Access 進行驗證。

preloadEmbeddedMetadata()

剖析本機媒體檔,以取得內嵌的中繼資料。當找到 DRM 的相關中繼資料時,AIR 會呼叫 onDRMContentData() 回呼函數。

此外,在 AIR 中,於呼叫 preloadEmbeddedMetaData() 方法之後,NetStream 物件會呼叫 onDRMContentData() onPlayStatus() 回呼函數。在媒體檔中找到 DRM 中繼資料時,便呼叫 onDRMContentData() 函數。剖析檔案之後,會呼叫 onPlayStatus() 函數。 onDRMContentData() onPlayStatus() 函數必須在指定給 NetStream 實體的 client 物件上定義。如果您使用相同的 NetStream 物件來預先載入憑證和播放內容,請先等待 preloadEmbeddedMetaData() 所產生的 onPlayStatus() 呼叫,再開始播放。

在 AIR 的下列程式碼中,會設定使用者名稱 ("administrator")、密碼 ("password") 和 "drm" 驗證類型,以進行使用者驗證。setDRMAuthenticationCredentials() 方法提供的憑證必須符合內容提供者已知且接受的憑證。這些憑證與允許使用者檢視內容的使用者憑證相同。此範例並未包含播放視訊及確認視訊串流連線成功的程式碼。

var connection:NetConnection = new NetConnection(); 
connection.connect(null); 
 
var videoStream:NetStream = new NetStream(connection); 
 
videoStream.addEventListener(DRMAuthenticateEvent.DRM_AUTHENTICATE, 
                            drmAuthenticateEventHandler) 
 
private function drmAuthenticateEventHandler(event:DRMAuthenticateEvent):void  
{ 
    videoStream.setDRMAuthenticationCredentials("administrator", "password", "drm"); 
}