保利威文档中心

幫助中心

5-视频下载

更新時間:2026-06-15 14:35:12

1.下載模組整合

影片下載功能透過獨立模組 media-player-sdk-addon-download 提供,需添加對應依賴

implementation("net.polyv.android:media-player-sdk-addon-download:${version}")

2.影片下載

影片下載的管理類別為 PLVMediaDownloaderManager,可透過此類別執行影片的下載、暫停、刪除等操作

2.1 初始化

在使用影片下載功能前,需呼叫初始化方法 PLVMediaDownloaderManager.init

/**
 * 初始化,调用其他方法前必须调用初始化方法
 */
@JvmStatic
@JvmOverloads
fun init(
    setting: PLVMediaDownloadSetting,
    onFinish: () -> Unit,
    onFailed: (Throwable) -> Unit
)

其中,可透過 setting 參數設定下載的相關配置:

data class PLVMediaDownloadSetting @JvmOverloads constructor(
    /**
     * 下载视频存放的根目录
     *
     * SDK 不会主动申请写入权限,外部调用需要确保 APP 具有对应目录的写入权限
     */
    val downloadRootDirectory: File,

    /**
     * 同时下载的任务数量限制
     */
    val concurrentDownloads: Int = Int.MAX_VALUE,

    /**
     * 清晰度降级
     *
     * 无法下载指定的清晰度时,自动下载较低的清晰度
     */
    val allowBitRateFallback: Boolean = true
)

2.2 開始下載

首先,透過 PLVMediaDownloaderManager.getDownloader 取得對應影片的下載器

/**
 * 获取下载器
 *
 * @param mediaResource 视频资源
 * @param bitRate 指定下载的清晰度,可以通过 [updateSetting] 配置没有对应清晰度时自动降级。
 * 启用自动降级时可以通过 [IPLVMediaDownloaderListenerRegistry.downloadBitRate] 监听实际下载的清晰度。
 */
@JvmStatic
@JvmOverloads
fun getDownloader(
    mediaResource: PLVMediaResource,
    bitRate: PLVMediaBitRate = PLVMediaBitRate.BITRATE_AUTO
): PLVMediaDownloader

接著,呼叫 PLVMediaDownloaderManager.startDownloader 傳入對應的下載器,即開始影片的下載

/**
 * 开始下载
 */
@JvmStatic
fun startDownloader(downloader: PLVMediaDownloader)

2.3 狀態監聽

下載過程中的進度、影片資訊、下載速度等狀態可透過下載器的回呼中心 PLVMediaDownloader.listenerRegistry 監聽

val downloader = PLVMediaDownloaderManager.getDownloader(...)
// 监听下载速度
downloader.listenerRegistry.downloadBytesPerSecond.observe { bytesPerSecond ->
    // 业务操作
}

2.4 暫停、刪除

影片下載的暫停和刪除也是透過下載管理類別 PLVMediaDownloaderManager 實現:

/**
 * 暂停下载
 */
@JvmStatic
fun pauseDownloader(downloader: PLVMediaDownloader)

/**
 * 删除已下载的视频文件
 */
@JvmStatic
fun deleteDownloadContent(downloader: PLVMediaDownloader)

3.播放離線影片

為播放下載到本機的影片,需在建構影片資源 PLVMediaResource 時,傳入影片下載的根目錄路徑(即下載時設定的 PLVMediaDownloadSetting.downloadRootDirectory

data class PLVVodMediaResource(
    // ...
    // 视频下载的路径
    val localVideoSearchPaths: List<String>
)

播放器會在 localVideoSearchPaths 下搜尋對應的離線影片,在已下載對應影片到本機的情況下優先播放本機影片。

4.點播SDK下載的影片相容

播放器支援相容播放點播SDK已下載完成的影片,但在播放之前,需呼叫 PLVMediaDownloaderVodMigrate.migrate 以確保播放器SDK能正常識別點播SDK下載的影片:

object PLVMediaDownloaderVodMigrate {

    /**
     * 兼容播放在点播 SDK 下载的视频
     *
     * 只支持已经下载完成的视频。SDK 不会主动申请写入权限,外部调用需要确保 APP 具有对应目录的写入权限。
     *
     * @param searchRoots 搜索下载视频的根目录
     */
    @JvmStatic
    @JvmOverloads
    fun migrate(
        searchRoots: List<String>,
        onFinish: () -> Unit,
        onFailed: (Throwable) -> Unit
    )

}

其中,searchRoots 參數為點播SDK下載時設定的下載根目錄。

透過 migrate 方法相容的點播下載,僅能相容已下載完成影片的播放。播放器SDK不會接管下載進度管理,您仍需在點播SDK進行下載管理、刪除等操作。

5.自訂傳入token

影片下載支援加密影片版權保護的自訂傳入token方式。生產環境建議由您的伺服器端產生下載所需的 token 後下發給客戶端,再按以下方式傳入:

val downloader = PLVMediaDownloaderManager.getDownloader(...)
downloader.listenerRegistry.vodTokenRequestListener = object : IPLVVodMediaTokenRequestListener {
    override fun onRequestToken(
        mediaResource: PLVVodMediaResource,
        callback: (PLVVodVideoTokenVO?) -> Unit
    ) {
        // 通过网络请求,向您的服务器请求视频下载token
        var token: PLVVodVideoTokenVO
        // 将token返回给播放器
        callback(token)
    }
}
联系客服,在线咨询