tencent cloud

文档反馈

机器人推流 (TUIRoomKit)

最后更新时间:2024-05-30 13:08:27

    功能介绍

    TUIRoomKit 支持使用机器人推流,允许用户将本地或在线媒体文件推流至房间内。在某些场景中,会议中可能需要推送预先录制的教学视频或在线视频流到在线课堂中,以便用户观看和学习。TUIRoomKit 可以满足相关需求,实现自动化和高效的视频播放。
    
    
    

    应用场景

    一起看、一起听、一起玩、一起学等原来需要线下面对面才能实现的各种体验正被不断搬到线上。相隔千里还能和好友们一起看电影、一起听音乐,然后一起交流吐槽,这样神奇的实时互动体验正受到当下年轻人的喜爱,并成为如今音视频产品的重点玩法和主流方向。
    TUIRoomKit 输入媒体流功能能够将外部媒体流共享至房间内,用户可通过这一功能向房间内其他用户分享音乐、电影、讲座、课程等媒体内容并同时与他们进行实时互动。平台可借助 TUIRoomKit 的这一新功能快速实现一起看场景。除了一起看电影、听音乐等场景外,TUIRoomKit 输入媒体流能力还能够在互动课堂、体育赛制、网络会议等场景中,为平台带来更多创新可能。
    
    
    

    使用方法

    方法一:使用 RTMP 推流(推荐)

    TUIRoomKit 支持 RTMP 标准协议推流。您可根据实际情况选择安装 OBS 、FFmpeg 或其他 RTMP 库进行推流。这里以使用 FFmpeg 为例进行介绍。FFmpeg 不同场景下指令配置参数不同,因此需要您具有一定的 FFmpeg 使用经验,以下列出 FFmpeg 常用命令行选项,更多 FFmpeg 选项请参见 FFmpeg 官网

    FFmpeg 命令行

    ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url}

    常见的 FFmpeg 选项

    选项
    说明
    -re
    以 native 帧率读取输入,通常只用于读取本地文件
    其中 output_file_options 可配置选项包括:
    选项
    说明
    -c:v
    视频编码,建议用 libx264
    -b:v
    视频码率,例如 1500k 表示 1500kbps
    -r
    视频帧率
    -profile:v
    视频 profile,指定 baseline 将不编码 B 帧,TUIRoomKit 后端不支持 B 帧
    -g
    GOP 帧数间隔
    -c:a
    音频编码,建议用 libfdk_aac
    -ac
    声道数,填2或1
    -b:a
    音频码率
    -f
    指定格式,固定填 flv,发送到 TUIRoomKit 使用 FLV 容器封装

    使用

    下面的例子是 使用 FFmpeg 命令读取文件推到 TUIRoomKit,注意 URL 两边加引号。
    ffmpeg -loglevel debug -re -i sample.flv -c:v libx264 -preset ultrafast -profile:v baseline -g 30 -sc_threshold 0 -b:v 1500k -c:a libfdk_aac -ac 2 -b:a 128k -f flv 'rtmp://rtmp.rtc.qq.com/push/yourRoomId?userid=yourUserId&sdkappid=xxxxxxxxx&usersig=xxxxxxxxxx'
    对上述命令中相关参数的解释如下:
    参数
    含义
    -i sample.flv
    需要推流至 TUIRoomKit 的媒体文件。您可以将 sample.flv 更换为您需要推流的本地或在线媒体文件。
    yourRoomId
    您需要推流的房间 ID。您需要将 yourRoomId 更换为您实际的 RoomId。
    userId
    您需要推流的 UserID。您需要将“=”后面的值更改为实际的 userId。
    sdkappid
    您的 sdkappid,您之前已在 开通服务 中获得。您需要将“=”后面的值更改为实际的 sdkAppID。
    usersig
    您的 usersig。您已在登陆 TUIRoomKit 组件时获得。您需要将“=”后面的值更改为实际的 userSig。
    当您需要在代码中实现上述功能时,可以使用您所在平台上的相关 FFmpeg 库或通过命令行调用 FFmpeg 来实现上述命令。

    方法二:使用Rest API推在线媒体流

    接口描述

    将一个在线媒体流推到TUIRoomKit。
    接口请求域名: trtc.tencentcloudapi.com。 前提条件:需要购买 TUIRoomKit套餐包
    默认接口请求频率限制:20次/秒。
    

    输入参数

    以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见 公共请求参数
    参数名称
    必选
    类型
    描述
    Action
    String
    公共参数,本接口取值:StartStreamIngest。
    Version
    String
    公共参数,本接口取值:2019-07-22。
    Region
    String
    公共参数,详见产品支持的 地域列表,本接口仅支持其中的: ap-beijing, ap-chongqing, ap-guangzhou, ap-shanghai, ap-singapore 。
    SdkAppId
    Integer
    SdkAppId,和 TUIRoomKit 所对应的 SdkAppId 相同。 示例值:1234
    RoomId
    String
    需要推流的房间所对应的 RoomId。 示例值:1234
    RoomIdType
    Integer
    在 TUIRoomKit 中,填0即可。
    UserId
    String
    输入在线媒体流机器人的 UserId,用于进房发起拉流转推任务。 示例值:recorder_1234
    UserSig
    String
    输入在线媒体流机器人 UserId 对应的校验签名,即 UserId 和 UserSig 相当于机器人进房的登录密码,具体计算方法请参考见计算 UserSig 的方案。 示例值:recorder_1234_sig
    StreamUrl
    String
    源流 URL。历史原因本字段必填。如果是视频流,分辨率请保持不变。 示例值:https://a.b/test.mp4
    VideoEncodeParams
    视频编码参数。可选,如果不填,保持原始流的参数。
    AudioEncodeParams
    音频编码参数。可选,如果不填,保持原始流的参数。
    SourceUrl.N
    Array of String
    (本字段已废弃,请使用 StreamUrl 字段)源流 URL,支持一个地址。 示例值:https://a.b/test.mp4
    SeekSecond
    Integer
    指定视频从某个秒时间戳播放

    输出参数

    参数名称
    类型
    描述
    TaskId
    String
    输入在线媒体流的任务 ID。任务 ID 是对一次输入在线媒体流生命周期过程的唯一标识,结束任务时会失去意义。任务 ID 需要业务保存下来,作为下次针对这个任务操作的参数。
    RequestId
    String
    唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。

    示例

    启动一个输入在线媒体流任务,将在线媒体流"https://a.b/test.mp4"输入TUIRoomKit房间,音视频编码采用默认编码值,转推成功后返回TaskId。
    输入示例
    POST / HTTP/1.1
    Host: trtc.tencentcloudapi.com
    Content-Type: application/json
    X-TC-Action: StartStreamIngest
    <公共请求参数>
    
    {
    "SdkAppId": 1234567890,
    "RoomId": "room123",
    "UserId": "robot123",
    "UserSig": "xxxxxxxxxxxxxxx",
    "PrivateMapKey": "xxxxxxxxxxxxxxx",
    "RoomIdType": 1,
    "StreamUrl": "https://a.b/test.mp4"
    }
    输出示例
    {
    "Response":{
    "Error":{
    "Code":"xxxxx",
    "Message":"xxxxxxxxxx",
    },
    "RequestId":"b99c5411-9f69-4725-a0e1-e5b5df451fc2"
    }
    }

    错误码

    以下仅列出了接口业务逻辑相关的错误码,其他错误码详见 公共错误码
    错误码
    描述
    FailedOperation.NotRtmpFunction
    未开通 RTMP
    FailedOperation.RestrictedConcurrency
    单用户并发过载,请联系我们增大并发路数到合理值。
    FailedOperation.TaskExist
    任务已存在
    InternalError.HttpParseFailed
    http 请求解析失败。
    InternalError.InternalError
    内部错误,请重试。
    InvalidParameter.BodyParamsError
    body 解析参数失败。
    InvalidParameter.RoomId
    RoomId 参数错误。
    InvalidParameter.SdkAppId
    SdkAppId 参数错误。
    InvalidParameter.StrRoomId
    StrRoomId 参数错误。
    InvalidParameter.TaskId
    TaskId 参数错误。
    InvalidParameter.UserSig
    UserSig 过期或错误。
    MissingParameter.RoomId
    缺少 RoomId 参数。
    MissingParameter.SdkAppId
    缺少 SdkAppId 参数。
    MissingParameter.TaskId
    缺少 TaskId 参数。
    ResourceInsufficient.RequestRejection
    资源不足。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持