uniapp中怎么實(shí)現(xiàn)直播旁路推流?下面本篇文章就來(lái)給大家總結(jié)分享一下旁路推流步驟,希望對(duì)大家有所幫助!
通過(guò) anyRTC音視頻SDK插件 基本實(shí)現(xiàn) uniapp 視頻通話 如若沒(méi)有實(shí)現(xiàn)基本視頻通話可參考文章(https://blog.csdn.net/anyRTC/article/details/121352746)
旁路推流步驟
1. 開通對(duì)應(yīng)權(quán)限
前往 anyRTC 控制臺(tái) – 用量統(tǒng)計(jì) 選擇對(duì)應(yīng)項(xiàng)目開啟旁路推流服務(wù)
2. 模式調(diào)整
-
場(chǎng)景調(diào)整sdk默認(rèn)通信場(chǎng)景,需要將通信模式轉(zhuǎn)為直播模式
// 設(shè)置直播模式 rtcModule.setChannelProfile({ "profile": 1 }, (res) => { console.log(res); }
-
角色調(diào)整角色-主播: 可以發(fā)布和接收音視頻流 角色-觀眾: 只可以接收音視頻流
// 1 設(shè)置為主播 2 設(shè)置為觀眾 rtcModule.setClientRole({ "role": 1 }, (res) => { console.log(res); })
3. 設(shè)置推流視圖布局以及音頻設(shè)置
-
下載uniapp 插件市場(chǎng)的anyRTC音視頻SDK插件示例
-
引入
utils/classes.js
中的LiveTranscoding
,TranscodingUser
import { LiveTranscoding, TranscodingUser } from "./classes.js"
LiveTranscoding:封裝的總布局TranscodingUser:封裝的主播布局
-
設(shè)置推流的視圖布局及音頻設(shè)置
頻道繼續(xù)新增主播并且也要合并推流時(shí),重新調(diào)用設(shè)置即可
// 單個(gè)主播布局 // const anchor = new TranscodingUser(主播標(biāo)識(shí)uid, { // width: 280, // height: 210, // x: 0, // y: 0 // }) // 多個(gè)主播布局(3列) let anchorList= []; lists.map((item,index)=> { anchorList.push(new TranscodingUser(主播標(biāo)識(shí)uid, { width: 280, height: 210, x: (index % 3) * 280, y: Math.floor(index / 3) * 210, })) } // 設(shè)置旁路推流(3列) rtcModule.setLiveTranscoding({ "transcoding": new LiveTranscoding(anchorList, { width: 840, height: Math.ceil(anchorList.length / 3) * 210, }) }, (ret) => { console.log(ret); });
4. 推流
需要推多路流時(shí)請(qǐng)遍歷推流
rtcModule.addPublishStreamUrl({ url: 推流的cdn地址, transcodingEnabled: true // 轉(zhuǎn)碼是指在旁路推流時(shí)對(duì)音視頻流做一些轉(zhuǎn)碼處理后再推送到其他 RTMP 服務(wù)器 }, (res) => { console.log("添加旁路推流", res); });
通過(guò) onRtmpStreamingStateChanged
回調(diào)來(lái)判斷推流狀態(tài)把回調(diào)加入到 setCallBack
中,通過(guò)下方時(shí)相關(guān)狀態(tài)碼:
// 狀態(tài)碼 state: { 0: "推流未開始或已結(jié)束", 1: "正在連接 AR 推流服務(wù)器和 RTMP 服務(wù)器", 2: "推流正在進(jìn)行,成功推流后", 3: "正在恢復(fù)推流", 4: "推流失敗" }, // 錯(cuò)誤碼 errorCode: { 0: "推流成功", 1: "參數(shù)無(wú)效,請(qǐng)檢查輸入?yún)?shù)是否正確。請(qǐng)確保調(diào)用 setLiveTranscoding ", 2: "推流已加密,不能推流", 3: "推流超時(shí)未成功,可重新推流", 4: "推流服務(wù)器出現(xiàn)錯(cuò)誤", 5: "RTMP 服務(wù)器出現(xiàn)錯(cuò)誤", 6: "推流請(qǐng)求過(guò)于頻繁", 7: "單個(gè)主播的推流地址數(shù)目達(dá)到上線 10", 8: "主播操作不屬于自己的流,請(qǐng)檢查 App 邏輯", 9: "服務(wù)器未找到這個(gè)流", 10: "推流地址格式有錯(cuò)誤,請(qǐng)檢查推流地址格式是否正確", }
5. 停止推流
rtcModule.removePublishStreamUrl({ url: 推流的cdn地址, }, (res) => { console.log("取消旁路推流", res); });
推薦:《uniapp教程》