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" 驗證類型時,提供的憑證是由 Flash Access 進行驗證。使用 "proxy" 驗證類型時,憑證則是由 Proxy 伺服器進行驗證,而且必須符合 Proxy 伺服器所需的憑證。例如,企業可以要求 Proxy 伺服器先驗證應用程式,然後使用者才可以存取網際網路。Proxy 選項允許此一驗證類型。除非使用匿名驗證,否則使用者在 Proxy 驗證後還是必須由 Flash Access 進行驗證,才能取得憑證並播放內容。您可以再次使用 setDRMAuthenticationcredentials() 搭配 "drm" 選項,由 Flash 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");
}