一、简介
二、修改conf/rtc.conf
三、两个客户端加入房间
四、合流
4.1分别拉流尝试
4.2合流推流
4.3拉取合流
一、简介
直播连麦是指在one2one或one2many进行音视频通话,此时把他们的音视频流合在一起,通过rtmp等协议推送给大量用户做直播。
因此首选需要搭建好以下环境:
srs one2one,one2many通话环境搭建
视频合流非常非常消耗CPU,而且有很多种方式:
SRS+FFmpeg,SRS将WebRTC流转RTMP,FFmpeg将多路RTMP合流。优势:延迟小,音质好;缺点是命令行难度高。 SRS+OBS,方案和SRS+FFmpeg一样,不过用OBS来实现合流。优势:图形化界面更友好,音质好;缺点是延迟大有不同步风险较大。 OBS抓浏览器,OBS直接捕获浏览器窗口和电脑的音频。优势:可见即所得,依赖少;缺点是音质不如前面的方案。
以上引用官方文档:
https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#sfu-one-to-one
下面对其中SRS+FFmpeg进行搭建,其他两个可以做测试用,但很难集成在代码里做一个服务器。
二、修改conf/rtc.conf
cat conf/rtc.conf
找到以下:
rtc {
enabled on;
# @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#rtmp-to-rtc
rtmp_to_rtc on;//原off,改为on
# @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#rtc-to-rtmp
rtc_to_rtmp on;//原off,改为on
}
然后重新启动,注意这里两个客户端是在同一网段,如果服务器在公网的话,还需要暴露本身的ip,因为在公网的srs无法拿到自己公网ip,它只能拿到它自己ifconfig的ip,而那是它所在局域网的网段。
./objs/srs -c conf/rtc.conf
三、两个客户端加入房间
1111加入房间
2222加入房间
四、合流
4.1分别拉流尝试
ffplay rtmp://127.0.0.1/1111/1111
ffplay rtmp://127.0.0.1/1111/2222
4.2合流推流
ffmpeg -f flv -i rtmp://127.0.0.1/1111/1111 -f flv -i rtmp://127.0.0.1/1111/2222 -filter_complex "[1:v]scale=w=96:h=72[ckout];[0:v][ckout]overlay=x=W-w-10:y=H-h-10[out]" -map "[out]" -c:v libx264 -profile:v high -preset medium -filter_complex amix -c:a aac -f flv rtmp://127.0.0.1/live/merge
以上是srs官网提供的合流,我用了之后出问题了,合流之后小屏的那个花屏了,可能不同的采集设备视频和音频参数不同带来的,以下是笔者自己配置的ffmpeg命令,亲测有效:
ffmpeg -i rtmp://127.0.0.1/1111/1111 -i rtmp://127.0.0.1/1111/2222 -filter_complex "[0:v][1:v]overlay=W-w-100:H-h-100:format=auto,format=yuv420p[out]" -map "[out]" -map 0:a -c:v libx264 -c:a aac -f flv rtmp://127.0.0.1/live/merge
4.3拉取合流
ffplay rtmp://127.0.0.1/live/merge