大疆司空2 直播接入教程
司空2平台通过第三方WebRTC服务实现无人机/机场直播,目前支持火山引擎和声网两个SDK。对接时需要根据返回的url_type选择对应SDK(agora或volc),分别提供appId、token等认证参数。示例代码展示了两种SDK的集成方法:火山引擎需创建引擎、加入房间并处理流发布事件;声网则需要创建客户端、加入频道并订阅用户媒体流。两种方案都提供了加入/离开房间的核心功能实现,其中火山引擎还
·
根据 司空2 文档,机场或无人机在直播时,采用的是第三方供应商的直播服务,使用的是实时性高的 RTC 模式。
在对接 WebRTC SDK 时,需要根据供应商类型判断使用哪个 SDK,目前主要有两个:
- 火山引擎 volc WebRTC SDK
- 声网 agora WebRTC SDK
- STS 尚未对接,目前司空2 接口还没有返回过。
url_type: agora/volc
appId
token
userId
roomId/channel
对接火山引擎 volc WebRTC SDK 示例
npm install @volcengine/rtc --save
import VERTC, { RoomProfileType, StreamIndex } from "@volcengine/rtc";
let engine;
export async function joinRoom(elId, appId, roomId, token, userId) {
console.info('joinRoom...')
engine = VERTC.createEngine(appId);
await engine.joinRoom(token, roomId, { userId }, {
isAutoPublish: true,
isAutoSubscribeAudio: true,
isAutoSubscribeVideo: true,
roomProfileType: RoomProfileType.meeting,
});
async function handleUserPublishStream(e) {
const player = document.querySelector('#' + elId);
console.info('player...', player);
// 清空旧内容
player.innerHTML = '';
// [RTC WebSDK]: renderDom is not empty
await engine.setUserVisibility(false);
engine.setRemoteVideoPlayer(StreamIndex.STREAM_INDEX_MAIN, {
userId: e.userId,
renderDom: player,
visible: false
});
}
engine.on(VERTC.events.onUserPublishStream, handleUserPublishStream);
engine.on(VERTC.events.onConnectionStateChanged, (e) => {
console.info('onConnectionStateChanged 连接状态发生变化');
});
}
export async function leaveRoom() {
if (engine) await engine.leaveRoom();
}
// 加入房间
joinRoom('player', appId, roomId, token, userId)
// 离开房间
leaveRoom()
对接声网 agora WebRTC SDK
npm install agora-rtc-sdk-ng
import AgoraRTC from "agora-rtc-sdk-ng"
const client = AgoraRTC.createClient({ mode: "rtc", codec: "vp8" })
let localAudioTrack
let localVideoTrack
export async function joinChannel(elId, appId, channel, token = null, uid = null) {
await client.join(appId, channel, token, uid)
client.on("user-published", async (user, mediaType) => {
await client.subscribe(user, mediaType)
if (mediaType === "video") {
user.videoTrack.play(elId)
}
})
}
export async function leaveChannel() {
if (localAudioTrack) localAudioTrack.close()
if (localVideoTrack) localVideoTrack.close()
await client.leave()
}
// 加入频道
joinChannel('player', appId, channel, token, parseInt(uid))
// 离开频道
leaveChannel()
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)