Appearance
转码配置
直播转码相关的 API,用于配置旁路推流和云端转码。
updateLiveTranscoding
更新直播转码配置。
方法签名
typescript
updateLiveTranscoding(param: AliRtcLiveTranscodingParam): Promise<void>参数说明
| 参数 | 类型 | 描述 |
|---|---|---|
| param | AliRtcLiveTranscodingParam | 新的转码参数配置 |
说明
- 可以动态更新正在进行的转码任务配置
- 需要指定相同的 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);