根据 司空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()

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