小程式播放插件
更新時間:2026-08-14 17:04:09
保利威雲點播小程式播放插件基於保利威強大的後台能力與影片處理技術,並深度融合自身影片雲業務,為用戶提供簡單、快速、安全、穩定的影片播放服務,讓用戶輕鬆專注於業務發展本身,暢享極速高清播放體驗。
只需將影片上傳到保利威雲點播平台後,取得一個 vid 即可使用外掛程式播放影片,快速與自有業務整合。
微信小程式接入方式
申請使用外掛程式
首先,請參閱微信官方的插件使用文檔申請插件權限,在申請使用插件時,填寫以下 appid:wx4a350a258a6f7876。
添加後,請聯繫您的客戶經理或「保利威」官方客服,申請審核通過。
引入外掛
詳見官方文件,請盡量使用最新版本的插件。
// 使用插件前,使用者要在 app.json 中声明需要使用的插件
"plugins": {
"polyv-player": {
"version": "1.9.0",
"provider": "wx4a350a258a6f7876"
}
}
// 使用插件提供的自定义组件。在 json 文件定义需要引入的自定义组件时,使用 plugin:// 协议指明插件的引用名和自定义组件名
"usingComponents": {
"polyv-player": "plugin://polyv-player/player"
}
使用播放器元件
wxml 檔案
<polyv-player
id="{{playerContext}}" // 组件ID
playerId="{{playerId}}" //播放器ID
vid="{{vid}}" // 视频ID
viewerInfo="{{viewerInfo}}" // 观众信息
autoplay="{{true}}" // 是否自动播放
bind:statechange="onStateChange" //事件绑定
>
<!-- 使用具名插槽,实现在全屏和非全屏的情况,在 video 组件上显示内容 -->
<view slot="custom">自定义插槽</view>
</polyv-player>
組件元素支援的屬性
| 屬性 | 類型 | 必填 | 預設值 | 說明 | 最低版本 |
|---|---|---|---|---|---|
| id | String | Y | / | 組件ID,需全局唯一。用於取得播放器實例進而手動控制播放。 | 0.1.0 |
| playerId | String | Y | / | 播放器ID,保留屬性。 註:不要和 id 一致 |
0.1.0 |
| vid | String | Y | / | 影片上傳至保利威雲點播平台後生成的唯一ID | 0.1.0 |
| width | String | N | 100% | 播放器的寬度,支援 rpx 值和百分比兩種方式,如 300px 或 100%。 | 0.1.0 |
| height | String | N | / | 播放器高度,支援 rpx 值和百分比兩種方式。當 height 值為空時,會採用組件父容器的高度。 | 0.1.0 |
| viewerInfo | Object | N | / | 自訂觀眾資訊。設定後,播放器上報的觀看行為日誌中會附帶觀眾資訊。詳見:觀眾資訊設定與統計 | 0.1.0 |
| sign | String | N | / | 播放 Web 加密影片所需的簽名,由業務方伺服器端生成並回傳給播放器。詳見:播放加密影片 | 0.1.0 |
| ts | Number | N | / | 播放 Web 加密影片需傳入的 13 位毫秒級時間戳 | 0.1.0 |
| appId | String | N | / | 播放子帳號的 Web 加密影片時需傳入子帳號的 appId,同時 sign 計算需使用帳號對應的 secretkey | 0.1.0 |
| autoplay | Boolean | N | false | 是否自動播放。 | 0.1.2 |
| muted | Boolean | N | false | 是否靜音播放 | 0.1.2 |
| loop | Boolean | N | false | 是否循環播放。 | 0.1.2 |
| startTime | Number | N | / | 播放開始時間,表示影片從第幾秒開始播放,參數值需小於影片時長。 | 0.1.2 |
| poster | String、Boolean | N | 後台影片封面圖設定 | 影片封面圖,設定為 false 則不顯示封面圖 | 1.9.0 |
| direction | Number | N | / | 設定全螢幕時影片的方向,0 正常豎向,90 螢幕逆時針 90 度,-90 順時針 90 度,不指定則根據寬高比自動判斷 | 0.1.2 |
| title | String | N | / | 影片全螢幕時在頂部顯示的標題。為空時不顯示。 | 0.1.2 |
| quality | Array | N | {1,2,3} | 影片畫質選擇列表,1 流暢,2 高清,3 超清 | 0.1.2 |
| defaultQuality | Number | N | / | 預設畫質。 註:播放器會記錄上次使用的畫質,若無記錄則取後台設定的值。 |
0.1.2 |
| showQualityBtn | Boolean | N | true | 是否顯示畫質選擇按鈕 | 0.1.2 |
| playbackRate | Array | N | [0.5,1.0,1.25,1.5,2.0] | 倍速選擇列表,支援 0.5/0.8/1.0/1.25/1.5/2.0/3.0/4.0 倍速 基礎庫 2.6.3 起支援 2.0 倍速,基礎庫 3.7.5 起支援 3.0/4.0 倍速,詳情見 video 的倍數說明 |
0.1.2 |
| showPlaybackRateBtn | Boolean | N | true | 是否顯示倍速選擇按鈕 | 0.1.2 |
| showControls | Boolean | N | true | 是否顯示播放控制項 | 0.1.2 |
| showSettingBtn | Boolean | N | false | 是否顯示半螢幕時播放控制列的設定按鈕 | 0.1.2 |
| showProgressBar | Boolean | N | true | 是否顯示進度條 | 0.1.2 |
| showFullscreenBtn | Boolean | N | true | 是否顯示全螢幕按鈕 | 0.1.2 |
| useNativeControls | Boolean | N | false | 是否顯示 video 組件的原生播放控制項。設定為 true 後,啟用系統級小窗播放,可在裝置桌面以小窗形式繼續播放影片。(注意:設定為 true 後彈幕、跑馬燈等位於播放器上層的功能不可用) | 1.11.0 |
| enableAutoRotation | Boolean | N | true | 是否開啟手機橫螢幕時自動全螢幕,當系統設定開啟自動旋轉時生效 | 0.1.2 |
| isAllowSeek | String | N | yes | 是否允許進度條拖拽:yes 允許,no 不允許,ifViewed 只允許在已播放過的進度範圍內拖拽 | 0.1.2 |
| marqueeConfig | Object | N | / | 跑馬燈參數設定,詳見文件下方跑馬燈參數說明。 | 0.1.2 |
| logoConfig | Object | N | 後台播放器 logo 設定 | 播放器 logo 設定: enable:是否顯示 logo width/height:logo 寬高,支援像素和百分比兩種單位,如 100px 或 10%。logo 要保持原圖比例,如果 width 和 height 與原圖片比例不一致,不拉伸圖片。以較小的一邊為準,另一邊等比例轉換。當播放器尺寸發生變化時(例如橫豎螢幕切換),logo 等比例變化。 src:logo 圖片的 url position:logo 位置 1 左上,2 右上(預設)3 左下 4 右下 xOffset:水平偏移,以播放器左上角所在的點為基準,只支援百分比 yOffset:垂直偏移,以播放器左上角所在的點為基準 logoConfig:{enable:true,width:10%,src:'xxx.png',position:1,opacity:0.7,xOffset:10%,yOffset:2%} 註:只需指定 width 參數即可,height 按比例顯示。 |
0.1.2 |
| videoIntroConfig | Boolean | N | 後台播放器片頭設定 | 影片片頭設定: enable:是否播放片頭 duration:片頭顯示時長。大於片頭影片素材時長則以素材時長為準 src:片頭素材 url,支援常見的影片和圖片格式 show-skip-btn:是否顯示跳過片頭按鈕 videoIntroConfig:{enable:true,duration:15,src:'xxx.mp4',show-skip-btn:false} |
0.1.4 |
| videoOutroConfig | Boolean | N | 後台播放器片尾設定 | 影片片尾設定,使用方式同片頭參數一致。 | 0.1.4 |
| enablePlayGesture | Boolean | N | true | 是否開啟雙擊切換播放/暫停手勢 | 0.4.0 |
| useBackgroundAudio | Boolean | N | false | 是否開啟背景音訊模式,實現音訊背景播放 | 0.4.0 |
| videoFit | String | N | contain | 當影片大小與 video 容器大小不一致時,影片的表現形式 包含:contain、填充:fill、覆蓋:cover | 0.10.0 |
| isControlBarFixed | Boolean | N | false | 是否關閉控制列自動隱藏 | 0.10.0 |
| pictureInPictureMode | string/Array | N | 設定小窗模式: push, pop,空字串或透過陣列形式設定多種模式(如: ["push", "pop"]) | 0.13.0 | |
| showAudioBtn | Boolean | N | true | 是否顯示音訊模式切換按鈕。註:需要 vid 帶音訊檔案才顯示音訊模式切換按鈕。 | 0.13.0 |
| ban_history_time | Boolean | N | true | 是否禁用續播功能,預設禁用。註:此配置也會影響遠端續播(historyTimeType 為 remote)。0.14.0 及後續版本支援 | 0.14.0 |
| history_video_duration | Number | N | 5 | 開啟續播功能後,預設時長超過 5 分鐘的影片才支援續播功能,可透過此參數修改,單位:分鐘。影片前 10 秒和最後 10 秒的播放過程中不會記錄續播時間點。 | 0.14.0 |
| historyTimeType | String | N | local | 取值:"local" 或 "remote"。續播記錄儲存的方式,為 local 時儲存在 localStorage,為 remote 時則儲存在 polyv 伺服器端。註:配置為 remote 時,後續的記錄不會儲存在本地,且兩個記錄都存在時,優先讀取遠端的值。 | 1.0.0 |
| vslideGesture | Boolean | N | false | 在非全螢幕模式下,是否開啟亮度與音量調節手勢。 | 1.1.0 |
| vslideGestureInFullscreen | Boolean | N | true | 在全螢幕模式下,是否開啟亮度與音量調節手勢。 | 1.1.0 |
| pictureInPictureShowProgress | Boolean | N | false | 是否在小窗模式下顯示播放進度。 | |
| showThumbnail | Boolean | N | true | 拖拽播放時是否顯示預覽縮圖。 註:僅在全螢幕時生效 |
1.1.0 |
| showSrt | Boolean | N | true | 是否開啟字幕顯示。 | 1.12.0 |
| playsafe | String/Function | N | / | 播放加密影片所需的授權憑證。如何使用詳見:播放加密影片。 Function 使用: playsafe: function(vid, next) { $.ajax({ url: 'token 接口', type: "POST", data: obj, }).done(function(res) { next(res.data.token); }); }, |
1.15.0 |
| playsafeUrl | String | N | / | 取得播放加密影片憑證的接口 URL。與 playsafe 參數二選一。 | 1.15.0 |
元件支援的事件
| 屬性 | 說明 |
|---|---|
| bindstatechange | 播放狀態變更事件,包含 loading(資源載入中)、playing(播放中,包含廣告和影片)、ended(廣告和影片皆播放完成)、error,回呼函數接受兩個參數 newstate、oldstate |
| bindplaying | 當開始/繼續播放時觸發 playing 事件 |
| bindpause | 當暫停播放時觸發 pause 事件 |
| bindended | 當播放到末尾時觸發 ended 事件 |
| bindtimeupdate | 播放進度變化時觸發,event.detail = {currentTime, duration}。觸發頻率為 250ms 一次 |
| bindfullscreenchange | 影片進入和退出全螢幕時觸發,event.detail = {fullScreen, direction},direction 有效值為 vertical 或 horizontal |
| bindwaiting | 影片出現緩衝時觸發 |
| binderror | 影片播放出錯時觸發 |
| bindprogress | 載入進度變化時觸發,僅支援一段載入。event.detail = {buffered},百分比 |
| bindloadedmetadata | 影片元資料載入完成時觸發。event.detail = {width, height, duration} |
| bindcontrolstoggle | 切換 controls 顯示隱藏時觸發。event.detail = {show} |
| bindenterpictureinpicture | 播放器進入小視窗 |
| bindleavepictureinpicture | 播放器退出小視窗 |
| bindseekCompleted | seek 完成時觸發 |
| bindplaybackRateChange | 切換倍速時觸發。event.detail = {previousRate,currentRate},previousRate:上一個倍速值,currentRate:目前倍速值 |
| bindprogressDragStart | 觸發於進度條圓點開始拖動。event.detail = { duration, percent, predictionTime },duration:影片總時長,percent:圓點在進度條上的位置百分比,範圍[0-100],predictionTime 目前進度的時間(格式:HH:mm:ss) |
| bindprogressDragMove | 觸發於進度條圓點拖動過程中。event.detail = { duration, percent, predictionTime },duration:影片總時長,percent:圓點在進度條上的位置百分比,範圍[0-100],predictionTime 目前進度的時間(格式:HH:mm:ss) |
| bindprogressDragEnd | 觸發於進度條圓點結束拖動。event.detail = { duration, percent, predictionTime },duration:影片總時長,percent:圓點在進度條上的位置百分比,範圍[0-100],predictionTime 目前進度的時間(格式:HH:mm:ss) |
| bindtoggleClickPlay | 使用者透過 UI 主動播放/暫停時觸發,回傳值 Boolean,表示是否暫停中 |
外掛程式 API
可透過外掛程式取得播放器實例,包含以下方法:
| 名稱 | 參數 | 回傳值 | 說明 |
|---|---|---|---|
| play | / | / | 播放影片 |
| pause | / | / | 暫停播放 |
| stop | / | / | 停止播放 |
| seek | (Number) | / | 跳轉到指定位置,參數單位為:秒 |
| getDuration | / | Number | 取得影片時長,回傳值單位為:秒 |
| getCurrentTime | / | Number | 取得影片目前的播放時刻,回傳值單位為:秒 |
| getVideoPlayDuration | / | Number | 取得目前影片已播放的時長,不包含廣告、片頭、暫停、片尾等時間 |
| getPlayId | / | String | 取得目前播放行為的唯一識別碼,與後台統計中觀看日誌的 pid 欄位對應 |
| changeVid | (String/Object) | / | 切換影片。切換到 web 加密影片播放時,需傳入一個物件,如,changeVid({vid, ts, sign})。詳見:播放加密影片 。 |
| switchQuality | (Number) | / | 切換畫質,參數取值{1,2,3},分別對應流暢、高清、超清 |
| playbackRate | (Number) | / | 設定倍速播放,支援 0.5/0.8/1.0/1.25/1.5/2.0 速率 |
| requestFullScreen | (Object) | / | 進入全螢幕。若有自訂內容需在全螢幕時顯示,需將內容節點放置到 video 節點內。參數是 Object 類型,需包含 direction 屬性,用於設定全螢幕時影片的方向,0 正常豎向,90 螢幕逆時針90度,-90 順時針90度,不指定則根據寬高比自動判斷 direction 合法值。 |
| exitFullScreen | / | / | 退出全螢幕 |
| addDanmuData | (array) | / | 新增多條彈幕資料 |
| sendDanmu | Object | / | 新增單條彈幕資料 |
| openDanmu | / | / | 開啟彈幕 |
| closeDanmu | / | / | 關閉彈幕 |
| resize | / | / | 根據外部視窗尺寸大小,自適應皮膚進度條尺寸 |
| showWeakNetworkTips | / | / | 此介面在插件的影片區域顯示弱網提示,可以透過參數修改提示的文字和位置。除非在特定場景下,否則由業務方控制提示的顯示和隱藏。詳細說明 |
| closeWeakNetworkTips | / | / | 關閉弱網提示。詳細說明 |
| getQuality | / | / | 取得目前的清晰度資料。詳細說明 |
| getScreenshotData | (type, encoderOptions) | String | 參數說明: type(可選):用於設定圖片格式,預設為 image/png。類型: 'image/png' | 'image/webp' | 'image/jpeg'encoderOptions(可選):在指定圖片格式為 image/jpeg 或 image/webp 的情況下,可以從 0 到 1 的區間內選擇圖片的品質。如果超出取值範圍,將會使用預設值 0.92。其他參數會被忽略。回呼說明: 圖片的 Base64 編碼字串,包含 MIME 類型前綴(如data:image/png;base64,),支援 PNG/WEBP/JPEG 格式。 ps: 安卓第一張截圖總是回傳為空。 |
| getScreenshotImage | (type, encoderOptions) | String | 傳入參數類型同上。回傳影片截圖的暫存位址。 |
範例程式碼:
// 通过插件的自定义组件ID获取上下文,在一些特殊场景下,如触发小程序生命周期onShow或onHide,建议重新使用this.selectComponent('#myComponentID')再次获取一次组件上下文
var polyvPlayerContext = this.selectComponent('#myComponentID');
polyvPlayerContext.play(); // 播放
polyvPlayerContext.pause(); // 暂停
polyvPlayerContext.stop() //停止
polyvPlayerContext.seek(100); //跳转到指定位置,单位:秒
polyvPlayerContext.playbackRate(1.5); // 设置播放速率
var PolyvBarrageContext = this.selectComponent('#myComponentID').getPolyvBarrage(); // 获取弹幕实例
PolyvBarrageContext.sendDanmu({
color: '#ffffff',
text: this.data.danmuText
}); // 添加单条弹幕数据
PolyvBarrageContext.addDanmuData([{
color: '#ffffff',
text: this.data.danmuText
}]); // 添加多条弹幕数据
PolyvBarrageContext.closeDanmu(); // 关闭弹幕
PolyvBarrageContext.openDanmu(); // 开启弹幕
wx.onWindowResize(windowResize); // 监听窗口尺寸变化
var windowResize = function() {
var polyvSkinContext = this.selectComponent('#polyvPlayer').getPolyvSkin(); // 获取皮肤实例
polyvSkinContext.resize(); // 自适应进度条尺寸
}
跑馬燈參數
marqueeConfig 參數屬性如下:
| 屬性 | 類型 | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
| text | String | Y | / | 跑馬燈文字內容 |
| fontSize | Integer | N | 16 | 跑馬燈字型大小 |
| fontColor | String | N | 0x000000 | 跑馬燈字體顏色 |
| textAlpha | Float | N | 1 | 文字透明度,0~1 |
| border | Boolean | N | false | 是否描邊 |
| borderColor | String | N | 0x000000 | 描邊顏色 |
| borderAlpha | Float | N | 1 | 描邊透明度,0~1 |
| borderWidth | Integer | N | 5 | 描邊寬度 0~255 |
| animationEffect | String | N | roll | 跑馬燈動畫效果: roll:從右到左滾動 blink :隨機位置閃爍 |
| displayDuration | Number | N | 5 | 單次跑馬燈顯示的時長,單位:秒。 動畫效果為roll時,表示單次滾動的時長(從開始滾入到完全滾出) 動畫效果為blink時,表示從開始顯示到完全消失所需的時長 |
錯誤代碼
| 錯誤代碼 | 說明 | |
|---|---|---|
| #001 | 方案過期,請聯絡客服續期。 | |
| #002 | 方案內流量已用完,請聯絡客服購買流量。 | |
| #003 | 影片設定檔載入失敗。通常是由於網路問題導致無法載入影片設定檔,建議檢查/切換網路並重試。 | |
| #004 | 影片不存在。請檢查 vid 是否正確,影片是否已被刪除。 | |
| #005 | 影片審核未通過。只有「已發布」狀態的影片才能播放。 | |
| #007 | 影片檔案載入失敗。通常是由於網路問題導致無法載入影片檔案,建議檢查/切換網路並重試。 | |
| #008 | 影片檔案載入逾時。通常是由於網路問題導致載入影片檔案逾時,建議檢查/切換網路並重試。 | |
| #009 | 影片正在審核中。只有「已發布」狀態的影片才能播放。 | |
| #010 | 影片正在編碼中。只有「已發布」狀態的影片才能播放。 | |
| #012 | 跑馬燈載入錯誤。請檢查跑馬燈介面回傳的參數是否正確,詳見:授權播放和跑馬燈 。 | |
| #013 | 影片授權播放認證失敗。請檢查授權認證介面,詳見:授權播放和跑馬燈 。 | |
| #025 | 基於影片版權保護考量,播放器會禁止 app 加密影片在小程式上播放。詳見:影片加密 。 |
外部樣式類別
從插件的 0.15.0 版本開始,支援外部樣式類別,用於自訂播放器的控制欄皮膚樣式,關於外部樣式類別的詳細說明與限制可以參考微信小程式官方文件。若樣式修改無效,建議可以加上 !important 來提高優先級。
目前可以支援修改的樣式:
| 自訂 class | 說明 |
|---|---|
| ex-control-skin | 控制列父容器,修改此處樣式可影響播放器控制列的樣式 |
| ex-control-icon-play | 控制列的 play 圖示,可透過設定 background-image 修改 icon |
| ex-control-icon-pause | 控制列的 pause 圖示,可透過設定 background-image 修改 icon |
| ex-control-icon-setting | 控制列的設定圖示,可透過設定 background-image 修改 icon |
| ex-control-icon-audio | 控制列的音訊模式圖示,可透過設定 background-image 修改 icon |
| ex-control-icon-back | 進入全螢幕後,控制列的返回圖示,可透過設定 background-image 修改 icon |
| ex-control-icon-fullscreen | 控制列的全螢幕圖示,可透過設定 background-image 修改 icon |
| ex-control-timeline | 控制列的時間控制項容器,修改此處顏色會影響目前播放時間和影片時長的顏色 |
| ex-control-current | 控制列的時間控制項下的目前播放器時間 |
| ex-control-duration | 控制列的時間控制項下的影片時長 |
| ex-control-setting-panel | 點擊「設定」按鈕後彈出的設定面板,修改此處樣式會影響設定面板的整體樣式 |
| ex-control-progress-dot | 控制列的進度條圓點 |
| ex-control-progress-bar | 控制列的進度條 |
| ex-control-progress-load | 控制列的進度條(已載入部分) |
| ex-control-progress-current | 控制列的進度條(目前播放進度) |
| ex-control-setting-btn | 設定面板功能每個功能右側的選項按鈕 |
| ex-control-setting-btn-select | 設定面板功能每個功能右側的選項按鈕(選取狀態) |
| ex-control-setting-text | 設定面板功能每個功能左側的說明文字,例如倍速。也影響全螢幕狀態時,控制列底部右側的說明文字,例如倍速的 1x |
範例 wxml 和 wxss:
<polyv-vod-player
ex-control-icon-play="plv-custom-control-play" //自定义的class名
ex-control-icon-pause="plv-custom-control-pause"
ex-control-timeline="ex-control-timeline"
ex-control-current="ex-control-current"
ex-control-duration="ex-control-duration"
ex-control-icon-setting="ex-control-setting"
ex-control-setting-panel="ex-control-setting-panel"
ex-control-icon-fullscreen="ex-control-icon-fullscreen"
ex-control-icon-audio="ex-control-icon-audio"
ex-control-icon-back="ex-control-icon-back"
ex-control-progress-dot="ex-control-progress-dot"
ex-control-progress-bar="ex-control-progress-bar"
ex-control-progress-load="ex-control-progress-load"
ex-control-progress-current="ex-control-progress-current"
ex-control-skin="ex-control-skin"
ex-control-setting-btn="ex-control-setting-btn"
ex-control-setting-btn-select="ex-control-setting-btn-select"
ex-control-setting-text="ex-control-setting-text"
/>
.plv-custom-control-play {
background: url('https://{自定义的icon地址}/play.png') !important;
}
.plv-custom-control-pause {
background: url('https://{自定义的icon地址}/pause.png') !important;
}
.ex-control-timeline {
color: red;
}
Q&A
Q1. 使用點播小程式插件是否需要申請影片類資格?
A1. 使用點播小程式插件時,小程式通常無需重複申請插件自身具備的「文娛 - 其他影片」類目資質,但僅支援微信允許的非個人主體小程式。接入方仍需確保主體類型、實際業務內容和所選服務類目符合微信要求,並遵守小程式使用「影片類插件」的相關規範。如果小程式不透過本插件,而是使用自研元件或其他方式提供影片播放,應根據實際業務申請相應服務類目。最終以微信審核結果為準,具體可參考小程式插件功能介紹和微信開放的服務類目。
Q2. 小程式授權的影片無法播放?
A2. 目前小程式點播外掛暫不支援小程式授權方式的影片,建議使用WEB授權。
