MediaSoup MediaSoup-demo v3 版本部署测试

环境

系统

软件源

http://mirrors.aliyun.com/            // 即阿里云

NodeJS 与 npm 版本

npm 源

GCC 版本

准备过程

安装 nodejs 以及 npm

sudo apt install nodejs

sudo apt install npm

sudo npm install -g npm  // 全局安装 npm,即强制更新 npm 版本,否则 npm 版本为 3.5.2,即便是 sudo apt upgrade npm 也无济于事

替换 npm 源

sudo npm config set registry https://registry.npm.taobao.org

sudo npm config list

全局安装 n 管理器

sudo npm install n -g

安装最新的nodejs stable版本

sudo n stable

验证安装

sudo node -v

sudo npm -v

安装过程

mediasoup-demo下载安装

git clone https://github.com/versatica/mediasoup-demo.git

cd mediasoup-demo

git checkout v3

安装 server

cd server

sudo npm install

成功如下

安装 app

cd ../app

sudo npm install

(忘记截图了 sorry ...)

说明

如果有国外vpn的情况下,或者访问 Github网络较好的情况下,以上步骤可能非常顺利,否则,以上步骤每一步都会因为网络问题而失败

sudo npm install如果采用Ubuntu环境,那么无论是否是root用户,那么每一个 npm 命令都要带 sudo (以免发生意外的权限问题导致中途失败)

失败了怎么办?

其实,无论是Ubuntu的软件源,还是npm的软件源,我们都已经替换成了国内的景象,阿里云或者淘宝。但是,由于 Github 无国内镜像,所以 git clone 的操作都会耗时较长。

另 npm install 的操作,需要从 Github 上去下载模块源码进行编译,以及需要 clang 工具,下载源码以及clang工具的时候,
都十分耗时,而且会经常失败。

安装过程中,安装 server 失败怎么办?

首先查看,当前目录下是否生成了 node_modules 目录

如果有,删除,删除后,再一次执行 sudo npm install。

以上过程需要不断重试。

但是,也需要一些耐心,耗时会很长很长,5个小时10个小时都是有可能的。同理,app中 npm install 操作如果失败,采用同样的方式重试。

如果以上过程都成功了,那么接下来的操作就相对简单了。

第一,备份。 zip -r mediasoup-demo.zip mediasoup-demo

第二,mediasoup-demo/server 目录下执行:

cp config.example.js config.js

第三,修改 config.js 中的个别配置

1. domain : process.env.DOMAIN || 'localhost',

将 localhost 位置的内容,修改成安装 mediasoup-demo 的ip。

2. listenIp   : '0.0.0.0',

将以上ip 配置为 0.0.0.0 或者 本机ip。

3. 找到以下两个配置块儿:

将其中的 x.x.x.x 以及 y.y.y.y 的 ip 都替换成 本机 ip。
webRtcTransportOptions :
{   
    listenIps :
    [   
        {   
            ip          : process.env.MEDIASOUP_LISTEN_IP || 'x.x.x.x',
            announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP
        }   
    ],  
    initialAvailableOutgoingBitrate : 1000000,
    minimumAvailableOutgoingBitrate : 600000,
    maxSctpMessageSize              : 262144,
    // Additional options that are not part of WebRtcTransportOptions.
    maxIncomingBitrate              : 1500000
},  
// mediasoup PlainTransport options for legacy RTP endpoints (FFmpeg,
// GStreamer).
// See https://mediasoup.org/documentation/v3/mediasoup/api/#PlainTransportOptions
plainTransportOptions :
{   
    listenIp :
    {   
        ip          : process.env.MEDIASOUP_LISTEN_IP || 'y.y.y.y',
        announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP
    },  
    maxSctpMessageSize : 262144
}   

运行

mediasoup-demo/server 目录下依次执行如下命令

sudo mkdir certs

sudo cd certs

sudo openssl genrsa > privkey.pem

sudo openssl req -new -x509 -key privkey.pem > fullchain.pem

mediasoup-demo/server 目录下 执行 sudo npm start

新开一个终端

mediasoup-demo/app 目录下 执行 sudo npm start

在 app start 终端中,如果看到如下内容,表示启动成功

[Browsersync] Access URLs:
 ----------------------------------------------
       Local: https://localhost:3000/?info=true
    External: https://192.168.0.101:3000/?info=true
 ----------------------------------------------
          UI: http://localhost:3001
 UI External: http://localhost:3001
 ----------------------------------------------
[Browsersync] Serving files from: ../server/public
[Browsersync] Watching files...

任意一台局域网内的电脑,都可以使用如下 URL 加会测试了。

https://192.168.0.101:3000/?info=true

注意

在浏览器端登录的时候

第一 尽量采用 Chrome 的浏览器,版本尽量高一些,实验Chrome是80.0版本。

第二 虽然是https 协议,但是,证书是我们自己生成的。所以,浏览器会提示有问题。我们进行进入高级选项,继续访问即可。

第三 我们一定要确保我们的加会PC机有可用的麦克风以及摄像头,并且,浏览器选项登录时,赋予其权限。

查看一些信息

进程信息

pidof npm

