適用於iOS的Native SDK的錯誤處理

在本主題中,您將學習Brightcove Native SDK for iOS如何處理播放錯誤。

概覽

錯誤代碼有術語ErrorCode在名字裡。例如:

	kBCOVPlaybackSessionErrorCodeLoadFailed

事件有詞Event在名字裡。例如:

	kBCOVPlaybackSessionLifecycleEventFail

播放錯誤

播放錯誤是通過事件處理的。一般來說,您會在使用生命週期事件委託回調時收到播放錯誤BCOVPlaybackController :

	- (void)playbackSession:(id<BCOVPlaybackSession>)session
	didReceiveLifecycleEvent:(BCOVPlaybackSessionLifecycleEvent *)lifecycleEvent

要獲取更多信息,請執行以下操作:

  1. 如果您收到類似的錯誤事件kBCOVPlaybackSessionLifecycleEventFail或者kBCOVPlaybackSessionLifecycleEventResumeFail , 檢查事件的properties詞典@"error"鑰匙。

    這將提供一個NSError帶有問題信息的對象。

  2. 每個NSError將有一個錯誤域,如下所示:

    • NSCocoaErrorDomain
    • kBCOVPlaybackSessionErrorDomain
     

    每個錯誤域將具有關聯的錯誤代碼和錯誤描述,如下所示:

    • kBCOVPlaybackSessionErrorCodeLoadFailed
    • kBCOVPlaybackSessionErrorCodeNoPlayableSource
  3. 一些錯誤也會有一個潛在的錯誤,可以從錯誤對象的userInfo字典與NSUnderlyingErrorKey鑰匙。這通常是一個系統NSError可以提供更多信息。

  4. 要在SDK中找到所有錯誤域,請在標題中搜索以下內容:

    	ErrorDomain

    這是一個標題列表ErrorDomain參考:

    • BCOVFPSAuthorizationProxy.h
    • BCOVFPSBrightcoveAuthProxy.h
    • BCOVOfflineVideoManager.h
    • BCOVPlaybackService.h
    • BCOVPlaybackSession.h
  5. 要查找所有錯誤代碼,請搜索每個ErrorDomain對於以下內容:

    	ErrorCode

    例如,在BCOVPlaybackSession.h, 你會看到的kBCOVPlaybackSessionErrorDomain錯誤代碼如下:

    • kBCOVPlaybackSessionErrorCodeLoadFailed
    • kBCOVPlaybackSessionErrorCodeFailedToPlayToEnd
    • kBCOVPlaybackSessionErrorCodeNoPlayableSource
  6. 其他域可能會以不同的方式返回錯誤。例如,BCOVPlaybackService如果從在線目錄請求視頻時出現網絡錯誤,對象將在其完成塊中返回錯誤。它使用錯誤域kBCOVPlaybackServiceErrorDomain .

回放錯誤表

以下是適用於 iOS 的 Native SDK 可能出現的播放錯誤列表。請注意,錯誤也可以從底層框架傳遞。

iOS 播放錯誤
標頭 錯誤 描述
BCOVFPSAuthorizationProxy.h kBCOVFPSErrorDomain FairPlay 相關錯誤的錯誤域
kBCOVFPSErrorCodeStreamingContentKeyRequest 請求內容密鑰時出錯
kBCOVFPSErrorCodeApplicationCertificateRequest 請求應用程序證書時出錯
BCOVFPSBrightcoveAuthProxy.h kBCOVFPSAuthProxyErrorDomain FairPlay Auth Proxy 相關錯誤的錯誤域。
kBCOVFPSAuthProxyErrorCodeApplicationCertificateRequestFailed 申請證書申請失敗
kBCOVFPSAuthProxyErrorCodeContentKeyRequestFailed 密鑰請求失敗
kBCOVFPSAuthProxyErrorCodeContentKeyGenerationFailed 密鑰請求生成失敗
BCOVPlaybackService.h BCOVPlaybackServiceErrorNoError 沒有錯誤。
BCOVPlaybackServiceErrorCodeConnectionError 錯誤代碼,表示連接到 Playback API 時出錯。檢查 error.userInfoNSUnderlyingErrorKey 以了解實際的連接錯誤。
BCOVPlaybackServiceErrorCodeJSONDeserializationError 指示將響應解析為 JSON 時出錯的錯誤代碼。如果請求返回任何數據,原始 NSData 將通過鍵 kBCOVPlaybackServiceErrorKeyRawResponseData包含在 userInfo 中。檢查 error.userInfoNSUnderlyingErrorKey 以了解實際的 JSON 反序列化錯誤。
BCOVPlaybackServiceErrorCodeAPIError 指示 API 返回錯誤的錯誤代碼。檢查 error.userInfo 鍵 kBCOVPlaybackServiceErrorKeyAPIErrors 以獲取 API 返回的錯誤的 NSArray 和鍵 kBCOVPlaybackServiceErrorKeyAPIHTTPStatusCode 以查找返回的狀態代碼。
kBCOVPlaybackServiceErrorDomain BCOVPlaybackService的錯誤域。
kBCOVPlaybackServiceErrorKeyRawResponseData NSError.userInfo 的鍵,用於域為 kBCOVPlaybackServiceErrorDomain 和 errorCode BCOVPlaybackServiceErrorCodeJSONDeserializationError的錯誤。這是原始響應數據。這可能不存在於 error.userInfo中。
kBCOVPlaybackServiceErrorKeyAPIErrors NSError.userInfo 的鍵,用於域為 kBCOVPlaybackServiceErrorDomain 和 errorCode BCOVPlaybackServiceErrorCodeAPIError的錯誤。這是 Playback API 返回的錯誤的 NSArray。
kBCOVPlaybackServiceErrorKeyAPIHTTPStatusCode NSError.userInfo 的鍵,用於域為 kBCOVPlaybackServiceErrorDomain 和 errorCode BCOVPlaybackServiceErrorCodeAPIError的錯誤。這是 API 請求返回的 HTTP 狀態代碼。
BCOVPlaybackSession.h kBCOVPlaybackSessionEventKeyError 視頻加載失敗。事件屬性將包含底層錯誤。
kBCOVPlaybackSessionLifecycleEventFailedToPlayToEndTime

視頻在播放過程中失敗並且無法恢復,可能是由於網絡錯誤。事件屬性將包含由 kBCOVPlaybackSessionEventKeyError鍵入的底層錯誤

通過使用 [BCOVPlaybackController resumeVideoAtTime:withAutoPlay:] 方法,可以在網絡恢復後從該錯誤中恢復。

kBCOVPlaybackSessionEventKeyError 發生一般性錯誤。事件屬性可能包含底層
kBCOVPlaybackSessionLifecycleEventThumbnailAssetFailedToLoad 縮略圖搜索資產加載失敗。事件屬性可能包含由 kBCOVPlaybackSessionEventKeyError鍵控的基礎錯誤。
kBCOVPlaybackSessionEventKeyError 事件屬性中錯誤的鍵。
kBCOVPlaybackSessionErrorDomain SDK 的錯誤域。
kBCOVPlaybackSessionErrorCodeLoadFailed 視頻加載失敗。
kBCOVPlaybackSessionErrorCodeFailedToPlayToEnd 視頻在播放過程中失敗並且無法恢復,可能是由於網絡錯誤。
kBCOVPlaybackSessionErrorCodeNoPlayableSource 此視頻沒有可用的可播放源。
kBCOVPlaybackSessionErrorCodeWifi不可用 沒有可用的 WiFi 網絡,allowsCellularPlayback 被禁用。