Skip to content

转码配置

直播转码相关的 API,用于配置旁路推流和云端转码。

updateLiveTranscoding

更新直播转码配置。

方法签名

typescript
updateLiveTranscoding(param: AliRtcLiveTranscodingParam): Promise<void>

参数说明

参数类型描述
paramAliRtcLiveTranscodingParam新的转码参数配置

说明

  • 可以动态更新正在进行的转码任务配置
  • 需要指定相同的 taskId

使用示例

javascript
// 更新混流布局
await engine.updateLiveTranscoding({
  taskId: 'task-002',
  mixParam: {
    taskId: 'mix-task-001',
    width: 1280,
    height: 720,
    users: [
      {
        userId: 'user1',
        x: 0,
        y: 0,
        width: 1280,
        height: 720,
        zOrder: 1,
      },
    ],
  },
});

编码参数配置

AliRtcLiveTranscodingEncodeParam

编码参数配置对象。

typescript
interface AliRtcLiveTranscodingEncodeParam {
  // 视频宽度
  width?: number;
  // 视频高度
  height?: number;
  // 视频码率 (kbps)
  videoBitrate?: number;
  // 视频帧率
  videoFramerate?: number;
  // 视频编码格式 (h264/h265)
  videoCodec?: string;
  // 视频 GOP 大小
  videoGop?: number;
  // 音频采样率
  audioSampleRate?: number;
  // 音频码率 (kbps)
  audioBitrate?: number;
  // 音频声道数
  audioChannels?: number;
  // 音频编码格式 (aac/opus)
  audioCodec?: string;
}

混流参数配置

AliRtcLiveTranscodingMixParam

混流参数配置对象。

typescript
interface AliRtcLiveTranscodingMixParam {
  // 混流任务 ID
  taskId?: string;
  // 画布宽度
  width?: number;
  // 画布高度
  height?: number;
  // 背景颜色 (RGB格式,如 0xFF0000 表示红色)
  backgroundColor?: number;
  // 用户布局数组
  users?: AliRtcTranscodingUser[];
  // 水印图片数组
  images?: AliRtcTranscodingImage[];
  // 文字水印数组
  texts?: AliRtcTranscodingText[];
  // 时钟水印
  clockWidget?: AliRtcTranscodingClockWidget;
}

AliRtcTranscodingUser

用户布局配置。

typescript
interface AliRtcTranscodingUser {
  // 用户 ID
  userId: string;
  // 流类型 (1: 相机流, 2: 屏幕共享流)
  streamType?: number;
  // X 坐标
  x?: number;
  // Y 坐标
  y?: number;
  // 宽度
  width?: number;
  // 高度
  height?: number;
  // 层级 (数值越大越在上层)
  zOrder?: number;
  // 是否裁剪
  cropMode?: AliRtcLiveTranscodingCropMode;
}

AliRtcTranscodingImage

图片水印配置。

typescript
interface AliRtcTranscodingImage {
  // 图片 URL
  url: string;
  // X 坐标
  x?: number;
  // Y 坐标
  y?: number;
  // 宽度
  width?: number;
  // 高度
  height?: number;
  // 层级
  zOrder?: number;
}

AliRtcTranscodingText

文字水印配置。

typescript
interface AliRtcTranscodingText {
  // 文字内容
  text: string;
  // X 坐标
  x?: number;
  // Y 坐标
  y?: number;
  // 字体大小
  fontSize?: number;
  // 字体颜色 (RGB格式)
  fontColor?: number;
  // 字体类型
  fontType?: AliRtcLiveTranscodingFontType;
  // 层级
  zOrder?: number;
}

示例:完整的混流转码

javascript
// 创建一个 2x2 的混流布局
const transcodingParam = {
  taskId: 'live-task-001',
  pushUrl: 'rtmp://push.example.com/live/mystream',
  mixMode: AliRtcEngine.AliRtcLiveTranscodingMixMode.Mix,
  mixParam: {
    taskId: 'mix-001',
    width: 1280,
    height: 720,
    backgroundColor: 0x000000, // 黑色背景
    users: [
      {
        userId: 'user1',
        streamType: 1,
        x: 0,
        y: 0,
        width: 640,
        height: 360,
        zOrder: 1,
      },
      {
        userId: 'user2',
        streamType: 1,
        x: 640,
        y: 0,
        width: 640,
        height: 360,
        zOrder: 1,
      },
      {
        userId: 'user3',
        streamType: 1,
        x: 0,
        y: 360,
        width: 640,
        height: 360,
        zOrder: 1,
      },
      {
        userId: 'user4',
        streamType: 1,
        x: 640,
        y: 360,
        width: 640,
        height: 360,
        zOrder: 1,
      },
    ],
    images: [
      {
        url: 'https://example.com/logo.png',
        x: 1150,
        y: 20,
        width: 100,
        height: 50,
        zOrder: 10,
      },
    ],
    texts: [
      {
        text: '直播中',
        x: 20,
        y: 20,
        fontSize: 24,
        fontColor: 0xffffff, // 白色
        zOrder: 10,
      },
    ],
  },
  encodeParam: {
    width: 1280,
    height: 720,
    videoBitrate: 2000,
    videoFramerate: 30,
    videoCodec: 'h264',
    videoGop: 60,
    audioSampleRate: 48000,
    audioBitrate: 128,
    audioChannels: 2,
    audioCodec: 'aac',
  },
};

// 稍后更新布局
transcodingParam.mixParam.users[0].width = 1280;
transcodingParam.mixParam.users[0].height = 720;
transcodingParam.mixParam.users = [transcodingParam.mixParam.users[0]];
await engine.updateLiveTranscoding(transcodingParam);