# live-player
基礎(chǔ)庫 1.7.0 開始支持,低版本需做兼容處理。
小程序插件:支持,需要小程序基礎(chǔ)庫版本不低于 2.3.0
微信 Windows 版:支持
微信 Mac 版:支持
微信 鴻蒙 OS 版:支持
相關(guān)文檔: wx.createLivePlayerContext
渲染框架支持情況:Skyline (使用最新 Nightly 工具調(diào)試)、WebView
# 功能描述
實(shí)時(shí)音視頻播放(v2.9.1 起支持同層渲染)。
# 申請(qǐng)開通
暫只針對(duì)國(guó)內(nèi)主體如下類目的小程序開放,需要先通過類目審核,再在小程序管理后臺(tái),「開發(fā)」-「接口設(shè)置」中自助開通該組件權(quán)限。
| 一級(jí)類目/主體類型 | 二級(jí)類目 | 小程序內(nèi)容場(chǎng)景 |
|---|---|---|
| 社交 | 直播 | 涉及娛樂性質(zhì),如明星直播、生活趣事直播、寵物直播等。選擇該類目后首次提交代碼審核,需經(jīng)當(dāng)?shù)鼗ヂ?lián)網(wǎng)主管機(jī)關(guān)審核確認(rèn),預(yù)計(jì)審核時(shí)長(zhǎng) 7 天左右 |
| 教育 | 在線視頻課程 | 網(wǎng)課、在線培訓(xùn)、講座等教育類直播 |
| 醫(yī)療 | 互聯(lián)網(wǎng)醫(yī)院,公立醫(yī)療機(jī)構(gòu),三級(jí)私立醫(yī)療機(jī)構(gòu),其他私立醫(yī)療機(jī)構(gòu) | 問診、大型健康講座等直播 |
| 金融 | 銀行、信托、公募基金、私募基金、證券/期貨、證券、期貨投資咨詢、保險(xiǎn)、企業(yè)征信、新三板信息服務(wù)平臺(tái)、股票信息服務(wù)平臺(tái)、股票信息服務(wù)平臺(tái)(港股/美股)、消費(fèi)金融、融資擔(dān)保、汽車金融/融資租賃 | 金融產(chǎn)品視頻客服理賠、金融產(chǎn)品推廣直播等 |
| 汽車 | 汽車預(yù)售 | 汽車預(yù)售、推廣直播 |
| 政府主體賬號(hào) | / | 政府相關(guān)工作推廣直播、領(lǐng)導(dǎo)講話直播等 |
| IT科技 | 多方通信;音視頻設(shè)備 | 為多方提供電話會(huì)議/視頻會(huì)議等服務(wù);智能家居場(chǎng)景下控制攝像頭 |
| 房地產(chǎn)服務(wù) | 房地產(chǎn)營(yíng)銷 | 房地產(chǎn)營(yíng)銷直播服務(wù)、在線音視頻帶看等 |
| 商業(yè)服務(wù) | 公證 | 在線業(yè)務(wù)辦理等 |
# 通用屬性
| 屬性 | 類型 | 默認(rèn)值 | 必填 | 說明 | 最低版本 | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| src | string | 否 | 音視頻地址。目前僅支持 flv, rtmp 格式 | 1.7.0 | ||||||||||
| mode | string | live | 否 | 模式 | 1.7.0 | |||||||||
| ||||||||||||||
| autoplay | boolean | false | 否 | 自動(dòng)播放 | 1.7.0 | |||||||||
| muted | boolean | false | 否 | 是否靜音 | 1.7.0 | |||||||||
| orientation | string | vertical | 否 | 畫面方向 | 1.7.0 | |||||||||
| ||||||||||||||
| object-fit | string | contain | 否 | 填充模式,可選值有 contain,fillCrop | 1.7.0 | |||||||||
| ||||||||||||||
| background-mute | boolean | false | 否 | 進(jìn)入后臺(tái)時(shí)是否靜音(已廢棄,默認(rèn)退后臺(tái)靜音) | 1.7.0 | |||||||||
| min-cache | number | 1 | 否 | 最小緩沖區(qū),單位s(RTC 模式推薦 0.2s) | 1.7.0 | |||||||||
| max-cache | number | 3 | 否 | 最大緩沖區(qū),單位s(RTC 模式推薦 0.8s)。緩沖區(qū)用來抵抗網(wǎng)絡(luò)波動(dòng),緩沖數(shù)據(jù)越多,網(wǎng)絡(luò)抗性越好,但時(shí)延越大。 | 1.7.0 | |||||||||
| sound-mode | string | speaker | 否 | 聲音輸出方式 | 1.9.90 | |||||||||
| ||||||||||||||
| auto-pause-if-navigate | boolean | true | 否 | 當(dāng)跳轉(zhuǎn)到本小程序的其他頁面時(shí),是否自動(dòng)暫停本頁面的實(shí)時(shí)音視頻播放 | 2.5.0 | |||||||||
| auto-pause-if-open-native | boolean | true | 否 | 當(dāng)跳轉(zhuǎn)到其它微信原生頁面時(shí),是否自動(dòng)暫停本頁面的實(shí)時(shí)音視頻播放 | 2.5.0 | |||||||||
| picture-in-picture-mode | string/Array | 否 | 設(shè)置小窗模式: push, pop,空字符串或通過數(shù)組形式設(shè)置多種模式(如: ["push", "pop"]) | 2.10.3 | ||||||||||
| ||||||||||||||
| picture-in-picture-init-position | string | 否 | 小窗模式下小窗的初始顯示位置,格式為 (alignment, y),其中 alignment 表示小窗吸附屏幕左側(cè)還是右側(cè),可選值為 left、right,y 代表小窗最頂部所在的屏幕高度百分比 | 3.3.0 | ||||||||||
| enable-auto-rotation | boolean | false | 否 | 是否開啟手機(jī)橫屏?xí)r自動(dòng)全屏,當(dāng)系統(tǒng)設(shè)置開啟自動(dòng)旋轉(zhuǎn)時(shí)生效 | 2.11.0 | |||||||||
| referrer-policy | string | no-referrer | 否 | 格式固定為 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 為小程序的 appid,{version} 為小程序的版本號(hào),版本號(hào)為 0 表示為開發(fā)版、體驗(yàn)版以及審核版本,版本號(hào)為 devtools 表示為開發(fā)者工具,其余為正式版本; | 2.13.0 | |||||||||
| ||||||||||||||
| enable-casting | boolean | false | 否 | 是否支持投屏。開啟后,可以通過 LivePlayerContext 上相關(guān)方法進(jìn)行操作。 | 2.32.0 | |||||||||
| bindstatechange | eventhandle | 否 | 播放狀態(tài)變化事件,detail = {code} | 1.7.0 | ||||||||||
| bindfullscreenchange | eventhandle | 否 | 全屏變化事件,detail = {direction, fullScreen} | 1.7.0 | ||||||||||
| bindnetstatus | eventhandle | 否 | 網(wǎng)絡(luò)狀態(tài)通知,detail = {info} | 1.9.0 | ||||||||||
| bindaudiovolumenotify | eventhandler | 否 | 播放音量大小通知,detail = {} | 2.10.0 | ||||||||||
| bindenterpictureinpicture | eventhandler | 否 | 播放器進(jìn)入小窗 | 2.11.0 | ||||||||||
| bindleavepictureinpicture | eventhandler | 否 | 播放器退出小窗 | 2.11.0 | ||||||||||
| bindcastinguserselect | eventhandler | 否 | 用戶選擇投屏設(shè)備時(shí)觸發(fā) detail = { state: "success"/"fail" } | 2.32.0 | ||||||||||
| bindcastingstatechange | eventhandler | 否 | 投屏成功/失敗時(shí)觸發(fā) detail = { type, state: "success"/"fail" } | 2.32.0 | ||||||||||
| bindcastinginterrupt | eventhandler | 否 | 投屏被中斷時(shí)觸發(fā) | 2.32.0 | ||||||||||
# 狀態(tài)碼
| 代碼 | 說明 |
|---|---|
| 2001 | 拉流:已經(jīng)連接服務(wù)器 |
| 2002 | 拉流:已經(jīng)連接 RTMP 服務(wù)器,開始拉流 |
| 2003 | 拉流:網(wǎng)絡(luò)接收到首個(gè)視頻數(shù)據(jù)包(IDR) |
| 2004 | 拉流:視頻播放開始 |
| 2005 | 拉流:視頻播放進(jìn)度 |
| 2006 | 拉流:視頻播放結(jié)束 |
| 2007 | 拉流:視頻播放Loading |
| 2008 | 拉流:解碼器啟動(dòng) |
| 2009 | 拉流:視頻分辨率改變 |
| 2030 | 音頻設(shè)備發(fā)生改變,即當(dāng)前的輸入輸出設(shè)備發(fā)生改變,比如耳機(jī)被拔出 |
| 2032 | 拉流:視頻渲染首幀事件 |
| 2101 | 拉流:當(dāng)前視頻幀解碼失敗 |
| 2102 | 拉流:當(dāng)前音頻幀解碼失敗 |
| 2103 | 拉流:網(wǎng)絡(luò)斷連, 已啟動(dòng)自動(dòng)重連 |
| 2104 | 拉流:網(wǎng)絡(luò)來包不穩(wěn):可能是下行帶寬不足,或由于主播端出流不均勻 |
| 2105 | 拉流:當(dāng)前視頻播放出現(xiàn)卡頓 |
| 2106 | 拉流:硬解啟動(dòng)失敗,采用軟解 |
| 2107 | 拉流:當(dāng)前視頻幀不連續(xù),可能丟幀 |
| 2108 | 拉流:當(dāng)前流硬解第一個(gè)I幀失敗,SDK自動(dòng)切軟解 |
| 3001 | 拉流:RTMP -DNS解析失敗 |
| 3002 | 拉流:RTMP服務(wù)器連接失敗 |
| 3003 | 拉流:RTMP服務(wù)器握手失敗 |
| 3005 | 拉流:RTMP 讀/寫失敗,之后會(huì)發(fā)起網(wǎng)絡(luò)重試 |
| -2301 | 拉流:網(wǎng)絡(luò)斷連,且經(jīng)多次重連無效,請(qǐng)自行重啟拉流 |
| -2302 | 拉流:獲取拉流地址失敗 |
# 網(wǎng)絡(luò)狀態(tài)數(shù)據(jù)
| 鍵名 | 說明 |
|---|---|
| videoBitrate | 當(dāng)前視頻編/碼器輸出的比特率,單位 kbps |
| audioBitrate | 當(dāng)前音頻編/碼器輸出的比特率,單位 kbps |
| videoFPS | 當(dāng)前視頻幀率 |
| videoGOP | 當(dāng)前視頻 GOP,也就是每?jī)蓚€(gè)關(guān)鍵幀(I幀)間隔時(shí)長(zhǎng),單位 s |
| netSpeed | 當(dāng)前的發(fā)送/接收速度 |
| netJitter | 網(wǎng)絡(luò)抖動(dòng)情況,為 0 時(shí)表示沒有任何抖動(dòng),值越大表明網(wǎng)絡(luò)抖動(dòng)越大,網(wǎng)絡(luò)越不穩(wěn)定 |
| netQualityLevel | 網(wǎng)絡(luò)質(zhì)量:0:未定義 1:最好 2:好 3:一般 4:差 5:很差 6:不可用 |
| videoWidth | 視頻畫面的寬度 |
| videoHeight | 視頻畫面的高度 |
| videoCache | 緩沖的視頻總時(shí)長(zhǎng),單位毫秒 |
| audioCache | 緩沖的音頻總時(shí)長(zhǎng),單位毫秒 |
| vDecCacheSize | 解碼器中緩存的視頻幀數(shù) (Android 端硬解碼時(shí)存在) |
| vSumCacheSize | 緩沖的總視頻幀數(shù),該數(shù)值越大,播放延遲越高 |
| avPlayInterval | 音畫同步錯(cuò)位時(shí)間(播放),單位 ms,此數(shù)值越小,音畫同步越好 |
| avRecvInterval | 音畫同步錯(cuò)位時(shí)間(網(wǎng)絡(luò)),單位 ms,此數(shù)值越小,音畫同步越好 |
| audioCacheThreshold | 音頻緩沖時(shí)長(zhǎng)閾值,緩沖超過該閾值后,播放器會(huì)開始調(diào)控延時(shí) |
# 小窗特性說明
live-player 小窗支持以下三種觸發(fā)模式(在組件上設(shè)置 picture-in-picture-mode 屬性):
push 模式,即從當(dāng)前頁跳轉(zhuǎn)至下一頁時(shí)出現(xiàn)小窗(頁面棧push)
pop 模式,即離開當(dāng)前頁面時(shí)觸發(fā)(頁面棧pop)
以上兩種路由行為均觸發(fā)小窗
此外,小窗還支持以下特性:
小窗容器尺寸會(huì)根據(jù)原組件尺寸自動(dòng)判斷
點(diǎn)擊小窗,用戶會(huì)被導(dǎo)航回小窗對(duì)應(yīng)的播放器頁面
小窗出現(xiàn)后,用戶可點(diǎn)擊小窗右上角的關(guān)閉按鈕或調(diào)用 context.exitPictureInPicture() 接口關(guān)閉小窗
當(dāng)播放器進(jìn)入小窗模式后,播放器所在頁面處于 hide 狀態(tài)(觸發(fā) onHide 生命周期),該頁面不會(huì)被銷毀。當(dāng)小窗被關(guān)閉時(shí),播放器所在頁面會(huì)被 unload (觸發(fā) onUnload 生命周期)。
# Bug & Tip
tip:live-player 默認(rèn)寬度300px、高度225px,可通過wxss設(shè)置寬高。tip:開發(fā)者工具上暫不支持。tip: 相關(guān)介紹和原理可參考此文章
# 示例代碼
<live-player src="https://domain/pull_stream" mode="RTC" autoplay bindstatechange="statechange" binderror="error" style="width: 300px; height: 225px;" />
Page({
statechange(e) {
console.log('live-player code:', e.detail.code)
},
error(e) {
console.error('live-player error:', e.detail.errMsg)
}
})