使用原生播放程式 SDK 離線播放

在本主題中,您將瞭解離線播放如何與 Brightcove 原生播放程式 SDK 搭配運作。

概覽

借助適用於iOS和Android的Brightcove Native Player SDK的脫機播放功能,發布者可以以全新的方式吸引觀眾,同時確保其內容的安全性。我們的SDK為複雜的離線播放問題提供了功能強大的簡單解決方案,包括下載管理,離線目錄管理,分析,DRM,當然還有播放。

使用脫機播放,用戶可以將受DRM保護和清除(非加密)的視頻內容下載到其設備,並在未連接時觀看。

需求

Brightcove Native Player SDK支持以下版本的脫機播放:

布萊特灣原生 SDK 版本

  • 適用於 Android 7.0.1 或更高版本的本機 SDK
  • 適用於 iOS 6.0.1 或更新版本的本機 SDK

裝置作業系統版本

  • 安卓 5.0 以上
  • iOS 10.0以上,但建議使用10.3以上

設定

若要開始使用,請執行下列動作:

  • 請與您的客戶經理聯繫,以使您的帳戶可以離線播放。
  • 攝取視頻時,請確保使用動態投放。
  • 準備每個視頻要啟用下載功能。

內容傳遞

視頻流傳輸利用了Video Cloud的多比特率流傳輸功能,該功能可檢測源帶寬,並為設備提供最佳質量。脫機播放功能支持以下流類型:

  • 安卓:通過HTTP(DASH)的動態自適應流
  • iOS :Apple HTTP實時流(HLS)

演繹版已下載

您可能想知道下載了哪個演繹版並將其用於離線播放。這是答案:

  • Android - ExoPlayer 設置默認再現。要找到當前的演繹,請收聽ExoPlayerVideoDisplayComponent.RENDITION_CHANGED事件。

    在內部,適用於 Android 的本機 SDK 使用 DefaultTrackSelector 。您可以按如下方式設置峰值比特率:

    VideoDisplayComponent: videoDisplayComponent.setPeakBitrate(yourPeakBitrate);

  • iOS - 如果您沒有為下載指定比特率,您將獲得具有視頻軌道的最低版本。

    要根據比特率或分辨率選擇特定變體,請參閱 SDK 參考的 指定變體比特率 部分。

安全性

通過我們的離線解決方案,保護下載內容至關重要。Brightcove Native Player SDK提供以下功能,以確保您的內容安全地存儲在查看器的設備上:

受 DRM 保護的內容

  • 對於受DRM保護的內容,本機SDK使用以下技術:
  • 視頻內容只能在已下載內容的設備和應用上觀看。

  • 只能在特定的日期和時間到期之前觀看視頻內容。

    本機SDK允許用戶租借或購買視頻。到期時間適用於租借,並且使用用於下載視頻的Native SDKs API在DRM許可證中設置。相反,在Fastly令牌中設置的有效期適用於流內容。

  • 返回給客戶端的視頻URL將過期,以便其他人無法使用它們。

所有內容

  • 刪除應用程式後,所有下載的內容都會移除。
  • 您的應用可以隨時刪除本地存儲的內容。

下載管理

Brightcove本機播放器SDK處理了將內容下載到查看器設備的複雜性,從而大大簡化了本機應用程序的過程。

功能性

可以將以下功能添加到您的應用中以支持下載管理:

顯示內容

顯示可用於流式傳輸或下載的內容列表。

當您設置視頻的offline_enabled財產真正,原生SDK會將此視頻標記為可下載。

準備視頻

要將視頻標記為可下載,您需要執行以下操作:

  1. 如果您尚未這樣做,請與您的客戶經理聯繫,以使您的帳戶可以離線播放。
  2. 對於您要下載的每個視頻,請執行以下任一操作以將其設置為離線啟用:

    使用Video Cloud Studio

    使用Video Cloud Studio進行啟用離線播放

    離線已啟用
    離線已啟用

    使用CMS API

    您也可以使用CMS API設置offline_enabled字段的值為真正

    這是使用curl的示例:

      curl --header "Authorization: Bearer $oauth_token" --request PATCH --data '
      {"offline_enabled" : true}
      ' https://cms.api.brightcove.com/v1/accounts/your account id/videos/your video id
顯示內容
顯示內容

使用清晰的內容時,請參閱最佳實踐部分中有關如何顯示內容的提示。

檢查下載大小

Brightcove建議在請求下載之前,請確保設備存儲中有足夠的空間用於下載。要估算視頻下載的總大小,請按照下列步驟操作:

  • 對於iOS,請查看查看下載大小的部分iOS App開發人員離線播放指南
  • 對於Android,您可以在OnDownloadStarted從的回調DownloadEventListener。這是如何設置事件監聽器的示例:

      MediaDownloadable.DownloadEventListener downloadEventListener = new MediaDownloadable.DownloadEventListener() {
      //Your implementation.
      }
      OfflineCatalog catalog = new OfflineCatalog(context, eventEmitter, accountId, policyKey);
      catalog.addDownloadEventListener(downloadEventListener);

 