pidof mediasoup-demo

ps -ef | grep mediasoup

ps -ef | grep npm

端口占用信息

netstat -anp | grep tcp

netstat -anp | grep udp

netstat -anp | grep mediasoup

退出

到对应的终端 Ctrl+C 即可。

问题

如果是异常退出,如何清理干净?

便用以上的命令去排查。

如果端口是被带 npm 或者 mediasoup 字样的进程占用,那么,kill -9 pid 杀死对应进程。

在无浏览器端有人加会的情况下

mediasoup 不会占用 udp 端口,因为此时 rtp/rtcp 通道(channel)并未被信令协商开启。

mediasoup 会占用若干 tcp 端口,默认的情况下:

如 3000,30001,4443 等。

mediasoup 会占用大量 Unix 域套接字以及PIPE 资源

二者的作用,主要就是 Linux 进程间通讯。

所以 mediasoup 其实是一个多进程的应用。

进一步的查看

pidof mediasoup-demo

pidof mediasoup-worker

拿到对应的 pid 之后,我们可以 lsof -p pid 瞅一瞅看一看,可以大致了解一下 mediasoup 底层到底用了什么样技术。

比如,
1. 多个woker进程(本例中 config.js 中,work的number 我改成了1.如下图)

2. Unix域套接字以及PIPE等做进程间通信

3. EPOLL 进行异步IO触发

4. TCP/UDP 通信

等等

各种命令的查看结果

 

mediasoup-demo 进程

最终效果

注意如何浏览器访问会议的方式

第一个加会人员地址

 https://192.168.0.101:3000/?info=true

加会过程中,第一并不是有效的 https 的连接,因为证书不是权威机构发放的证书,而是我们用openssl手动生成的,所以会有安全提示,用chrome浏览器时,我们选择高级,继续前往即可。成功之后,网页地址栏地址会被修改(server端重定向了)。类似如下:

 https://192.168.0.101:3000/?info=true&roomId=20ah24h

后面加会的人,如果需要加入到同一个会中,就必须采用上面代码 roomId 的 url。两个人才可以通讯。

上面结果图说明

双大屏,实际是一台windows 台式机器,一拖二,是与会者之一。

笔记本,是与会者之二。

鼠标旁红色摄像头,实际是台式机器摄像头。

笔记本,视频数据,不是来自摄像头,而是来自屏幕共享,共享的内容是chrome浏览器的一个默认的空地址栏的标签页。

部署的Ubuntu环境是第三台机器。作为server,结果图中右侧secureCRT中显式的就是ssh连接的该server的情况。

利用 demo项目进行 mediasoup 的源代码学习

在 server 的 node_modules 目录下有各 mediasoup 目录,该目录下,即为 GitHub 上 对应版本(v3)的源代码的 git clone 代码。我们修改了该 mediasoup的代码,那么在就需要回到 server 目录下 执行

sudo npm rebuild

后面,server 下 sudo npm start  后 app 下  sudo npm start 接口。

此时,我们修改了的 mediasoup 的代码,便会在该demo项目中生效。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要在 mediasoup-demo-android-master 中添加 flexfec 代码,您可以按照以下步骤进行: 1. 在 mediasoup-client-android 库中添加 flexfec 相关的代码。具体来说,需要修改 mediasoup-client-android 库中的 webrtc 相关代码,以支持 flexfec。这个过程比较复杂,需要有一定的开发经验和技能。 2. 将修改后的 mediasoup-client-android 库作为依赖项引入 mediasoup-demo-android-master 应用中。在 mediasoup-demo-android-master 的 build.gradle 文件中添加以下代码: ``` dependencies { implementation project(':mediasoup-client-android') } ``` 3. 在代码中使用新的 mediasoup-client-android 库中的 flexfec 相关的 API。具体来说,您需要在 mediasoup-demo-android-master 应用中的 PeerConnectionManager 类中添加以下代码: ``` private void enableFlexfec() { PeerConnectionFactory.Options options = new PeerConnectionFactory.Options(); options.disableEncryption = true; options.disableNetworkMonitor = true; options.enableDtlsSrtp = true; options.useMediaTransport = true; options.enableRtpDataChannel = true; options.flexfecEnabled = true; // enable flexfec factory = PeerConnectionFactory.builder() .setOptions(options) .createPeerConnectionFactory(); } ``` 这个方法将启用 flexfec,您可以将其调用添加到合适的位置。 4. 在 mediasoup-demo-android-master 应用中添加 flexfec 相关的 UI。这个过程包括添加一个开关按钮,以启用或禁用 flexfec,以及在界面上显示 flexfec 相关的统计信息。具体来说,您需要在 mediasoup-demo-android-master 应用中的 CallActivity 类中添加以下代码: ``` private void updateFlexfecEnabled(boolean enabled) { peerConnectionManager.setFlexfecEnabled(enabled); } private void showFlexfecStats() { // show flexfec stats } ``` 这些方法将分别处理开关按钮和统计信息的显示。 需要注意的是,上述步骤需要一定的开发经验和技能。如果您不熟悉 Android 开发和 WebRTC 技术,建议先学习相关知识再进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值