記錄--實時音視頻功能簡析(live-pusher與live-player)

来源:https://www.cnblogs.com/smileZAZ/archive/2023/02/07/17099180.html
-Advertisement-
Play Games

這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 使用須知 2017年下半年,微信6.5.21版本支持線上音視頻功能。開發者可以通過兩個音視頻組件 和 實現實時地線上直播、視頻通話、語音通話等功能。 上述功能需要用到兩個小程式媒體組件中的兩個: live-pusher 與 live-pl ...


這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

使用須知

2017年下半年,微信6.5.21版本支持線上音視頻功能。開發者可以通過兩個音視頻組件 和 實現實時地線上直播、視頻通話、語音通話等功能。

上述功能需要用到兩個小程式媒體組件中的兩個: live-pusherlive-player 。下文簡單介紹兩這個組件的基礎知識。僅可以帶你入門,如果是高手請繞行。

註冊小程式

註冊小程式請單擊 微信公眾平臺 ,完成註冊後,在小程式管理頁面的【開發】>【基本配置】中記錄下小程式 AppID 供後面使用。

註意: 必須以非個人主體類型進行註冊,否則無法開通 和 這兩個標簽。

開通標簽使用許可權

live-pusherlive-player 是小程式內部用於支持音視頻上行能力的功能標簽

出於政策和合規的考慮,微信暫時沒有放開所有小程式對 live-pusherlive-player 標簽的支持:

  • 目前支持這兩個標簽的類目如下表格所示(只有非個人主體才有以下類目):
主類目子類目小程式內容場景
社交 直播 涉及娛樂性質,如明星直播、生活趣事直播、寵物直播等。選擇該類目後首次提交代碼審核,需經當地互聯網主管機關審核確認,預計審核時長7天左右
教育 線上視頻課程 網課、線上培訓、講座等教育類直播
醫療 互聯網醫院,公立醫院 問診、大型健康講座等直播
金融 銀行、信托、基金、證券/期貨、證券、期貨投資咨詢、保險、徵信業務、新三板信息服務平臺、股票信息服務平臺(港股/美股)、消費金融 金融產品視頻客服理賠、金融產品推廣直播等
汽車 汽車預售服務 汽車預售、推廣直播
政府主體帳號 - 政府相關工作推廣直播、領導講話直播等
工具 視頻客服 不涉及以上幾類內容的一對一視頻客服服務,如企業售後一對一視頻服務等
  • 符合類目要求的小程式,需要在小程式管理後臺的【開發】>【介面設置】中自助開通推拉流標簽的使用許可權

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Vni239TU-1586502758626)(/Users/mxj/百度雲同步盤/學習筆記/前端全棧/微信小程式/img/image-20200409073506475.png)]

說明:如果以上設置都正確,但小程式依然不能正常工作,可能是微信內部的緩存沒更新,請刪除小程式並重啟微信後,再進行嘗試。

live-player

live-player是小程式內部用於支持音視頻下行(播放)能力的功能標簽。

版本支持

  • 微信 App iOS 最低版本要求:6.5.21 。
  • 微信 App Android 最低版本要求:6.5.19。
  • 小程式基礎庫最低版本要求:1.7.0。

可以通過 wx.getSystemInfo 可以獲取當前基礎庫版本信息。

屬性定義

屬性名類型預設值說明
src String - 用於音視頻下行的播放 URL,支持 RTMP、FLV 等協議
mode String live 模式。live(直播),RTC(實時通話,該模式時延更低)
autoplay Boolean false 是否自動播放
muted Boolean false 是否靜音
orientation String vertical vertical(垂直),horizontal(水平)
object-fit String contain 填充模式,可選值有 contain(圖像長邊填滿屏幕,短邊區域會被填充⿊⾊)fillCrop(圖像鋪滿屏幕,超出顯示區域的部分將被截掉)
background-mute Boolean false 當微信切到後臺時,是否關閉播放聲音
min-cache Number 1 最小緩衝延遲, 單位:秒
max-cache Number 3 最大緩衝延遲, 單位:秒
sound-mode String speaker 聲音輸出方式。speaker(揚聲器),ear(聽筒)
auto-pause-if-navigate Boolean true 當跳轉到本小程式的其他頁面時,是否自動暫停本頁面的實時音視頻播放
auto-pause-if-open-native Boolean true 當跳轉到其它微信原生頁面時,是否自動暫停本頁面的實時音視頻播放
picture-in-picture-mode string/Array - 設置小窗模式: push, pop 或通過數組形式設置多種模式(如: ["push", "pop"])(不常用)
bindstatechange EventHandler - 用於指定一個 javascript 函數來接受播放器事件.detail = {code}
bindfullscreenchange EventHandler - 用於指定一個 javascript 函數來接受全屏變化事件,detail = {direction, fullScreen}
bindnetstatus EventHandler - 網路狀態通知,detail = {info}
bindaudiovolumenotify EventHandler - 播放音量大小通知,detail = {}(不常用)
debug Boolean false 是否開啟調試模式

