概述
一起看、一起听、一起玩、一起学……原来需要线下面对面才能实现的各种体验正被不断搬到线上。相隔千里还能和好友们一起看电影、一起听音乐,然后一起交流吐槽,这样神奇的实时互动体验正受到当下年轻人的喜爱,并成为如今音视频产品的重点玩法和主流方向。
输入在线媒体流 用于拉取云端在线媒体流(在线流或云端点播文件)推流至 TRTC 房间内进行观看.
RTMP 推流进房 用于将本地媒体文件、音视频设备采集音视频通过 RTMP 标准协议推流到 TRTC 房间内。
说明:
相关费用如下:
功能位解锁:输入在线媒体流和 RTMP 推流进房功能需订阅 TRTC包月套餐 尊享版或旗舰版解锁。
用量费用:
使用推流功能会进行转码操作,产生转码费用,详情参见 云端混流转码计费说明。
收取推流机器人在房产生的音频时长费用(注:输入在线媒体流功能产生的机器人在房费用将限免于2024年8月15日,从2024年8月16日起开始收取)。
房间内观众订阅推流进房的音视频内容会正常产生音视频通话费用,详情参见 音视频时长计费说明。
输入在线媒体流
应用场景
场景类型 | 说明 |
AI 互动课堂 | 依托 TRTC 输入在线媒体流能力,平台可通过录播真人教学视频结合 AI 技术进行线上直播互动教学,在保证教学效果的同时大幅降低运营成本。上课前,平台根据教师的课程设置,将知识点讲解、互动提问、问题反馈和解答等信息录制成视频片段,上传到视频库。课堂中,通过 TRTC 输入在线媒体流能力将对应视频推送到 TRTC 房间进行直播。学生通过语音、触屏实现互动式学习。服务端通过 AI 技术,智能识别学生的实时语音和作答,并根据学生的表现,无缝切换教学片段,实时给予不同的反馈,从而提供个性化的教学体验。 |
“一起看”房间服务 | 游戏直播、秀场、体育赛事等直播类内容,可以通过 TRTC 输入在线媒体流能力将直播流推送到 TRTC 房间,实现房间内超低延时同步观看,配合 TRTC 的实时互动能力,观众可实时交流,一起加油喝彩,沉浸式观赛。电影、音乐等点播类节目,同样可以通过该能力输入至 TRTC 房间,帮助用户实时共享,与好友边看边聊。 |
功能架构
1. 用户使用 REST API 创建输入在线媒体流任务,输入在线媒体流任务由中转服务(relay server)执行。
2. 中转服务拉取在线流或者点播文件。
3. 中转服务将拉取到的音视频推至 TRTC 房间,中转服务中会自动生成一个虚拟主播用户,该用户的用户名和要进入的房间号在创建任务时指定。
4. TRTC 其他端可观看这路流,也可以复用 TRTC 录制、转推等能力。
功能描述
输入在线媒体流功能说明如下:
类型 | 描述 |
发起任务方式 | 用户可以通过 REST API 发起输入在线媒体流任务,观众可观看这路流,支持录制、转推等功能。 |
多种源流协议和格式 | 协议:HTTP、HTTPS、RTMP、HLS 格式:FLV、MP3、MP4、MPEG-TS、MOV、MKV、M4A 视频编码:H.264、VP8 音频编码:AAC、OPUS |
服务端回调 |
相关 Rest API
开启输入在线媒体流:StartStreamIngest
停止输入在线媒体流:StopStreamIngest
查询输入在线媒体流:DescribeStreamIngest
RTMP 推流进房
TRTC 支持将本地媒体文件、音视频设备采集音视频通过 RTMP 标准协议推流到 TRTC 房间内。为降低客户接入门槛,您可根据实际情况选择安装 OBS 、FFmpeg 或其他 RTMP 库进行推流。OBS 是一款好用的第三方开源程序直播流媒体内容制作软件,为用户提供免费使用,它可支持 OS X、Windows、Linux 操作系统,适用多种直播场景,满足大部分直播行为的操作需求,您可以到 OBS 官网 下载最新版本软件,使用 OBS 推流时无需安装插件。
应用场景
场景类型 | 说明 |
在线教育场景 | 老师展示视频课件教学视频时,可以通过 PC 端 OBS 或者 FFmpeg 把绝大多数媒体格式以 RTMP 推流至 TRTC 房间,房间内的学生通过 TRTC SDK 拉流,可以保证观看到相同进度的教学视频,课件播放跳转进度、调整速度、切换下一章等全部可由老师控制,各学生端观看对齐课堂秩序好,教学质量更稳定。 |
一起看球赛场景 | 比赛流媒体是赛事供应方固定以 RTMP 格式流的方式提供赛事画面,通过 RTMP 协议推流至 TRTC 房间,实现 TRTC 房间内同步观看超低延时的比赛直播,配合 TRTC 的实时互动能力,与好友语音/视频讨论,一起喝彩加油,不会错过每一个精彩瞬间的共享体验。 |
更多场景 | 任何基于媒体流的实时互动体验玩法,均可通过 RTMP 协议推流帮您实现,等多玩法等待您的探索。 |
网络架构
RTMP 属于 TRTC 的一个子模块,能与 TRTC 其他端互通,互通延迟在正常情况下小于600ms,也可使用 TRTC 录制、转推等已有能力。网络架构如下图所示。不支持使用 RTMP 从 TRTC 拉流,只支持 RTMP 推流。
流地址生成
推流地址
rtmp://rtmp.rtc.qq.com/push/房间号?sdkappid=应用&userid=用户名&usersig=签名
主域名是 rtmp.rtc.qq.com,备域名 rtmp.cloud-rtc.com,如果主域名解析有问题,可使用备域名。
RTMP appName 是 push。
地址中的房间号、应用、用户名、签名需要换成业务的。
为简化参数,只支持字符串房间号,不超过64个字符,字符只能是数字、字母、下划线。
usersig 的生成规则,请参见 UserSig 相关 (请注意签名要在有效期内)。
示例:
rtmp://rtmp.rtc.qq.com/push/hello-string-room?sdkappid=140*****66&userid=******rtmp2&usersig=eJw1jdE********RBZ8qKGRj8Yp-wVbv*mGMVZqS7w-mMDQL
使用示例
您可以使用支持 RTMP 协议的软件或者代码库推流,下面列举几种。
OBS 推流
准备工作
步骤1:选择输入源
查看底部工具栏的来源标签,单击+ ,根据您的业务需要选择输入源。常用来源输入有:
输入源 | 说明 |
图像 | 适用于单张图像直播 |
图像幻灯片放映 | 可循环或者顺序多张播放图片 |
场景 | 实现各种强大的直播效果。此时,另一个场景是作为来源被添加进当前场景的,可以实现整个场景的插入 |
媒体源 | 可上传本地视频,并本地点播视频文件进行直播化处理 |
文本 | 实时添加文字在直播窗口中 |
窗口捕获 | 可根据您选择的窗口进行实时捕获,直播仅显示您当前窗口内容,其他窗口不会进行直播捕获 |
视频捕获设备 | 实时动态捕捉摄像设备,可将摄像后的画面进行直播 |
音频输入捕获 | 用于音频直播活动(音频输入设备) |
音频输出捕获 | 用于音频直播活动(音频输出设备) |
步骤2:设置推流参数
1. 通过底部工具栏的控件 > 设置按钮进入设置界面。
2. 单击推流进入推流设置页签,选择服务类型为自定义。
3. 服务器填写:
rtmp://rtmp.rtc.qq.com/push/
。4. 填写串流密钥格式如下:
房间号?sdkappid=应用&userid=用户名&usersig=签名
其中房间号、应用、用户名、签名需要换成业务的,参考流地址生成章节。例如:
hello-string-room?sdkappid=140*****66&userid=******rtmp2&usersig=eJw1jdE***************ZLgi5UAgOzoMhrayt*cjbmiCJ699T09juc833IMT94Ld7I0iHZqVDzvVAqkZsG-IKlzLiXOnEhswHu1iUyTc9pv*****D8MQwoA496Ke6U1ip4EAH4UMc5H9pSmv6MeTBWLamhwFnWRBZ8qKGRj8Yp-wVbv*mGMVZqS7w-mMDQL
步骤3:设置输出
RTMP 后台不支持传输 B 帧,用户可以通过如下设置调整推流端软件的视频编码参数来去除 B 帧。
1. 在设置中单击输出页签进行配置。
2. 在输出模式中选择高级,关键帧间隔建议填写1或2,CPU 使用预设为 ultrafast,配置选择 baseline,微调选择 zerolatency,x264 选项填写 threads=1,单击确定保存设置。
警告:
推流需要去除 B 帧,否则推流后连接会被断开,下面的配置选择 baseline 可去除 B 帧。
步骤4:设置视频选项
在设置中单击视频页签,设置分辨率和帧率。分辨率决定了观众看到的画面清晰程度,分辨率越高画面越清晰。FPS 是视频帧率,它控制观看视频的流畅,普通视频帧率有24帧 - 30帧,低于16帧画面看起来有卡顿感,而游戏对帧率要求比较高,一般小于30帧游戏会显得不连贯。
步骤5:设置高级选项
建议不启用串流延迟以减少端到端延迟。
启动自动重连,建议设置重试延迟时长尽量短,网络抖动时如果连接断开可尽快重连上。
步骤6:单击推流
1. 查看 OBS 底部工具栏的控件,单击开始推流。
2. 推流成功后,正常情况在界面底部会展示推流状态,TRTC 控制台仪表盘 上有该用户进房记录。
步骤7:其他端观看
FFmpeg 推流
如果需要用命令行或其他 RTMP 库推流,使用完整的流地址供 FFmpeg 或其他 RTMP 库推流,视频编码使用 H.264,音频编码使用 AAC,容器格式使用 FLV,建议 GOP 设置为2s或1s。
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 帧,TRTC 后端不支持 B 帧 |
-g | GOP 帧数间隔 |
-c:a | 音频编码,建议用 libfdk_aac |
-ac | 声道数,填2或1 |
-b:a | 音频码率 |
-f | 指定格式,固定填 flv ,发送到 TRTC 使用 FLV 容器封装 |
下面的例子是读取文件推到 TRTC,注意 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/hello-string-room?userid=rtmpForFfmpeg&sdkappid=140xxxxxx&usersig=xxxxxxxxxx'
其他端观看
FAQ
推流失败
常见原因
没买套餐包或过期。
签名错误或过期。
推了B帧(仪表盘上的现象是“推流一秒就结束”),可设置 baseline 编码。
其他原因
如果是嵌入式硬件设备推流,可能将 URL 截断。
推了 H.265,改为 H.264。
端上 set chunk 太大,改为 1360。
卡顿、花屏
检查推流客户端本地 CPU、内存是否高负载。如果使用的是 OBS 推流,观察软件底部状态栏,有丢帧、网络、CPU、帧率等信息。
检查本地网络带宽是否足够。ping 推流的域名观察 RTT;使用 网络诊断工具 检测推流域名,查看带宽,最好能达到 10M。
推流端可尝试降低码率、帧率减少客户端压力,参考正文中 OBS 的设置,720p 建议码率 1500 Kbps。
延迟大
拉流端如果使用主播角色,延迟通常低于观众角色,如果不是主播角色可尝试对比一下观察是否有改善。
推流端本地编码和网络影响较大。可尝试不同平台测试,如果使用的是 OBS,可尝试 Windows 系统推流;ping 推流域名观察 RTT。
其他端看不到推的流
推流端使用的是字符串房间号,拉流端使用了数字房间号,修改拉流端,改为字符串房间号进房。
频繁断开重推
用户名重名,两处互踢引起,请确保单个 sdkappid 下的用户名 userid 全局唯一。
推了 B 帧,可设置 baseline 编码。
服务端回调
使用业务侧域名
设置业务侧域名 CNAME 到官方域名,后续也建议这样使用。