实时音视频 打通 RTMP 推流协议

为降低客户接入门槛,TRTC 支持 RTMP 标准协议推流。可以根据实际情况选择安装 OBS 、FFmpeg 或其他 RTMP 库进行推流。OBS 是一款好用的第三方开源程序直播流媒体内容制作软件,为用户提供免费使用,它可支持 OS X、Windows、Linux 操作系统,适用多种直播场景,满足大部分直播行为的操作需求,可以以到 OBS 页面 下载最新版本软件,使用 OBS 推流时无需安装插件。

相关产品
实时音视频 产品页,含版本规格、价格与购买入口。

方案背景

本功能自2023年02月15日起结束免费内测,如需使用该功能需要订阅 TRTC 应用 包月套餐 尊享版或旗舰版来解锁功能,若在此之前已申请开通的应用(SdkAppID)将可以免费使用至2023年04月01日(缓冲期),同时接入的 RTMP 流会作为房间中的虚拟用户产生正常的通话费用,一条流是一个虚拟用户,详情参见 音视频时长计费说明;同时接入 RTMP 流过程中进行转码操作,从而产生转码费用,详情参见 云端混流转码计费说明。

应用场景

场景类型 说明
在线教育场景 老师展示视频课件教学视频时,可以通过 PC 端 OBS 或者 FFmpeg 把绝大多数媒体格式以 RTMP 推流至 TRTC 房间,房间内的学生通过 TRTC SDK 拉流,可以保证观看到相同进度的教学视频,课件播放跳转进度、调整速度、切换下一章等全部可由老师控制,各学生端观看对齐课堂秩序好,教学质量更稳定。
一起看球赛场景 比赛流媒体是赛事供应方固定以 RTMP 格式流的方式提供赛事画面,通过 RTMP 协议推流至 TRTC 房间,实现 TRTC 房间内同步观看超低延时的比赛直播,配合 TRTC 的实时互动能力,与好友语音/视频讨论,一起喝彩加油,不会错过每一个精彩瞬间的共享体验。
更多场景 任何基于媒体流的实时互动体验玩法,均可通过 RTMP 协议推流帮你实现,更多玩法等待你的探索。

网络架构

RTMP 属于 TRTC 的一个子模块,能与 TRTC 其他端互通,互通延迟在正常情况下小于600ms,也可使用 TRTC 录制、转推等已有能力。网络架构如下所示。不支持使用 RTMP 从 TRTC 拉流。

流地址生成

一、推流地址

rtmp://rtmp.rtc.qq.com/push/房间号?sdkappid=应用&userid=用户名&usersig=签名

·RTMP appName 是 push。

·地址中的房间号、应用、用户名、签名需要换成业务的。

·为简化参数,只支持字符串房间号,不超过64个字符,字符只能是数字、字母、下划线。

注意:警告:

注意:1. TRTC 其他端如果要观看 RTMP 流,请使用字符串房间号进房。

注意:2. 以 小程序端 为例填写 enterRoom 接口 strRoomID 字段,其他端参考相应的 API 文档。

·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:其他端观看

如前面 设置推流参数 所说,TRTC 其他端进房需要使用字符串房间号,Web 端 观看 RTMP 流的效果如下所示,你也可以选择使用其他端观看。

十、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'

十三、其他端观看

下面是使用 Web 端观看的效果,你也可以选择使用其他端观看。

赞 (0)
上一篇 4天前
下一篇 4天前