腾讯云实时音视频通过 RTMP 与 TRTC 互通_音视频解决方案_同尘科技

实时音视频 2年前 (2023-10-10) 浏览 109

方案背景

为降低客户接入门槛,TRTC 支持 RTMP 标准协议推拉流。您可根据实际情况选择安装 OBS 、FFmpeg 或其他 RTMP 库进行推流。OBS 是一款好用的第三方开源程序直播流媒体内容制作软件,为用户提供免费使用,它可支持 OS X、Windows、Linux 操作系统,适用多种直播场景,满足大部分直播行为的操作需求,您可以到 OBS 官网 下载最新版本软件,使用 OBS 推流时无需安装插件。同时 TRTC 也支持 RTMP 标准协议拉流。本功能自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://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://rtmp.rtc.qq.com/pull/房间号?sdkappid=应用&userid=用户名&usersig=签名&remoteuserid=对端用户名&sessionid=会话id

RTMP appName 是 pull。sdkappid 应用须在2023年1月1日之后创建,之前创建的应用无法拉流,应用创建时间可在控制台上查看。具体详情请 点击 查看。 前面部分的字段要求和推流的相同(尤其注意各端使用字符串房间号)。只在最后加上对方用户名和会话 ID。对方用户名表示拉该用户的流;会话 id 用于排查问题,区分不同拉流,业务方保证唯一,例如使用 UUID。示例:

rtmp://rtmp.rtc.qq.com/pull/hello-string-room?sdkappid=140*****66&userid=******rtmp3&usersig=eJw1jdE***************ZLgi5UAgOziXOnEhswHu1iUy8MmMDQL&remoteuserid=strin*****IDtest&sessionid=7CF03***D7134473B3F99A3FC152EBD3

使用示例

您可以使用支持 RTMP 协议的软件或者代码库推拉流,下面列举几种。

OBS 推流

准备工作

安装并打开 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 端观看的效果,您也可以选择使用其他端观看。

ffplay 拉流

拉流示例如下,注意 URL 两边加引号。

ffplay -loglevel debug -fflags nobuffer -flags low_delay 'rtmp://rtmp.rtc.qq.com/pull/hello-string-room?userid=rtmpForFfmpeg&sdkappid=140xxxxxx&usersig=xxxxxxxxxx&remoteuserid=bob_anchor&sessionid=7CF036F0***34473B3F99A3FC152EBD3'



对音视频的解决方案有疑惑?想了解解决方案收费? 联系解决方案专家

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠

阿里云解决方案也看看?: 点击对比阿里云的解决方案

- 0人点赞 -

发表点评 (0条)

not found

暂无评论,你要说点什么吗?