主頁 > 企業開發 > 記錄--實時音視頻功能簡析(live-pusher與live-player)

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

2023-02-08 07:26:11 企業開發

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

使用須知

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

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

注冊小程式

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

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

開通標簽使用權限

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

出于政策和合規的考慮,微信暫時沒有放開所有小程式對 live-pusher 和 live-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="https://www.cnblogs.com/smileZAZ/archive/2023/02/07/{{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);
        }
    },

    /**
     * 生命周期函式--監聽頁面加載
     */
    onl oad: 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);
        }
    },

    /**
     * 生命周期函式--監聽頁面加載
     */
    onl oad: function (options) {
    //...
    }
})

本文轉載于:

https://juejin.cn/post/6986428160824836132

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

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/543240.html

標籤:其他

上一篇:9種跨域方式實作原理

下一篇:一篇文章帶你掌握Flex布局的所有用法

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more