精华内容
下载资源
问答
  • mediasoup v3 Website and Documentation mediasoup.org Support Forum mediasoup.discourse.group Design Goals mediasoup and its client side libraries are designed to accomplish with the ...
  • mediasoup-demo v3 A demo application of mediasoup v3. Try it online at https://v3demo.mediasoup.org. Resources mediasoup website and documentation: mediasoup.org mediasoup support forum: mediasoup....
  • mediasoup-demo v3 v3的演示应用程序。 可以在在线尝试。 资源 mediasoup网站和文档: mediasoup支持论坛: 安装 克隆项目: $ git clone https://github.com/versatica/mediasoup-demo.git $ cd mediasoup-...
  • mediasoup_v3_example 带有node.js的WebRTC SFU Mediasoup v3的示例 mediasoup GitHub mediasoup网站 基于 该示例是针对mediasoup v3.1构建的,不适用于mediasoup v1.x和v2.x 此示例在macOS 10.13 High Sierra...
  • mediasoup-ios-client 用于libmediasoupclient的Objective-C包装器库,用于构建基于mediasoup iOS的应用程序。 该项目同时支持64位iOS设备和64位iOS模拟器 网站和文件 支持论坛 入门 椰子足 将以下内容添加到您的...
  • mediasoup客户端v3 JavaScript客户端库,用于构建基于的应用程序。 网站和文件 支持论坛 使用范例 import { Device } from 'mediasoup-client' ; import mySignaling from './my-signaling' ; // Our own signaling...
  • mediasoup广播器演示(libmediasoupclient v3) 基于的应用程序,可在 应用程序中向指定的房间生成人工声音和视频。 视频由一些向图像右下角移动的彩色矩形组成。 人工媒体创作的功劳归WEBRTC团队( )重视。 资源 ...
  • 使用mediasoup 3和GStreamer / FFmpeg的简单视频/音频记录演示 介绍 使用Mediasoup和GStreamer的简单视频/音频记录应用程序 记录的文件存储在服务器的文件目录或用户设置的目录中(通过process.env.RECORD_FILE_...
  • Mediasoup视频会议 使用mediasoup进行多方视频/音频/屏幕会议的示例网站。 该项目旨在通过一个简单的示例更好地了解mediasoup的工作方式。 该项目在以其他示例为特色。 在检出 运行代码 运行npm install然后npm ...
  • mediasoup演示 此存储库包含一些使用 WebRTC SFU的示例应用程序。 此处的示例旨在使它们易于阅读和理解,并且为此目的,它们包含实现其目的所需的最少代码。 故意忽略所有其他附件问题或功能,例如安全性或多用户...
  • 本门课程主要讲解WebRTC多人实时通话,服务器使用开源的WebRTC流媒体服务器Mediasoup.实现iOS端与mediasoup-demo中的Web端进行通信 客户端方面这门课程主讲移动端直接使用Mediasoup-demo的server进行与Mediasoup-...
  • 本门课程主要讲解WebRTC多人实时通话,服务器使用开源的WebRTC流媒体服务器Mediasoup.实现Android端与mediasoup-demo中的Web端进行通信 客户端方面这门课程主讲移动端直接使用Mediasoup-demo的server进行与Mediasoup...
  • 上篇文章对 【流媒体服务器Mediasoup】 源码中使用到的 protoo.websocket 基本API讲解与使用(六),本章节主要对MediaSoup的Android客户端与之前搭建的服务端以及Web端通信,并且实现音视频互通。 在下一篇文章...

    前言

    上篇文章对 【流媒体服务器Mediasoup】 源码中使用到的 protoo.websocket 基本API讲解与使用(六),本章节主要对MediaSoup的Android客户端与之前搭建的服务端以及Web端通信,并且实现音视频互通。

          在下一篇文章中将对Mediasoup服务端 Socket.io 替换 Protoo WebSocket 的讲解。

        MediasoupClient开发文档

    Android中使用Mediasoup+Mediasoup库

          在Android项目中使用libmediasoup 主要有两种方式:

             1: Android studio app下的 build.gradle 直接依赖   implementation 'org.mediasoup.droid:mediasoup-client:3.0.4-beta-1'

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'androidx.appcompat:appcompat:1.1.0'
        implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'androidx.test.ext:junit:1.1.1'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
        implementation 'org.mediasoup.droid:mediasoup-client:3.0.4-beta-1'
        implementation 'org.java-websocket:Java-WebSocket:1.4.0'
    
        implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha01'
    
    }

          之后就可以通过这个库进行Api逻辑开发,具体逻辑在后续博文中也会进行一一介绍,只要WebSocket或者信令打通了,则就可以完完全全能够连到之前博文中部署的服务端进行连接,并且能够与Web端进行音视频通信。

             这个方法相对来说适合上层做业务逻辑不用去动底层代码,但是有时候可能需要改动到底层库则会显得比较无力。

              要到达商业化软件则还是得来动手编译libMediasoupClient库

       2: 自己动手编译库。

              由于libmediasoup-client 中需要依赖一些Webrtc的库,在Linux 下进行编译,下载WebRtc源码可能网络会稍微收到一点限制。

              具体如何编译这里不做太多详细介绍 可以百度搜索: mediasoupclient webrtc  一些文章会有详细教程。

            【官网编译教程:https://mediasoup.org/documentation/v3/libmediasoupclient/installation/

              编译时还是会有很多环境问题需要耐心的去解决如 GCC、G++ 需要的版本 支持C++11及以上特性。

               首先编译出libwebrtc.a  最后在编译出libmediasouoClient.a

               到目前为止只是编译出了静态库,那么如何在Android上使用静态库进行NDK开发呢?

               目前为止网上已经有大神已经把一些基础文件做好了,并写好cmake脚本,具体项目后续上传到文件资源。

              (编译出libmediasoupclient.a 也可以自己去写cmake 脚本进行编译出so)

                      

       deps 里面是整个源码以及要编译需要依赖的头文件

       jni     java层调用的业务代码

       CMakeList.txt     已经完全写好编译的脚本 

    Android Studio中对 Mediasoup client  SO库的编译

     

          以上介绍了2种 使用自己编的依赖库去NDK开发。

          那么也可以完全使用Android Studio进行对libwebrtc.a以及 libmediasoupclient.a 的直接编译。

          首先可以把Webrtc 以及 MediasoupLib 需要的源码下下来,附上下载地址(里面已经写好了cmake编译静态库的脚本)

           整个代码结构如第一节所看到的 放到deps 文件夹目录下。

           这边直接给出下载地址,直接下载完导入Module 即可。

          下载地址:

                        

     

    介绍几个重要的类

              

                       未完待续。。。。。。。

    展开全文
  • Mediasoup-demo搭建在centos、ubuntu两个平台 Mediasoup-sample-server搭建 Mediasoup-ios客户端连接mediasoup服务器进行音视频通话 Mediasoup-Andriod客户端连接mediasoup服务器进行音视频通话
  • mediasoup提供了PlainTransport可以接收裸RTP数据,所以可以通过ffmpeg.sh脚本推本地文件到mediasoup。 二、ffmpeg.sh推流介绍 脚本路径:mediasoup-demo/broadcasters/ffmpeg.sh 注意:需要通过chrome网页请求...

    一、PlainTransport 介绍

         mediasoup提供了PlainTransport可以接收裸RTP数据,所以可以通过ffmpeg.sh脚本推本地文件到mediasoup。

    二、ffmpeg.sh推流介绍

    脚本路径:mediasoup-demo/broadcasters/ffmpeg.sh

    注意:想看到ffmpeg的推流效果,可以通过chrome网页请求,提前创建好一个房间,然后向这个房间进行推流。

    1、安装脚本运行时的依赖库

    安装httpie

    yum install httpie

    安装urlib

    easy_install urllib3==1.21.1

    2、去掉https ssl证书认证

    直接运行ffmpeg.sh脚本会报 ssl证书认证问题,需要修改脚本,添加去除认证参数。

    具体操作如下:

     打开ffmpeg.sh 找到HTTPIE_COMMAND 定义处,添加字段:--verify,具体修改为:

    HTTPIE_COMMAND="http  --verify=no  --check-status"

    三、启动ffmpeg.sh推流

    启动命令为:

    //记着把xx.xx字段换成自己的ip
    SERVER_URL=https://xx.xx.xx.xx:4443 ROOM_ID=u0y6t9dt MEDIA_FILE=./live_video.mp4 ./ffmpeg.sh
    
    

     记着把url地址 和 ROOM_ID 换成自己的 ,可以通过web url看到room_id

    运行效果如下图:

    四、调试c++层代码

    mediasoup会根据当前服务cpu核数确定启动几个mediasoup-worker,具体见:server/config.js 文件。

         mediasoup :
         {
            // Number of mediasoup workers to launch.
           //numWorkers : Object.keys(os.cpus()).length, //基于cpu核数创建mediasoup-worker
           numWorkers :1,
           // mediasoup WorkerSettings.
          } 

    启动多个mediasoup-worker后,会根据负载均匀把用户分配到不同的woker上,这样调试时不知道用户被分配到哪个worker上。所以,为了调试方便,可以把numWokers改为1,这样用户肯定就在当前启动的worker上了。

    1、获得worker 进程id

     ps -ef|grep mediasoup-worker

    如图,进程id为13888.

    2、通过gdb调试该进程

    gdb mediasoup-worker 13888

    设置断点

     b  PlainTransport.cpp:756

    继续运行命令

    c  (字符c)

    断点响应后,查看调用堆栈信息,命令

    bt

    展开全文
  • Mediasoup Overview

    2020-07-10 13:29:20
    Mediasoup Overview 官方 mediasoup 英文文档 非官方 mediasoup 中文文档 暂无中文文档 mediasoup 是一个基于 C++ 实现具有 SFU 的功能库,其 server 端对外提供 Nodejs API。 mediasoup 自身并不提供任何...

    Mediasoup Overview

    mediasoup 是一个基于 C++ 实现具有 SFU 的功能库,其 server 端对外提供 Nodejs API。

    mediasoup 自身并不提供任何信令协议。所以需要应用程序,来确认 mediasoup 客户端与服务端进行通信的方式,用来协商客户端与服务端的相关参数和信息。在大多数情况下,此通信必须是双向的,因此通常需要全双工信道(如 TCP 或 SCTP 通道)。但是,应用程序可以将同一通道重新用于与非 mediasoup 相关的消息交换(例如身份验证过程,聊天消息,文件传输以及应用程序希望实现的任何功能),这样的多路复用策略,可以提升整个系统的性能。

    传统的 VoIP 的语音客户与服务端,信令协议,一般较多采用 SIP 协议,同时通过携带 SDP 数据包,进行 service 与 client 端的 RTP 相关的媒体协商。

    • 传统的 VoIP 针对 RTP 相关的协商内容一般包括:
      • 通道 (Channel),包含 UDP IP 地址、端口以及通讯方式(sendonly, recvonly, sendrecv)
      • 媒体格式及编码 比如 Audio: PCMA/PCMU Vedio: H264/H265

    mediasoup 中,针对 RTP 的相关参数,也是需要协商的。

    Mediasoup RTP Parameters and Capabilities

    • Parameter 参数
      包含两个方向的参数:
      • 与会者 A 作为 producer / sender (媒体数据或者说音视频数据的生产者,以及发送者)发送给 mediasoup 云服务的 RTP Send Parameter
      • 与会者 B 作为 consumer / receiver (媒体数据或者说音视频数据的消费者,以及接收者)接收来自于 mediasoup 云服务的 RTP Receive Parameter
        注意: A 和 B 一般既是生产者也是消费者。
    • Cpabilities 能力
      • mediasoup 服务端,或者与会者 client 端能够接受的,有能力识别并可以顺利处理的 RTP Parameters 描述的媒体,即称之为该端的 RTP Capabilities

    Mediasoup RTP Negotiation Overview

    当创建一个 Mediasoup 的 Router 后,该 Router 提供一系列音视频 codec 来告知 Router 创建者,该 Router 能够处理的音视频。该 codec 能力,将用 RtpCodecCapability 数据结构表示。
    而 Meidasoup 服务端 RTP 能力,定义在了 mediasoup/src/supportedRtpCapabilities.ts 文件中。(不止一个,是一组能力)

    Guidelines for mediasoup-client and libmediasoupclient

    • mediasoup-client: a client of mediasoup wrriten by JavaScript
    • libmediasoupclient: C++ library based on libwebrtc
    • 无论 js 版本还是 c++ 版本的库,内部都可以生产 mediasoup 可接受的 RTP Parameter 对象实例,有效的简化了 mediasoup 客户端的编程。

    Mediasoup C/S 基于 Websocket 的通讯

    • 假设客户端使用 Device 对象提供的方式进行连接。而 mediasoup 服务端已经完成了 Router 的创建。
    • 应用程序可以使用 WebSocket 并将每个经过身份验证的 WebSocket 连接与 peer 端关联。

    客户端的典型流程

    • Device Loading
    • Creating Transports
      mediasoup client 端,需要独立的 WebRTC 连接,去分别处理数据的发送和接收。
      • For sending media
        • 服务端 mediasoup router 中,必须首先创建 WebRTC 连接,方式如下:
          router.createWebRtcTransport(options)
        • 客户端中创建 WebRTC 发送连接,方式如下:
          device.createSendTransport(options)
        • 客户端必须订阅(监听)该 WebRTC 连接的如下事件:
          “connect” & “produce”
      • For receiving media
        • 服务端 router 中,首先创建 WebRTC 连接(方式同上)
        • 客户端中创建 WebRTC 接收连接,方式如下:
          device.createRecvTransport(options)
        • 客户端必须订阅(监听)该连接的 “connect” 事件
      • 以上连接中,如果需要使用 SCTP (AKA DataChannel in WebRTC)(我知道什么是SCTP,但是确实不知道什么是AKA),那么需要进行额外的处理,配置 enableSctp, 设置 SCTP 协议相关参数,给定 SCTP 协议连接池的大小等等。
    • 客户端生产数据 Producing Media
      一旦 sent 连接被建立,客户端就可以根据该连接,"生产"多轨道的音视频数据了。
      • 客户端可以通过比如 navigator.mediaDevices.getUserMedia() API 获取一个轨道。
      • 客户端调用 transport.produce(options)
        • 如果是第一次的 produce 调用这个,会触发 “connect” 事件。
        • produce 调用会触发 “produce” 事件,且该事件相关参数会被发送到服务端,服务端监听到该事件之后,会创建一个 Producer 实例。
      • 客户端会根据服务端的 Producer 实例,进行 produce 处理(Finally transport.produce() will resolve with a Producer instance in client side.这是原文,具体后续要看实验的结果,这种表达方式,不易理解)
    • 客户端 Consuming Media
      一旦 recv 连接被创建,客户端就可以根据该连接,接收并处理媒体数据了。实际过程与 producing 恰恰相反。
      • 第一,客户端必须先要把自己的 RTP 能力告知服务端(此步可以提前)。
      • 第二,服务端会调用如下接口:
        router.canConsume({ producerId, rtpCapabilities })
        作用:确定,某个 producer 的媒体 codec ,该客户端是否支持。
      • 第三,服务端调用 transport.consume(options) 接口,创建 Consumer 实例。
        • 服务端创建 Consumer 时,强烈建议将其设置 paused 置为 true ,然后将该 Consumer 参数传输到客户端,并且一旦客户端创建了其本地 consumer,此时服务单再调用 resume() 方法,激活服务端的 Consumer
      • 第四,服务端调用 transport.consume() 接口,将本地的一些参数,发送给客户端。
        • 首次调用 transport.consume() 接口,会触发一次 “connect” 事件
      • 最后,服务端通过 transport.consume() 接口,与客户端的 Cosumer 进行媒体传输
    SCTP DataChannels 流程与上类似,接口略有差别

    Communicating Actions and Events

    mediasoup 一个核心准则,就是,当主动调用某些实例的方法,进行的一些操作,比如close,并不会触发相应的事件。

    close event

    无论是 server 端还是 client 端,当关闭了以上流程中涉及到的相应的对象时,那么应当及时的将关闭的状态,“通知”到相关方。
    额外的, server 端,相应的对象,需要监听特定的事件,并且需要将该事件及时 notify 给到 client 端,并且,client 端需要进行特定的输出操作。

    • Transport “routerclose”. The client should call close() on the corresponding local transport.
      • transport 的 routerclose 事件,client 端应及时 close() 本端的 transport。
    • Producer “transportclose”. The client should call close() on the corresponding local producer.
    • Consumer “transportclose”. The client should call close() on the corresponding local consumer.
    • Consumer “producerclose”. The client should call close() on the corresponding local consumer.
    • DataProducer “transportclose”. The client should call close() on the corresponding local data producer.
    • DataConsumer “transportclose”. The client should call close() on the corresponding local data consumer.
    • DataConsumer “dataproducerclose”. The client should call close() on the corresponding local data consumer.

    pause event

    • The same happens when pausing a RTP producer or consumer in client or server side. The action must be signaled to the other side.
    • In addition, the server side application should listen for the following events and notify the client about them:
      • Consumer “producerpause”. The client should call pause() on the corresponding local transport.
      • Consumer “producerresume”. The client should call resume() on the corresponding local transport (unless the consumer itself was also paused on purpose).

    SVC or simulcast

    • When simulcast or SVC is in use, the application may be interested in signaling preferred layers and effective layers between client and server side consumers.
      • The server side application sets the consumer preferred layers via consumer.setPreferredLayers().
      • The server side consumer subscribes to the “layerschange” event and notifies the client application about the effective layers being transmitted.

    mediasoup 尝鲜 demo

    环境

    Ubuntu 16.04 LTS
    node: 12.18.2 LTS
    npm: 6.15.5

    • 新建文件夹,作为我们的工作区
      mkdir csrtc

    • 进入文件夹,进行准备工作
      cd csrtc
      touch server.js
      sudo npm init
      (npm init 是一个交互过程,需要确认输入一些信息,根据提示往下走即可)

    • 补充,规避bug
      在 package.json 中添加如下内容,主要是在 stripts 中添加 start 的那一行的内容。

      "scripts": {
         "test": "echo \"Error: no test specified\" && exit 1",
         "start": "sudo node server.js"
      }
      
    • 安装 mediasoup 第三版
      sudo npm install mediasoup@3 --save

    • 验证安装,server.js 中编辑以下内容

        const mediasoup = require("mediasoup");
        console.log(mediasoup.version);
    
    • 运行
      sudo npm start

    能够看到控制台输出 3.6.9

    后续开发

    如果涉及到 C++ 层面 mediasoup 内容的修改,不是添加或者删除文件之类(需要修改gyp,现阶段先尽量避免),后回到工作区执行: sudo npm rebuild 即可实现内部模块的重新编译。
    
    展开全文
  • mediasoup-源码

    2021-03-30 10:15:49
    Mediasoup视频会议 使用mediasoup进行多方视频/音频/屏幕会议的示例网站。 该项目旨在通过一个简单的示例更好地了解mediasoup的工作方式。 该项目在具有许多其他示例。 在检出 运行代码 运行npm install然后npm ...
  • 基于React和媒体汤的WEBRTC 该项目基于React v17和Mediasoup v3进行测试 入门指南 1-运行客户端项目: yarn start 2-运行服务器项目: cd server npm start
  • mediasoup client

    2021-01-06 11:04:35
    MEDIASOUP中文文档(本人尝试翻译,后续陆续更 https://www.freesion.com/article/2266891784/ MEDIASOUP-CLIENT和LIBMEDIASOUPCLIENT的准则 假设我们的JavaScript或C ++客户端应用程序实例化mediasoup-...

    MEDIASOUP中文文档(本人尝试翻译,后续陆续更

    https://www.freesion.com/article/2266891784/

     

    mediasoupClient 学习笔记 【四】 Consumer 数据消费者

    https://blog.csdn.net/ihtml5/article/details/111568543

     

    MEDIASOUP-CLIENT和LIBMEDIASOUPCLIENT的准则

    假设我们的JavaScript或C ++客户端应用程序实例化mediasoup-client Device或libmediasoupclient Device对象以连接到mediasoup router(已在服务器中创建)并通过WebRTC发送和接收媒体。

    mediasoup-client(客户端JavaScript库)和libmediasoupclient(基于libwebrtc的C ++库)均生成适用于mediasoup的RTP参数,从而简化了客户端应用程序的开发。

    信令和 PEERS

     

     

    https://mediasoup.org/documentation/v3/mediasoup/rtp-parameters-and-capabilities/#RtpParameters

     

    RtpParameters

    There are two types of RTP parameters (RtpSendParameters and RtpReceiveParameters), both sharing the following definition:

    Field Type Description Required Default
    mid String The MID RTP extension value as defined in the BUNDLE specification. No  
    codecs Array<RtpCodecParameters> Media and RTX codecs in use. Yes  
    headerExtensions Array<RtpHeaderExtensionParameters> RTP header extensions in use. No [ ]
    encodings Array<RtpEncodingParameters> Transmitted RTP streams and their settings. Yes  
    rtcp RtcpParameters Parameters used for RTCP. No  

    RtpSendParameters

     

     

     

     

     

     

     

     

     

    展开全文
  • mediasoup v3 API

    2021-02-22 15:21:36
    mediasoup The top-level exported module. const mediasoup = require("mediasoup"); // Or using destructuring assignment. const { types, version, observer, createWorker, ...
  • mediasoup 中文文档 mediasoup 中文文档 mediasoup 协议json 汇总 Mediao Soup Demo协议分析 mediasoup v3 api mediasoup v3 API 之三 Producer Consumer & RtpObserver Producer mediasoup v3 API 之二 ...
  • mediasoup windows平台下编译生成的out和Release文件夹,vs2017,不想下载可通过以下命令自己编译 npm i --ignore-scripts cd node_modules/mediasoup python ./worker/scripts/configure.py --format=msvs -R ...
  • mediasoup-demo 实践

    千次阅读 2020-03-14 14:08:27
    mediasoup-demo 作为 WebRTC 入门的 Hello World 演示是一个非常不错的选择。下文中记录搭建 mediasoup-demo 的过程。 1 准备环境 准备 MacOS 或者 Linux 系统环境,安装 npm 环境 更新 npm 环境 npm install -g...
  • mediasoup安装使用

    2020-07-30 19:21:10
    基于mediasoup的多方通话研究(一) https://blog.csdn.net/gupar/article/details/83788934 npm install mediasoup npm install mediasoup-client
  • Mediasoup流媒体服务器架构及特点 前言 WebRtc有两种含义,其一是Google开源的流媒体实时通讯客户端,主要运用于浏览器之间的实时通讯,当然也可以通过提取完成移动端,PC端的通讯;另外WebRtc也是一套规范,这套...
  • mediasoup部署问题

    2021-04-07 20:43:04
    mediasoup部署问题 我的环境 ubuntu 16.04 nodejs更新的12.22 更新命令如下 url -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - sudo apt-get install -y nodejs mediasoup部署时的问题 报错Error...
  • Mediasoup简介及其基本概念

    千次阅读 2020-08-04 21:18:52
    流媒体服务器Mediasoup】 源码中重要类基本概念 、上层代码作用详解、底层C++类关系详解(四) Guo_IT 2020-02-24 17:02:24 1673 收藏 6 版权 目录 前言 MediaSoup的特性 特性一 特性二 特性三 Media...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,062
精华内容 824
关键字:

mediasoup