发布直播流到RTC频道

本文介绍如何将外部RTMPWHIP直播流发布到RTC频道内。

功能介绍

阿里云RTC支持将外部直播流发布到指定的RTC频道中,实现直播流与实时音视频互动的融合。

说明

发布直播流到RTC频道涉及转码为收费服务,当前为公测阶段,您可以免费使用,公测结束后将正常收费,具体时间另行通知。

典型应用场景

场景

应用描述

教育直播

教师通过OBS推送课件视频或录播课程,学生在RTC频道中实时观看并参与互动问答。

电商带货

主播使用推流工具播放商品视频或切换多机位画面,观众在直播间实时连麦、点赞、下单。

远程医疗

医院通过直播流推送手术直播或医学影像,专家在RTC频道中进行实时讲解与会诊。

流程概览

  1. 服务端调用Open API接口,为指定RTC频道生成推流地址。

  2. 用户使用OBS、FFmpeg等工具,将预先录制的视频、摄像头画面或屏幕内容推流至生成的推流地址。

  3. 推流内容作为一路音视频流进入RTC频道,与其他加入频道的用户共享。

  4. 客户端通过ARTC SDKDemo加入相同频道后,可自动接收并播放该直播流。

前提条件

在设置视频配置之前,请确保达成以下条件:

功能实现

以下是将直播流发布到RTC频道的具体实现步骤:

1.创建推流地址

创建RTMP推流地址

调用CreateRoomRealTimeStreamAddress - 创建RTMP流在房间中的推流地址接口生成推流地址请求。

成功调用后,接口返回如下结果:

{
  "RtmpAddress": "rtmp://rcrpush.rtmp.alivecdn.com/4050f7-*****-851be4e/4573e******831?qqzr=H4sIAAAAAAAC_wTAS************mkSAAAAA&auth_key=1756*******81c0",
  "RequestId": "1ADD*********D1393"
}

创建WHIP推流地址

调用创建RTC频道WHIP推流地址接口生成推流地址请求。

成功调用后,接口返回如下结果:

{
  "RequestId": "58E7**D4-xxxx-xxxx-xxxx-6B5**6Cxxxxx",
  "WhipAddress": "https://xxxxxx.media-sh.xxxxx.com/xxxxxxxxxxxx/3723a3xxxxxxxxx223c606b***5f7a2bc7c56ea5cdd0xxxxe?auth_key=17495xxxxx-xxxx-0-f013003067c78c4053f9cd0xxxxxxx&qqzr=H4sIAAAAAAAC_6pWSlayUkrOMxxxxxxrPyCxQ0lFKQTCLlKyUjM2Nj**NDQ1TEy2Mjc3xxxxxxxxxxqRYAAAD__xxxxx__xxxxxxxx"
}

2.使用OBS进行推流

打开OBS Studio,按以下步骤配置推流:

  1. 点击【Settings】→【Stream】

    image

  2. OBS推流设置。

    RTMP推流设置

    服务选择“自定义”,填入上一步获取的RtmpAddress。点击【确定】保存设置

    image

    WHIP推流设置

    服务选择“WHIP”,填入上一步获取的WhipAddress。点击【确定】保存设置

    image

  3. OBS主界面点击【开始推流】。

    image

推流成功后,OBS状态栏会显示“正在推流”及实时码率信息。

3.播放视频流

App端加入相同的AppIdChannelId,等待数秒后,OBS推流的视频画面将自动出现在频道成员列表中。

image

若未显示画面,请检查以下内容:

  • OBS是否正常推流。

  • 频道ID是否一致。

  • 推流地址是否过期。

  • 网络连接是否正常。

FFmpeg 推流

使用1.创建推流地址返回的完整推流地址,可通过 FFmpeg 或其他 RTMP 库推送音视频流至 RTC 频道。请遵循以下基本规范:

  • 视频编码:H.264。

  • 音频编码:AAC。

  • 容器格式:FLV(通过 RTMP 传输)。

  • 建议 GOP:1~2 秒。

FFmpeg常用参数说明

参数

说明

-re

按文件原始帧率推流,适用于本地文件。

-c:v

视频编码,建议使用 H.264 编码libx264

-b:v

视频码率,如1500k代表1500kbps。

-r

视频帧率。

-profile:v

视频profile,指定baseline,避免编码B帧。

-g

GOP 帧数间隔。

-c:a

音频编码,建议使用libfdk_aac

-ac 2 -b:a 128k

双声道,音频码率 128kbps。

-f

输出格式,固定填flv

更多参数详见FFmpeg 官网

推流示例

ffmpeg -re -i sample.flv \
-c:v libx264 -profile:v baseline -g 50 -b:v 1500k -r 25 \
-c:a aac -b:a 128k -ac 2 \
-f flv "rtmp://rcrpush.rtmp.alivecdn.com/4050f7-*****-851be4e/4573e******831?qqzr=H4sIAAAAAAAC_wTAS************mkSAAAAA&auth_key=1756*******81c0"