WebRTC推流和拉流是什么意思
WebRTC(Web实时通信)是一种用于浏览器之间实时通信的开放标准。WebRTC推流和拉流是指使用WebRTC技术在浏览器中实现音视频流的传输和接收。
推流指的是将音视频数据从本地设备(例如摄像头和麦克风)发送到远程端。在WebRTC中,推流通常通过getUserMedia API获取本地音视频流,然后使用RTCPeerConnection建立与远程端的连接,并通过RTCPeerConnection的addTrack方法将音视频轨道添加到连接中。最后,通过调用RTCPeerConnection的createOffer方法创建一个Offer,将其发送给远程端,从而实现推流。
拉流指的是从远程端接收音视频数据并在本地进行播放。在WebRTC中,拉流通常通过RTCPeerConnection建立与远程端的连接,并通过RTCPeerConnection的addTrack方法接收远程端发送的音视频轨道。然后,可以通过监听RTCPeerConnection的ontrack事件获取音视频轨道,并将其渲染到本地的音视频播放器中,从而实现拉流。
WebRTC推流和拉流的实现可以为实时通信、视频会议、远程教育等场景提供便利和高质量的音视频传输。
鉴于WebRTC开发门槛较高,为实现业务的快速落地,避免重复造轮子,推拉流这一块一般可以由第三方服务来实现。下面我们以 SRS 和 ZEGO WebRTC SDK 为例演示推拉流过程。
基于SRS流媒体服务器,WebRTC推流和拉流演示
SRS(Simple Realtime Server)是一个简单高效的实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT等多种实时流媒体协议。
WebRTC推流和拉流配置
- webrtc是默认⽀持的(–rtc=on),使⽤默认的rtc配置(conf/rtc2rtmp.conf)就可以运行。
- 默认rtc2rtmp.conf配置如下:
listen 1935;
max_connections 1000;
daemon off;
srs_log_tank console;
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
}
http_api {
enabled on;
listen 1985;
}
stats {
network 0;
}
rtc_server {
enabled on;
listen 8000; # UDP port
# @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#config-candidate
# candidate $CANDIDATE;
candidate 8.141.75.248;
}
vhost __defaultVhost__ {
rtc {
enabled on;
# @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#rtmp-to-rtc
rtmp_to_rtc on;
# @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#rtc-to-rtmp
rtc_to_rtmp on;
}
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
}
}
3.其中rtc_server是全局的RTC服务器的配置,部分关键配置包括:
- enabled:是否开启RTC服务器,默认是off。
- listen:侦听的RTC端口,注意是UDP协议。
- candidate:服务器提供服务的IP地址,需要是公网ip地址,否则局域⽹webrtc可以拉流,正式环境⿊屏。
- ecdsa:服务器自动生成的证书种类,ECDSA或RSA,是否用ECDSA。
4.然后是每个vhost中的RTC配置,部分关键配置包括:
- rtc.enabled:是否开启RTC能力,默认是off。
- rtc.rtmp_to_rtc:是否开启RTMP转RTC。
- rtc.rtc_to_rtmp:是否开启RTC转RTMP。
- rtc.stun_timeout:会话超时时间,单位秒。
- rtc.nack:是否开启NACK的支持,即丢包重传,默认on。
- rtc.twcc:是否开启TWCC的支持,即拥塞控制的反馈机制,默认on。
- rtc.dtls_role:DTLS角色,active就是DTLS Client(主动发起),passive是DTLS Server(被动接受)。
5.注意:对应端口,比如8000,1985端口必须开启,否则不能进行WebRTC测试。
WebRTC拉流演示
- 通过RTMP进⾏推流,然后通过WebRTC进⾏拉流。
- 启动SRS流媒体服务器:
./objs/srs -c conf/rtc.conf
3.使用ffmpeg命令进⾏推流(注意:ip需要换成自己的):
ffmpeg -re -i time.flv -vcodec copy -acodec copy -f flv -y rtmp://8.141.xxx.248/live/livestream
4.推送流成功之后,使⽤srs⾃带的rtc_player播放器进⾏播放,直接请求srs服务的8080端⼝即可。
- http://8.141.xxx.248:8080/players/rtc_player.html
- 下图是用WebRTC播放和RTMP播放对比。
WebRTC推流演示
- WebRTC推流器:http://8.141.75.248:8080/players/rtc_publisher.html
- 点击开始推流报错,推流需要是HTTPS或者localhost,如下图:
3.如果是window系统,可以Chrome的启动参数。方法:
- 找到Chrome图表
- 右键图标,选择属性
- 找到”目标”文本框,里面的内容是你的Chrome程序路径,类似这样:C:UsersAdministratorAppDataLocalGoogleChromeApplicationchrome.exe
- 在这段文本的后面输入一个空格,然后输入–ignore-certificate-errors –allow-running-insecure-content –un
- safely-treat-insecure-origin-as-secure=“http://8.141.75.248:8080”(ip换成自己的)
- 点击确定,重新打开Chrome浏览器
4.mac系统没找到对应方法,可以配置一台Nginx,申请个免费的HTTPS证书,并配置转发。
5.然后就可以使用WebRTC或者RTMP进行播放。
基于ZEGO WebRTC SDK 快速实现推流和拉流
ZEGO Express Web SDK 使用了 WebRTC 技术实现实时音视频功能,不止限制于WebRTC,只要符合RTP/RTCP等标准原则则都可接入。它是一款实时的音视频互动服务产品,能够为开发者提供便捷接入、高可靠、多平台互通的音视频服务。通过低至 200 ms 的端到端平均时延,业内领先的保障弱网质量的 QoS 策略,并结合强大的 3A 处理能力,完美支持一对多、多对多的实时音视频通话、直播、会议等场景。
ZEGO WebRTC推流和拉流的基本流程
推拉流过程的 API 调用时序可参考下图:
推流的基本流程
- 初始化SDK,跟房间服务建立连接
- 登录房间,连接房间服务
- 创建本地流,浏览器返回mediaStream对象,可实现本地预览
- 开始推流,房间服务返回推流的ip[]
- 建立流数据通道,浏览器(SDK)跟 GateWay(ZEGO自研WebRTC网关) 建立流数据传输通道,这一步是相对于两个webrtc 内部的通道建立,实现数据传输
- GateWay 转协议给到 VRS媒体服务器进行调度分发
拉流的基本流程
- 初始化SDK,跟房间服务建立连接
- 登录房间,连接房间服务
- 开始拉流,房间服务返回拉流的ip[]
- 建立流数据通道,浏览器(SDK)跟 GateWay 建立流数据传输通道,这一步是相对于两个webrtc 内部的通道建立,实现数据传输
- 拉流成功,拿到mediaStream流对象进行渲染
- GateWay 与媒体服务器交互,转协议实现数据传输到拉流端
详细实现过程请阅读 开发者文档
文章参考资料:
https://blog.csdn.net/weixin_42151869/article/details/111226170
https://blog.csdn.net/weixin_41910694/article/details/124174558
https://doc-zh.zego.im/article/7638
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/4936.html