顯示本地存儲空間

當本地存儲空間不足以完成下載當前項目和隊列中的任何項目時,通知用戶。

SDK提供了估計的大小和進度,因此您可以確定是否有足夠的下載空間。

顯示下載狀態

顯示當前下載及其狀態。

SDK會返回估算的總大小,當前下載狀態和下載進度信息的百分比。

管理下載

下載多個視頻

本機SDK將允許多個視頻排隊等待下載。例如,用戶可以下載一個季節的多個劇集,而Native SDK將通過提供每個資產的下載狀態來管理該過程。

下載輔助曲目(iOS)

在iOS 13中,Apple更改了下載方式。有關詳細信息,請參見iOS App開發人員視頻下載和離線播放指南指南。

由於此更改,iOS脫機下載示例應用程序似乎可以重新下載具有多個音軌的視頻。這是因為為每個軌道提供了下載進度。因此,對於每個其他音軌,進度條將從零開始重新開始。

這是以下內容的簡要概述AVMediaSelectionOptions,字幕和替代音軌:添加字幕和替代音軌

確定總下載量

有沒有辦法didProgressTo一個視頻令牌的總下載量?

否。對於視頻離線令牌,沒有匯總的下載進度值。應用開發人員確定將進行多少資產下載。首先下載資產是主要視頻以及首選的音頻和文本軌道。它通常是最大的下載,下載進度將從0.00上升到100.00。

如果下載請求包括其他媒體選擇(應用程序開發人員明確要求),則總下載時間就是主視頻和首選媒體選擇的總下載時間,以及每個其他媒體選擇的總下載時間。在UI中表示總進度時,請為每個下載選擇一個比例值,以使所有下載的總和總計為100%,並對每個媒體選擇的縮放下載時間求和。

識別對像類型

有什麼方法可以識別每種對象(視頻或文本軌道)的類型didProgressTo事件相關?