示例代碼

<view id='video-box'>  
    <live-player
        wx:for="{{player}}"
        id="player_{{index}}"
        mode="RTC"
        object-fit="fillCrop"
        src="{{item.playUrl}}" 
        autoplay='true'
        bindstatechange="onPlay">
   </live-player>
 </view> 

超低時延

的 RTC 模式支持500ms以內的超低時延鏈路,可以應用在視頻通話和遠程遙控等場景中,要使用超低時延播放,需要註意如下幾點: (1)推流端如果是微信小程式,請使用 的 RTC 模式。 (2)推流端如果是 iOS 或者 Android SDK,請使用 setVideoQuality 的 MAIN_PUBLISHER 模式。 (3)推流端如果是 Windows,請不要使用 OBS,延時太高,可以使用我們的 Windows SDK。 (4) 的 min-cache 和 max-cache 請不要自行設置,使用預設值。 (5)播放地址請使用超低延時播放地址,也就是帶了防盜鏈簽名的rtmp://地址,如下:

對比項目示例時延
普通直播 URL rtmp://3891.liveplay.myqcloud.com/live/3891_test_clock_for_rtmpacc >2s
超低延時 URL rtmp://3891.liveplay.myqcloud.com/live/3891_test_clock_for_rtmpacc?bizid=bizid&txTime=5FD4431C&txSerect=20e6d865f462dff61ada209d53c71cf9 < 500ms

屬性詳解

