webRTC与SRS介绍

1,050 阅读5分钟

SRS github地址 : github.com/ossrs/srs

webRTC api详解 : developer.mozilla.org/zh-CN/docs/… (mdn介绍文档,我们只需要使用webRTC api里的Navigator属性)

前期准备(首先肯定得要后端或者运维搭建一个或者部署一个SRS的服务器,该文章都为前端准备)

引入srs.sdk.js文件(直接下载保存到项目里自己的js目录)

文件目录如下:

srs.sdk.js文件介绍

这个文件里面会有四个方法(SrsRtcPublisherAsync,SrsRtcPlayerAsync,SrsRtcWhipWhepAsync,SrsRtcFormatSenders)加一个抛出错误的方法(SrsError)

//初始化
let srsPublish = new SrsRtcPublisherAsync();

//推流
srsPublish.publish(url);
// 这里的url参数是指定 WebRTC 信令SRS服务器的 URL,
// 客户端通过这个 URL 与信令服务器建立连接,从而协商媒体流的传输。

//publish里的网络请求代码 (可以自定义修改使用自己项目封装的axios请求)
var session = await new Promise(function (resolve, reject) {
    // @see https://github.com/rtcdn/rtcdn-draft
    // 请求srs服务器的参数  (后端不该的情况下一般不变)
    var data = {
      api: conf.apiUrl, tid: conf.tid, streamurl: conf.streamUrl,
      clientip: null, sdp: offer.sdp
    };
    console.log("Generated offer: ", data);

    //网络请求  可以修改为你封装的请求
    const xhr = new XMLHttpRequest();
    xhr.onload = function() {
    }
    xhr.open('POST', conf.apiUrl, true);
    xhr.setRequestHeader('Content-type', 'application/json');
    xhr.send(JSON.stringify(data));

    //示例 我就不写引入请求js代码
    publishVideo(data).then(res=>{
      if(res.code){
        rejeck(data);
        return
      }
      resolve(data);
    }).catch(reason=>{rejeck(reason)})
});

//关闭推流
srsPublish.close();

//用于处理接收到的媒体流轨道的回调
srsPublish.ontrack = function (event) {
    self.stream.addTrack(event.track);
};
//初始化
let srsPlayer = new SrsRtcPlayerAsync();

//拉流
srsPlayer.play(url);
// 这里的url参数是指定 WebRTC 信令SRS服务器的 URL,
// 客户端通过这个 URL 与信令服务器建立连接,从而协商媒体流的传输。

//接收拉流的音频流返回值,并赋值到dom里(video标签)
let play = srsPlayer.play(url);
dom.srcObject = play.stream;

//play里的网络请求代码和publish里相同

//关闭推流
srsPlayer.close();

SrsRtcWhipWhepAsync,SrsRtcFormatSenders类

“ SrsRtcWhipWhepAsync ”类是 SRS (Simple Realtime Server) 中的一个用于 WebRTC 实现的高级 API。这个类的命名源于 WHIP 和 WHEP 两个协议,它们是 WebRTC 中用来简化媒体流发布和接收的协议。

  • WHIP (WebRTC HTTP Ingest Protocol) : 是一种用于简化 WebRTC 媒体发布的协议,通常用于推送媒体流到服务器。它主要是为媒体流的发布(Ingest)设计的,提供了通过简单的 HTTP 请求来处理信令的方式。
  • WHEP (WebRTC HTTP Egress Protocol) : 是 WHIP 的对称协议,用于从服务器接收 WebRTC 媒体流。它提供了一种简化的方式来处理 WebRTC 媒体流的接收(Egress)。

SrsRtcWhipWhepAsync 类的主要功能是实现基于 WHIP/WHEP 协议的 WebRTC 流媒体推送和接收。

主要用途:

  1. 简化信令流程: 通过 WHIP 和 WHEP 协议,信令可以通过简单的 HTTP 请求进行,避免了传统 WebRTC 复杂的 SDP 交换过程。这让开发者更容易实现 WebRTC 的媒体流传输。
  2. 媒体流的发布和接收: 该类能够通过 WHIP 协议推送媒体流到服务器,也可以通过 WHEP 协议接收来自服务器的媒体流。
  3. 异步操作: SrsRtcWhipWhepAsync 类支持异步操作,这意味着它能够以非阻塞的方式处理 WebRTC 的信令和媒体流传输,提高了性能和响应速度。

实际应用场景:

  • 直播: 开发者可以使用这个类通过 WebRTC 协议推送直播流到服务器(使用 WHIP),并从服务器拉取直播流进行播放(使用 WHEP)。
  • 视频会议: 适用于需要通过 WebRTC 实现的简化视频会议应用程序,使用 HTTP 方式处理信令,降低了实现难度。

总的来说,SrsRtcWhipWhepAsync 类是一个封装了 WHIP 和 WHEP 协议的工具,简化了 WebRTC 流媒体推送和接收的流程,使开发者更容易构建基于 WebRTC 的应用程序。

SrsRtcFormatSenders 是 SRS (Simple Realtime Server) 中与 WebRTC 发送端配置相关的一个类或模块。这个类主要用于处理 WebRTC 发送端的媒体流格式化和发送操作。

主要功能和用途:

  1. 格式化媒体发送
    • SrsRtcFormatSenders 负责管理和配置从客户端发送到服务器的媒体流。这包括音频和视频的编码格式(如 H.264、VP8、Opus 等)、比特率、帧率、分辨率等参数。
    • 它可能会处理媒体流的格式化,使其符合特定的协议或服务器需求。比如,将媒体流封装为符合 RTP(Real-time Transport Protocol)格式的包。
  1. 管理发送的轨道
    • 在 WebRTC 中,一个会话可以包含多个媒体轨道(如音频轨道和视频轨道)。SrsRtcFormatSenders 管理这些轨道的发送,包括选择哪些轨道发送、调整轨道的参数等。
    • 该类可能还负责处理与发送端相关的媒体流的生命周期管理,例如开始、暂停和停止发送特定的轨道。
  1. 与信令和流媒体服务器的交互
    • SrsRtcFormatSenders 还可能与 SRS 服务器的信令模块进行交互,确保发送的媒体流符合服务器和接收端的要求。
    • 它可能需要根据服务器的反馈动态调整媒体发送参数,以保证流媒体传输的质量和稳定性。

应用场景:

  • 直播推流: 在实时流媒体推送场景中,SrsRtcFormatSenders 可以用来配置和管理从客户端发送到 SRS 服务器的直播流,确保视频和音频质量符合预期。
  • 视频会议: 在视频会议中,可以使用该类管理多个参与者的视频和音频流的发送,并根据网络条件和服务器要求调整参数。

总结:

SrsRtcFormatSenders 是一个专注于 WebRTC 发送端配置和管理的类,主要用于处理媒体流的格式化、轨道管理以及与服务器的交互。通过使用该类,开发者可以更好地控制 WebRTC 发送端的行为,以优化媒体流的传输效果。