是的其他下載來自Apple Media Selection Option對象(AVMediaSelectionOption),而不是曲目。正在進度回調中標識正在下載的媒體選擇對象。( BCOVOfflineVideoManagerDelegate.h

Apple提供了檢查媒體選擇選項屬性的方法。有關詳細信息,請參閱Apple的AVMediaSelectionOption

您可以在Xcode調試器控制台中查看運行時的元數據值OfflinePlayer示例應用程序(不要被兩個英文選項誤導了-它只是一個示例應用程序)

OfflinePlayer[523:355259] AVMediaSelection option 0 | legible display name: English
OfflinePlayer[523:355259] AVMediaSelection option 0 | audible display name: English
OfflinePlayer[523:355259] AVMediaSelection option 1 | legible display name: English
OfflinePlayer[523:355259] AVMediaSelection option 1 | audible display name: English

您可以在DownloadManager代碼

暫停/恢復/取消下載

允許用戶暫停,恢復或取消內容下載。

如果用戶暫停/繼續或下載中斷,則下載功能將從中斷處恢復。例如,如果您在下載過程中失去了Wi-Fi連接,它將在您重新連接時從中斷處恢復。

如果您取消視頻下載,則所有進度都將被刪除。

本地目錄管理

Brightcove Native Player SDK簡化了管理下載的本地內容的過程。

可以將以下功能添加到您的應用中,以支持本地目錄管理:

顯示下載的內容

顯示每個節目/季節的所有下載劇集。

SDK返回所有下載內容的元數據和播放詳細信息。此元數據包括視頻標題,描述,縮略圖,可用標題,可用音軌等。

特定於脫機播放的新元數據屬性包括:

受 DRM 保護的內容

  • 令牌標識符
  • 許可證到期日期

所有內容

  • 下載開始時間和結束時間
  • 下載的縮略圖名稱及其文件URL
  • 下載的海報名稱及其文件URL
  • 視頻包的相對和派生文件URL

然後,您可以過濾特定實現的結果。

刪除本地內容

允許用戶從本地存儲中刪除內容。

SDK公開了一種刪除視頻及其元數據和相關資產的方法。

內容播放

本機SDK允許您在以下情況下播放內容:

  • 下載時播放視頻。
  • 下載後播放視頻。設備離線或在線時,可以在本地播放下載的內容。離線影片只能從本機儲存區播放。
  • 如果您選擇流式傳輸視頻的在線版本,則應從播放服務中檢索新的視頻對象。

分析

引入了用於測量與脫機流相關的數據的分析。有關詳細信息,請參見與本機SDK的離線播放相關的分析文件。

樣本

下表包含代碼示例的鏈接,以向您展示如何開始離線播放:

範例應用程式 描述
iOS離線播放 下載並播放 HLS 影片,包括受 FairPlay 加密保護的影片。如需開發人員的詳細資料,請參閱 iOS App 開發人員離線播放指南
Android離線播放 下載並播放 DASH 影片,包括受 Widevine 加密保護的影片。

常問問題

您可以在下面找到一些一般性問題的答案。

受 DRM 保護的內容

用戶可以更改系統時鐘以繞過到期日期嗎?

安卓:絕對有效期限確定許可證有效的日期和時間。這由Widevine和Android DRM層實施。從理論上講,Android中的DRM層必須防止用戶繞過有效期。Android OS發行說明中描述了我們可能發現的任何問題。

的iOS:許可證到期由FairPlay強制執行。 iOS會處理所有時鐘更改檢查等。應用程序可以選擇檢查許可證的到期時間,以警告用戶許可證已過期。這可能比簡單地播放過期的視頻然後接收到播放錯誤更可取。


在後台運行應用程序時,許可證和脫機視頻是否會繼續加載?

安卓:是的通常,許可證會立即下載,但是即使在後台運行應用程序,也可以下載許可證。

的iOS:許可證加載應在前台進行。我們有一個預加載許可證的方法。當應用程序在後台運行時,可以下載主要視頻內容。

所有內容

用於下載離線內容的視頻格式是什麼?

安卓:受DRM保護的DASH或未加密的DASH。

的iOS:HLS蒸。您可以為下載指定比特率以使用特定版本。


用戶在線時,下載的視頻會在本地播放還是流式播放?

下載的視頻可以在線或離線播放,但始終會使用下載的視頻。如果選擇播放視頻的在線版本,則應從“播放服務”中檢索新的視頻對象。離線影片只能從本機儲存區播放。


最佳實務

在開髮用於離線播放的應用程序時,以下準則應會有所幫助。

顯示暫停/取消按鈕

視頻下載開始後,應該顯示暫停和取消按鈕。

安卓:您應該在調用“onDownloadStarted回調DownloadEventListener。有關詳細信息,請參見離線播放示例應用

iOS:有關如何為離線播放創建應用的詳細信息,請參見iOS App開發人員指南

顯示清晰的內容

如果您的帳戶未啟用DRM,或者您使用的是清晰內容,則Brightcove Native SDK將不會執行服務器端許可證請求。因此,清晰的內容不被視為可供出租或購買。在大多數情況下,為獲得清晰的內容,建議您隱藏出租購買按鈕並顯示一個下載按鈕代替。

啟用功能

請與您的客戶經理聯繫,以了解定價並為您的帳戶啟用離線播放功能。

故障排除

以下提示可幫助您調查下載視頻時的問題。

當用戶由於網絡速度慢而試圖以高於設備無法處理的比特率下載資產時,可能會發生錯誤。

為避免這種情況,您可以添加代碼以檢查設備功能,並防止連接速度較慢的設備嘗試下載高比特率資產。您可以在限制連接的同時使用真實設備進行測試,並通過查爾斯·代理工具。

Android

有關處理錯誤的詳細信息,請參見來自Android的Native SDK的錯誤消息文件。這包括與脫機播放有關的錯誤消息。

iOS

有關處理錯誤的詳細信息,請參見適用於iOS的Native SDK的錯誤處理文件。

當離線播放代碼收到錯誤時,我們將其捕獲並拋出NSError。要獲取潛在的錯誤,您可以嘗試以下操作:

  NSError *underlyingError = initialError.userInfo[NSUnderlyingErrorKey];

有關更多信息,請參見iOS App開發人員離線播放指南

已知問題

有關影響本機SDK的離線播放的Android和iOS操作系統的已知問題的列表,請參見已知的問題支持文件。

注意事項和限制

以下說明適用於本機SDK支持的脫機播放功能:

廣告

離線播放不支持客戶端廣告或服務器端廣告。

HLSe

使用適用於 Android、iOS 或 tvOS 的 Brightcove Native SDK 離線播放不支持 HLSe 內容。

低功耗模式

設備上的低功耗模式可能會影響某些功能,包括下載。如需詳細資訊,請參閱下列內容:

分享的影片

只有在原始影片可以的情況下,才能下載分享的影片以供離線觀看。屬性會繼承自原始視訊,只能針對共用視訊進行變更。

純音頻

本機SDK通過脫機播放支持純音頻內容。您可以控制觀眾看到的內容,無論是海報圖像還是自定義屏幕。

Android的Native SDK需要一個VideoView,並且iOS的Native SDK需要一個UIView。因此,不支持背景音頻。這意味著當用戶將應用程序發送到後台時,音頻將不會繼續播放。

安卓:應用刪除

刪除應用程式後,所有下載的內容都會移除。只要不覆蓋默認存儲位置,這就是事實。

iOS:AirPlay

作為一項安全功能,您無法將脫機HLS視頻流式傳輸到AirPlay設備進行播放。Apple確認這是一個AVFoundation局限性。