src 用於音視頻下行的播放 URL,支持 RTMP 協議(URL 以rtmp://打頭)和 FLV 協議(URL 以http://打頭且以.flv結尾)

說明:

標簽是不支持 HLS(m3u8)協議的,因為 已經支持 HLS(m3u8)播放協議了。但直播觀看不推薦使用 HLS(m3u8)協議,延遲要比 RTMP 和 FLV 協議高一個數量級。

mode live 模式主要用於直播類場景,例如賽事直播、線上教育、遠程培訓等等。該模式下,小程式內部的模塊會優先保證觀看體驗的流暢,通過調整 min-cache 和 max-cache 屬性,您可以調節觀眾(播放)端所感受到的時間延遲的大小,文檔下麵會詳細介紹這兩個參數。

RTC 則主要用於雙向視頻通話或多人視頻通話場景,例如金融開會、線上客服、車險定損、培訓會議等等。在此模式下,對 min-cache 和 max-cache 的設置不會起作用,因為小程式內部會自動將延遲控制在一個很低的水平(500ms左右)。

min-cache 和 max-cache

這兩個參數分別用於指定觀看端的最小緩衝時間和最大緩衝時間。所謂緩衝時間,是指播放器為了緩解網路波動對觀看流暢度的影響而引入的一個“蓄水池”,當來自網路的數據包出現卡頓甚至停滯的時候,“蓄水池”里的緊急用水可以讓播放器還能堅持一小段時間,只要在這個短暫的時間內網速恢復正常,播放器就可以源源不斷地渲染出流暢而平滑的視頻畫面。

“蓄水池”里的水越多,抗網路波動的能力就越強,但代價就是觀眾端的延遲就越大,所以要在不同的場景下,使用不同的配置來達到體驗上的平衡:

  • 碼率比較低(1Mbps左右,畫面以人物為主)的直播流,min-cache = 1,max-cache = 3 較合適。
  • 碼率比較高(2Mbps - 3Mbps的高清游戲畫面為主)的直播流,min-cache = 3,max-cache = 5 較合適。

RTC 模式下這兩個參數是無效的。

background-mute 微信切到後臺以後是否繼續播放聲音,用於避免鎖屏對於當前小程式正在播放的視頻內容的影響。

debug 調試音視頻相關功能,如果沒有很好的工具會是一個噩夢,所以小程式為 live-pusher 標簽支持了 debug 模式,開始 debug 模式之後,原本用於渲染視頻畫面的視窗上,會顯示一個半透明的 log 視窗,用於展示各項音視頻指標和事件,降低您調試相關功能的難度,具體使用方法我們在 FAQ 中有詳細說明。

對象操作

wx.createLivePlayerContext() 通過 wx.createLivePlayerContext() 可以將 標簽和 javascript 對象關聯起來,之後即可操作該對象。

play 開始播放,如果 的 autoplay 屬性設置為 false(預設值),那麼就可以使用 play 來手動啟動播放。

stop 停止播放。

pause 暫停播放,停留在最後畫面。

resume 繼續播放,與 pause 成對使用。

mute 設置靜音。

requestFullScreen 進入全屏幕。

exitFullScreen 退出全屏幕。

代碼實例

var player = wx.createLivePlayerContext('pusher');
player.requestFullScreen({
    success: function(){
            console.log('enter full screen mode success!')
        }
        fail: function(){
            console.log('enter full screen mode failed!')
        }
        complete: function(){
            console.log('enter full screen mode complete!')
        }
});

內部事件

通過live-player標簽的 bindstatechange 屬性可以綁定一個事件處理函數,該函數可以監聽推流模塊的內部事件和異常通知。

關鍵事件

code事件定義含義說明
2001 PLAY_EVT_CONNECT_SUCC 已經連接到雲端伺服器
2002 PLAY_EVT_RTMP_STREAM_BEGIN 伺服器開始傳輸音視頻數據
2003 PLAY_EVT_RCV_FIRST_I_FRAME 網路接收到首段音視頻數據
2004 PLAY_EVT_PLAY_BEGIN 視頻播放開始,可以在收到此事件之前先用預設圖片代表等待狀態
2006 PLAY_EVT_PLAY_END 視頻播放結束
2007 PLAY_EVT_PLAY_LOADING 進入緩衝中狀態,此時播放器在等待或積攢來自伺服器的數據
-2301 PLAY_ERR_NET_DISCONNECT 網路連接斷開,且重新連接亦不能恢復,播放器已停止播放

更多詳細狀態碼請查看官方文檔

說明:

播放 HTTP:// 打頭的 FLV 協議地址時,如果觀眾遇到播放中直播流斷開的情況,小程式是不會拋出 PLAY_EVT_PLAY_END 事件的,這是因為 FLV 協議中沒有定義停止事件,所以只能通過監聽 PLAY_ERR_NET_DISCONNECT 來替代之。

警告事件

內部警告並非不可恢復的錯誤,小程式內部的音視頻 SDK 會啟動相應的恢復措施,警告的目的主要用於提示開發者或者最終用戶,例如:

code事件定義含義說明
2101 PLAY_WARNING_VIDEO_DECODE_FAIL 當前視頻幀解碼失敗
2102 PLAY_WARNING_AUDIO_DECODE_FAIL 當前音頻幀解碼失敗
2103 PLAY_WARNING_RECONNECT 網路斷連,已啟動自動重連恢復(重連超過三次就直接拋送 PLAY_ERR_NET_DISCONNECT 了)
2104 PLAY_WARNING_RECV_DATA_LAG 視頻流不太穩定,可能是觀看者當前網速不充裕
2105 PLAY_WARNING_VIDEO_PLAY_LAG 當前視頻播放出現卡頓
2106 PLAY_WARNING_HW_ACCELERATION_FAIL 硬解啟動失敗,採用軟解
2107 PLAY_WARNING_VIDEO_DISCONTINUITY 當前視頻幀不連續,視頻源可能有丟幀,可能會導致畫面花屏
3001 PLAY_WARNING_DNS_FAIL DNS解析失敗(僅播放 RTMP:// 地址時會拋送)
3002 PLAY_WARNING_SEVER_CONN_FAIL 伺服器連接失敗(僅播放 RTMP:// 地址時會拋送)
3003 PLAY_WARNING_SHAKE_FAIL 伺服器握手失敗(僅播放 RTMP:// 地址時會拋送)

代碼實例

Page({
    onPlay: function(ret) {
        if(ret.detail.code == 2004) {
                console.log('視頻播放開始',ret);
        }
    },

    /**
     * 生命周期函數--監聽頁面載入
     */
    onLoad: function (options) {
    //...
    }
})

網路狀態數據

鍵名說明
videoBitrate 當前視頻編/碼器輸出的比特率,單位 kbps
audioBitrate 當前音頻編/碼器輸出的比特率,單位 kbps
videoFPS 當前視頻幀率
videoGOP 當前視頻 GOP,也就是每兩個關鍵幀(I幀)間隔時長,單位 s
netSpeed 當前的發送/接收速度
netJitter 網路抖動情況,為 0 時表示沒有任何抖動,值越大表明網路抖動越大,網路越不穩定
videoWidth 視頻畫面的寬度
videoHeight 視頻畫面的高度

小窗特性說明

live-player 小窗支持以下三種觸發模式(在組件上設置 picture-in-picture-mode 屬性):

  1. push 模式,即從當前頁跳轉至下一頁時出現小窗(頁面棧push)
  2. pop 模式,即離開當頁面時觸發(頁面棧pop)
  3. 以上兩種路由行為均觸發小窗

此外,小窗還支持以下特性:

  • 小窗容器尺寸會根據原組件尺寸自動判斷
  • 點擊小窗,用戶會被導航回小窗對應的播放器頁面
  • 小窗出現後,用戶可點擊小窗右上角的關閉按鈕或調用 context.exitPictureInPicture() 介面關閉小窗

特別說明

  1. 組件是由客戶端創建的原生組件,它的層級是最高的,不能通過z-index控制層級。可以使用 和 覆蓋在上面。

  2. 請勿在 ,,, 中使用 組件。

  3. live-player 預設寬度300px、高度225px,可通過wxss設置寬高。

  4. 開發者工具上暫不支持。

  5. css 動畫對 live-pusher 組件無效。

常見問題

開發和運行環境要求

  • 微信 App iOS 最低版本要求:6.5.21。
  • 微信 App Android 最低版本要求:6.5.19。
  • 小程式基礎庫最低版本要求:1.7.0。
  • 由於微信開發者工具不支持原生組件(即 和 標簽),需要在真機上進行運行體驗。

調試時為什麼要開啟調試模式?

開啟調試可以跳過把這些功能變數名稱加入小程式白名單的工作,否則可能會遇到登錄失敗,通話無法連接的問題。

live-pusher

屬性定義

屬性名類型預設值說明
url String - 用於音視頻上行的推流 URL
mode String RTC SD,HD,FHD,RTC
autopush Boolean false 是否自動啟動推流
muted Boolean false 是否靜音
enable-camera Boolean true 開啟\關閉攝像頭
auto-focus Boolean true 手動\自動對焦
orientation String vertical vertical,horizontal
beauty Number 0 美顏指數,取值 0 - 9,數值越大效果越明顯
whiteness Number 0 美白指數,取值 0 - 9,數值越大效果越明顯
aspect String 9:16 3:4,9:16
zoom Boolean false 是否正常焦距,true 表示將攝像頭放大
device-position String front front 前置攝像頭,back 後置攝像頭
min-bitrate Number 200 最小碼率,該數值決定了畫面最差的清晰度表現
max-bitrate Number 1000 最大碼率,該數值決定了畫面最好的清晰度表現
audio-quality String low low 適合語音通話,high 代表高音質
waiting-image String - 當微信切到後臺時的墊片圖片
waiting-image-hash String - 當微信切到後臺時的墊片圖片的校驗值
background-mute Boolean false 當微信切到後臺時是否禁用聲音採集
bindstatechange String - 用於指定一個 javascript 函數來接收音視頻事件
debug Boolean false 是否開啟調試模式

示例代碼

<view id='video-box'>  
    <live-pusher
          id="pusher"
          mode="RTC"
          url="{{pusher.push_url}}" 
          autopush='true'
          bindstatechange="onPush">
    </live-pusher>  
 </view> 

屬性詳解

  • url 用於音視頻上行的推流 URL,以rtmp://協議首碼打頭,騰訊雲推流 URL 的獲取方法見 快速獲取 URL 文檔。

    說明:

    小程式內部使用的 RTMP 協議是支持 UDP 加速的版本,在同樣網路條件下,UDP 版本的 RTMP 會比開源版本的有更好的上行速度和抗抖動能力。

  • mode SD、HD 和 FHD 主要用於直播類場景,例如賽事直播、線上教育、遠程培訓等等。SD、HD 和 FHD 分別對應三種預設的清晰度。該模式下,小程式會更加註重清晰度和觀看的流暢性,不會過分強調低延遲,也不會為了延遲犧牲畫質和流暢性。

    RTC 則主要用於雙向視頻通話或多人視頻通話場景,例如金融開會、線上客服、車險定損、培訓會議等。該模式下,小程式會更加註重降低點到點的時延,也會優先保證聲音的質量,在必要的時候會對畫面清晰度和畫面的流暢性進行一定的縮水。

  • orientation 和 aspect 橫屏(horizontal)模式還是豎屏(vertical)模式,預設是豎屏模式,即 home 鍵朝下。這時,小程式推出的畫面的寬高比是3:4或者9:16這兩種豎屏寬高比的畫面,也就是寬 < 高。如果改成橫屏模式,小程式推出的畫面寬高比即變為4:3或者16:9這種橫屏寬高比的畫面,也就是寬 > 高。

    具體的寬高比是有 aspect 決定的 ,預設是9:16, 也可以支持3:4。 這是在 orientation 的屬性值為 vertical 的情況下。如果 orientation 的屬性值為 horizontal,那麼3:4的效果等價於4:3,9:16的效果等價於16:9。

  • min-bitrate 和 max-bitrate 這裡首先要科普一個概念 —— 視頻碼率,指視頻編碼器每秒鐘輸出的視頻數據的多少。在視頻解析度確定的情況下,視頻碼率越高,即每秒鐘輸出的數據越多,相應的畫質也就越好。

    所以 min-bitrate 和 max-bitrate 這兩個屬性,分別用於決定輸出畫面的最低清晰度和最高清晰度。這兩個數值並非越大越好,因為用戶的網路上行不是無限好的。但也不是越小越好,因為實際應用場景中,清晰與否是用戶衡量產品體驗的一個重要指標。具體的數值設定我們會在**“參數設置”**部分詳細介紹。

    小程式內部會自動處理好解析度和碼率的關係,例如2Mbps的碼率,小程式會選擇720p的解析度進行匹配,而300kbps的碼率下,小程式則會選擇較低的解析度來提高編碼效率。所以您只需要關註 min-bitrate 和 max-bitrate 這一對參數就可以掌控畫質了。

  • waiting-image 和 waiting-image-hash 出於用戶隱私的考慮,在微信切到後臺以後,小程式希望停止攝像頭的畫面採集。但是對於另一端的用戶而言,畫面會變成黑屏或者凍屏(停留在最後一幀),這種體驗是非常差的。為瞭解決這個問題,我們引入了 waiting-image 屬性,您可以設置一張有 “稍候” 含義的圖片(waiting-image 是該圖片的 URL,waiting-image-hash 則是該圖片對應的 md5 校驗值)。當微信切到後臺以後,小程式會使用該圖片作為攝像頭畫面的替代,以極低的流量占用維持視頻流3分鐘時間。

  • debug 調試音視頻相關功能,如果沒有很好的工具會是一個噩夢,所以小程式為 live-pusher 標簽支持了 debug 模式,開始 debug 模式之後,原本用於渲染視頻畫面的視窗上,會顯示一個半透明的 log 視窗,用於展示各項音視頻指標和事件,降低您調試相關功能的難度,具體使用方法我們在 FAQ 中有詳細說明。

參數設置

場景modemin-bitratemax-bitrateaudio-quality說明
標清直播 SD 300kbps 800kbps high 窄帶場景,例如戶外或者網路不穩定的情況下適用
高清直播 HD 600kbps 1200kbps high 目前主流的 App 所採用的參數設定,普通直播場景推薦使用這一檔
超清直播 FHD 600kbps 1800kbps high 對清晰度要求比較苛刻的場景,普通手機觀看使用 HD 即可
視頻客服(用戶) RTC 200kbps 500kbps high 這是一種聲音為主,畫面為輔的場景,所以畫質不要設置的太高
車險定損(車主) RTC 200kbps 1200kbps high 由於可能要看車況詳情,畫質上限會設置的高一些
多人會議(主講) RTC 200kbps 1000kbps high 主講人畫質可以適當高一些,參與的質量可以設置的低一些
多人會議(參與) RTC 150kbps 300kbps low 作為會議參與者,不需要太高的畫質和音質

如果不是對帶寬特別沒有信心的應用場景,audio-quality 選項請不要選擇 low,其音質和延遲感都要會比 high 模式差很多。

對象操作

  • wx.createLivePusherContext() 通過 wx.createLivePusherContext() 可以將 標簽和 javascript 對象關聯起來,之後即可操作該對象。
  • start 開始推流,如果 的 autopush 屬性設置為 false(預設值),那麼就可以使用 start 來手動開始推流。
  • stop 停止推流。
  • pause 暫停推流。
  • resume 恢復推流,請與 pause 操作配對使用。
  • switchCamera 切換前後攝像頭。
  • snapshot 推流截圖,截圖大小跟組件的大小一致。截圖成功圖片的臨時路徑為ret.tempImagePath

代碼實例

var pusher = wx.createLivePusherContext('pusher');
pusher.start({
    success: function(ret){
            console.log('start push success!')
        }
        fail: function(){
            console.log('start push failed!')
        }
        complete: function(){
            console.log('start push complete!')
        }
});

內部事件

通過 標簽的 bindstatechange 屬性可以綁定一個事件處理函數,該函數可以監聽推流模塊的內部事件和異常通知。

常規事件

code事件定義含義說明
1001 PUSH_EVT_CONNECT_SUCC 已經成功連接到雲端伺服器
1002 PUSH_EVT_PUSH_BEGIN 與伺服器握手完畢,一切正常,準備開始上行推流
1003 PUSH_EVT_OPEN_CAMERA_SUCC 已成功啟動攝像頭,攝像頭被占用或者被限制許可權的情況下無法打開

嚴重錯誤

code事件定義含義說明
-1301 PUSH_ERR_OPEN_CAMERA_FAIL 打開攝像頭失敗
-1302 PUSH_ERR_OPEN_MIC_FAIL 打開麥克風失敗
-1303 PUSH_ERR_VIDEO_ENCODE_FAIL 視頻編碼失敗
-1304 PUSH_ERR_AUDIO_ENCODE_FAIL 音頻編碼失敗
-1305 PUSH_ERR_UNSUPPORTED_RESOLUTION 不支持的視頻解析度
-1306 PUSH_ERR_UNSUPPORTED_SAMPLERATE 不支持的音頻採樣率
-1307 PUSH_ERR_NET_DISCONNECT 網路斷連,且經三次重連無效,可以放棄,更多重試請 自行重啟推流

警告事件

內部警告並非不可恢復的錯誤,小程式內部的音視頻 SDK 會啟動相應的恢復措施,警告的目的主要用於提示開發者或者最終用戶,例如:

  • PUSH_WARNING_NET_BUSY 上行網速不給力,建議提示用戶改善當前的網路環境,例如讓用戶離家裡的路由器近一點,或者切到 Wi-Fi 環境下再使用。
  • PUSH_WARNING_SERVER_DISCONNECT 請求被後臺拒絕了,出現這個問題一般是由於 URL 里的 txSecret 計算錯了,或者是 URL 被其他人占用了(跟播放不同,一個推流 URL 同時只能有一個用戶使用)。
  • PUSH_WARNING_HANDUP_STOP 當用戶單擊小程式右上角的圓圈或者返回按鈕時,微信會將小程式掛起,此時 會拋出5000這個事件。
code事件定義含義說明
1101 PUSH_WARNING_NET_BUSY 上行網速不夠用,建議提示用戶改善當前的網路環境
1102 PUSH_WARNING_RECONNECT 網路斷連,已啟動重連流程(重試失敗超過三次會放棄)
1103 PUSH_WARNING_HW_ACCELERATION_FAIL 硬編碼啟動失敗,自動切換到軟編碼
1107 PUSH_WARNING_SWITCH_SWENC 由於機器性能問題,自動切換到硬體編碼
3001 PUSH_WARNING_DNS_FAIL DNS 解析失敗,啟動重試流程
3002 PUSH_WARNING_SEVER_CONN_FAIL 伺服器連接失敗,啟動重試流程
3003 PUSH_WARNING_SHAKE_FAIL 伺服器握手失敗,啟動重試流程
3004 PUSH_WARNING_SERVER_DISCONNECT 伺服器主動斷開連接,啟動重試流程
3005 PUSH_WARNING_SERVER_DISCONNECT socket 鏈路異常斷開 ,啟動重試流程
5000 PUSH_WARNING_HANDUP_STOP 小程式被用戶掛起

代碼實例

Page({
    onPush: function(ret) {
        if(ret.detail.code == 1002) {
                console.log('推流成功了',ret);
        }
    },

    /**
     * 生命周期函數--監聽頁面載入
     */
    onLoad: function (options) {
    //...
    }
})

本文轉載於:

https://juejin.cn/post/6986428160824836132

如果對您有所幫助,歡迎您點個關註,我會定時更新技術文檔,大家一起討論學習,一起進步。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概述 單一職責原則是最簡單的面向對象設計原則!定義為不要存在多於一個導致類變更的原因。通俗的說,即一個類只負責一項職責。說文字比較乾巴巴,我們通過上代碼來展示案例; 未使用單一職責原則的代碼 public class Telphone { public void Dial(string phoneN ...
  • Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發佈到任何流行的 Linux或Windows操作系統的機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。 ...
  • (目錄) 概述 筆者在學習資料庫相關內容時,發現關於innoDB在RR級別下究竟能不能保證不發生幻讀這個問題,網上的資料眾說紛紜,筆者在經過總結和自己的試驗之後,在這裡結合自己的理解分析一下這個問題,若有謬誤,歡迎指正。筆者在這裡預設讀者都瞭解了關於幻讀以及innoDB中MVCC和鎖機制的情況,僅對 ...
  • ##一、 DataX為什麼要使用插件機制? 從設計之初,DataX就把異構數據源同步作為自身的使命,為了應對不同數據源的差異、同時提供一致的同步原語和擴展能力,DataX自然而然地採用了框架 + 插件 的模式: 插件只需關心數據的讀取或者寫入本身。 而同步的共性問題,比如:類型轉換、性能、統計,則交 ...
  • 本文從提升用戶行為分析效率角度出發,詳細介紹了H5埋點方案規劃,埋點數據採集流程,提供可借鑒的用戶行為數據採集方案;且完整呈現了針對頁面分析,留存分析的數倉模型規劃方案。 ...
  • 本文主要記錄對象存儲組件Minio、數據湖組件Hudi及查詢引擎Hive\Spark之間的相容性配置及測試情況,Spark及Hive無需多言,這裡簡單介紹下Minio及Hudi。 MinIO 是在 GNU Affero 通用公共許可證 v3.0 下發佈的高性能對象存儲。 它是與 Amazon S3 ...
  • Flutter是Google推出的一款UI工具包,可以通過一套代碼同時在iOS和Android上構建媲美原生體驗的精美應用。它使用Dart作為開發語言,不依賴原生控制項,而是將自有的控制項庫,通過Skia圖形引擎直接繪製在平臺所提供的畫布上。簡單來說,它擁有以下特性:不依賴平臺、組件庫原生實現、能高速渲... ...
  • Flex 佈局目前已經非常流行了,現在幾乎已經相容所有瀏覽器了。在文章開始之前我們需要思考一個問題:我們為什麼要使用 Flex 佈局? 其實答案很簡單,那就是 Flex 佈局好用。一個新事物的出現往往是因為舊事物不那麼好用了,比如,如果想讓你用傳統的 css 佈局來實現一個塊元素垂直水平居中你會怎麼 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...