webrtc推流和拉流是什么意思(webrtc推拉流配置和演示)

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推流和拉流配置

  1. webrtc是默认⽀持的(–rtc=on),使⽤默认的rtc配置(conf/rtc2rtmp.conf)就可以运行。
  2. 默认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拉流演示

  1. 通过RTMP进⾏推流,然后通过WebRTC进⾏拉流。
  2. 启动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端⼝即可。

  1. http://8.141.xxx.248:8080/players/rtc_player.html
  2. 下图是用WebRTC播放和RTMP播放对比。
webrtc推流和拉流是什么意思(webrtc推拉流配置和演示)

WebRTC推流演示

  1. WebRTC推流器:http://8.141.75.248:8080/players/rtc_publisher.html
  2. 点击开始推流报错,推流需要是HTTPS或者localhost,如下图:
webrtc推流和拉流是什么意思(webrtc推拉流配置和演示)

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 调用时序可参考下图:

webrtc推流和拉流是什么意思(webrtc推拉流配置和演示)

推流的基本流程

  1. 初始化SDK,跟房间服务建立连接
  2. 登录房间,连接房间服务
  3. 创建本地流,浏览器返回mediaStream对象,可实现本地预览
  4. 开始推流,房间服务返回推流的ip[]
  5. 建立流数据通道,浏览器(SDK)跟 GateWay(ZEGO自研WebRTC网关) 建立流数据传输通道,这一步是相对于两个webrtc 内部的通道建立,实现数据传输
  6. GateWay 转协议给到 VRS媒体服务器进行调度分发

拉流的基本流程

  1. 初始化SDK,跟房间服务建立连接
  2. 登录房间,连接房间服务
  3. 开始拉流,房间服务返回拉流的ip[]
  4. 建立流数据通道,浏览器(SDK)跟 GateWay 建立流数据传输通道,这一步是相对于两个webrtc 内部的通道建立,实现数据传输
  5. 拉流成功,拿到mediaStream流对象进行渲染
  6. 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

(3)

相关推荐

发表回复

登录后才能评论