<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>http://www.vectel.cn/blog</id>
    <title>矢量 Blog</title>
    <updated>2026-09-16T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="http://www.vectel.cn/blog"/>
    <subtitle>矢量 Blog</subtitle>
    <icon>http://www.vectel.cn/img/logo.svg</icon>
    <entry>
        <title type="html"><![CDATA[Ubuntu系统systemd的使用]]></title>
        <id>http://www.vectel.cn/blog/创建服务实现自启动</id>
        <link href="http://www.vectel.cn/blog/创建服务实现自启动"/>
        <updated>2026-09-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[前言]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="前言">前言<a href="http://www.vectel.cn/blog/%E5%88%9B%E5%BB%BA%E6%9C%8D%E5%8A%A1%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%90%AF%E5%8A%A8#%E5%89%8D%E8%A8%80" class="hash-link" aria-label="前言的直接链接" title="前言的直接链接">​</a></h2>
<p>Ubuntu从 15.04 开始使用systemd作为开机启动和管理所有服务/进程的核心系统。<br></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="服务文件">服务文件<a href="http://www.vectel.cn/blog/%E5%88%9B%E5%BB%BA%E6%9C%8D%E5%8A%A1%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%90%AF%E5%8A%A8#%E6%9C%8D%E5%8A%A1%E6%96%87%E4%BB%B6" class="hash-link" aria-label="服务文件的直接链接" title="服务文件的直接链接">​</a></h2>
<p>一个可用服务文件内容如下，将其拷贝到<code>/etc/systemd/system</code>目录下</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">#filename:mediasoup.service</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">[Unit]</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Description=Mediasoup App</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">After=network.target</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">[Service]</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Type=simple</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">User=root</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">WorkingDirectory=/root/mediasoup/mediasoup-demo/server</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Environment=MEDIASOUP_ANNOUNCED_ADDRESS=vectel.cn</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Environment=NODE_ENV=productio</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Environment=PATH=/root/.nvm/versions/node/v22.23.2/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">ExecStart=/usr/bin/npm start --loglevel=verbose</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Restart=on-failure</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">RestartSec=5</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">StandardOutput=journal</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">StandardError=journal</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">[Install]</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">WantedBy=multi-user.target</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="启用并启动">启用并启动<a href="http://www.vectel.cn/blog/%E5%88%9B%E5%BB%BA%E6%9C%8D%E5%8A%A1%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%90%AF%E5%8A%A8#%E5%90%AF%E7%94%A8%E5%B9%B6%E5%90%AF%E5%8A%A8" class="hash-link" aria-label="启用并启动的直接链接" title="启用并启动的直接链接">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">sudo systemctl daemon-reload</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">sudo systemctl enable --now mediasoup.service</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="查看状态">查看状态<a href="http://www.vectel.cn/blog/%E5%88%9B%E5%BB%BA%E6%9C%8D%E5%8A%A1%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%90%AF%E5%8A%A8#%E6%9F%A5%E7%9C%8B%E7%8A%B6%E6%80%81" class="hash-link" aria-label="查看状态的直接链接" title="查看状态的直接链接">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">systemctl status mediasoup.service</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">journalctl -u mediasoup.service -f      # 实时看日志</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">journalctl -u mediasoup.service -n 100  # 看最近 100 行</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="常用操作">常用操作<a href="http://www.vectel.cn/blog/%E5%88%9B%E5%BB%BA%E6%9C%8D%E5%8A%A1%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%90%AF%E5%8A%A8#%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C" class="hash-link" aria-label="常用操作的直接链接" title="常用操作的直接链接">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">sudo systemctl stop mediasoup</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">sudo systemctl restart mediasoup</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">sudo systemctl disable mediasoup    # 取消开机自启</span><br></span></code></pre></div></div>]]></content>
        <author>
            <name>luke</name>
            <uri>http://vectel.cn</uri>
        </author>
        <category label="service" term="service"/>
        <category label="systemd" term="systemd"/>
        <category label="ubuntu" term="ubuntu"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[tmux]]></title>
        <id>http://www.vectel.cn/blog/tmux 终端复用器的使用</id>
        <link href="http://www.vectel.cn/blog/tmux 终端复用器的使用"/>
        <updated>2026-09-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[前言]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="前言">前言<a href="http://www.vectel.cn/blog/tmux%20%E7%BB%88%E7%AB%AF%E5%A4%8D%E7%94%A8%E5%99%A8%E7%9A%84%E4%BD%BF%E7%94%A8#%E5%89%8D%E8%A8%80" class="hash-link" aria-label="前言的直接链接" title="前言的直接链接">​</a></h2>
<p>在Linux上前台执行某些程序时候，如果连接断开，程序也同时会停止运行，如果使用tmux复用器，可以有效避免此问题，还可以随时离开<br></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="创建">创建<a href="http://www.vectel.cn/blog/tmux%20%E7%BB%88%E7%AB%AF%E5%A4%8D%E7%94%A8%E5%99%A8%E7%9A%84%E4%BD%BF%E7%94%A8#%E5%88%9B%E5%BB%BA" class="hash-link" aria-label="创建的直接链接" title="创建的直接链接">​</a></h2>
<p>tmux new -s session</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="进入">进入<a href="http://www.vectel.cn/blog/tmux%20%E7%BB%88%E7%AB%AF%E5%A4%8D%E7%94%A8%E5%99%A8%E7%9A%84%E4%BD%BF%E7%94%A8#%E8%BF%9B%E5%85%A5" class="hash-link" aria-label="进入的直接链接" title="进入的直接链接">​</a></h2>
<p>tmux attach -t session</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="退出">退出<a href="http://www.vectel.cn/blog/tmux%20%E7%BB%88%E7%AB%AF%E5%A4%8D%E7%94%A8%E5%99%A8%E7%9A%84%E4%BD%BF%E7%94%A8#%E9%80%80%E5%87%BA" class="hash-link" aria-label="退出的直接链接" title="退出的直接链接">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">#不结束</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Ctrl+B D</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">#结束</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Ctrl+D</span><br></span></code></pre></div></div>]]></content>
        <author>
            <name>luke</name>
            <uri>http://vectel.cn</uri>
        </author>
        <category label="linux" term="linux"/>
        <category label="断联" term="断联"/>
        <category label="远程" term="远程"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Guacamole部署]]></title>
        <id>http://www.vectel.cn/blog/部署 Apache Guacamole 远程桌面网关服务，支持 RDP、VNC、SSH、Telnet 等协议</id>
        <link href="http://www.vectel.cn/blog/部署 Apache Guacamole 远程桌面网关服务，支持 RDP、VNC、SSH、Telnet 等协议"/>
        <updated>2026-09-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[前言]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="前言">前言<a href="http://www.vectel.cn/blog/%E9%83%A8%E7%BD%B2%20Apache%20Guacamole%20%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E7%BD%91%E5%85%B3%E6%9C%8D%E5%8A%A1%EF%BC%8C%E6%94%AF%E6%8C%81%20RDP%E3%80%81VNC%E3%80%81SSH%E3%80%81Telnet%20%E7%AD%89%E5%8D%8F%E8%AE%AE#%E5%89%8D%E8%A8%80" class="hash-link" aria-label="前言的直接链接" title="前言的直接链接">​</a></h2>
<p>目的是随时随地的在任何地方都能够操控家里的电脑，在网上搜索了以下解决方案，Guacamole 远程桌面网关服务 可以实现所需的功能<br></p>
<p>Guacamole 是 Apache 出品的免费开源远程桌面网关，通过 Guacamole，无需任何客户端或插件，只要有支持 HTML5 和 JavaScript 的 Web 浏览器即可访问远程资源，不仅支持 Windows RDP 协议，也支持 VNC 协议，甚至还支持 SSH、Telnet 等协议。Guacamole 的核心目标是将桌面保持在云端，从任何地方访问计算机。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="需要的和需要完成的">需要的和需要完成的<a href="http://www.vectel.cn/blog/%E9%83%A8%E7%BD%B2%20Apache%20Guacamole%20%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E7%BD%91%E5%85%B3%E6%9C%8D%E5%8A%A1%EF%BC%8C%E6%94%AF%E6%8C%81%20RDP%E3%80%81VNC%E3%80%81SSH%E3%80%81Telnet%20%E7%AD%89%E5%8D%8F%E8%AE%AE#%E9%9C%80%E8%A6%81%E7%9A%84%E5%92%8C%E9%9C%80%E8%A6%81%E5%AE%8C%E6%88%90%E7%9A%84" class="hash-link" aria-label="需要的和需要完成的的直接链接" title="需要的和需要完成的的直接链接">​</a></h2>
<ul>
<li>部署guacamole-server:主要提供将 RDP等协议与WebSocket协议进行转换</li>
<li>Guacamole Web : Web页面</li>
<li>Tomcat : 提供http服务</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="部署guacamole-server">部署guacamole-server<a href="http://www.vectel.cn/blog/%E9%83%A8%E7%BD%B2%20Apache%20Guacamole%20%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E7%BD%91%E5%85%B3%E6%9C%8D%E5%8A%A1%EF%BC%8C%E6%94%AF%E6%8C%81%20RDP%E3%80%81VNC%E3%80%81SSH%E3%80%81Telnet%20%E7%AD%89%E5%8D%8F%E8%AE%AE#%E9%83%A8%E7%BD%B2guacamole-server" class="hash-link" aria-label="部署guacamole-server的直接链接" title="部署guacamole-server的直接链接">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 下载并解压guacamole-server安装包</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">wget https://archive.apache.org/dist/guacamole/1.5.5/source/guacamole-server-1.5.5.tar.gz</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">tar -xzvf guacamole-server-1.5.5.tar.gz</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 进入目录进行安装</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">cd guacamole-server-1.5.5</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">./configure --with-init-dir=/etc/init.d</span><br></span></code></pre></div></div>
<p>如果输出出现如下的内容，有yes的表示支持，否则就是不支持缺少依赖</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">   Protocol support:</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">      Kubernetes .... yes</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">      RDP ........... yes</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">      SSH ........... yes</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">      Telnet ........ yes</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">      VNC ........... yes</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre></div></div>
<p>可以安装如下依赖，这里就全部进行安装</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">apt install libavcodec-dev libavutil-dev libswscale-dev freerdp2-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libwebsockets-dev libpulse-dev libssl-dev libvorbis-dev libwebp-dev libcairo2-dev libjpeg-turbo8-dev libpng12-dev libtool-bin libossp-uuid-dev</span><br></span></code></pre></div></div>
<p>如果以上都准备好就可以开始编译安装了</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 编译安装</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">make &amp; make install &amp;&amp; ldconfig</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 配置guacamole-server文件</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">mkdir /etc/guacamole/ </span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">cd /etc/guacamole/</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">vim guacd.conf</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 修改成以下内容并保存 :wq</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">[daemon]</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">pid_file = /var/run/guacd.pid</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">log_level = debug</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">[server]</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">bind_host = 127.0.0.1</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">bind_port = 4822</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 启动 guacamole-server</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">/etc/init.d/guacd start</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 输出SUCCESS则成功了</span><br></span></code></pre></div></div>
<p>安装tomcat并启动</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">apt install tomcat9</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 启动Tomcat并设置为开机自启</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">systemctl start tomcat9</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">systemctl enable tomcat9</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 下载 Guacamole Web 应用</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">cd /var/lib/tomcat/webapps/</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">wget https://archive.apache.org/dist/guacamole/1.5.5/binary/guacamole-1.5.5.war -O guacamole.war</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 创建 guacamole.properties</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">vim /etc/guacamole/guacamole.properties</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 添加以下内容并保存 :wq</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># Guacamole 服务器地址</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">guacd-hostname: localhost</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">guacd-port: 4822</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 认证配置（如果使用数据库，请修改）</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">basic-user-mapping: /etc/guacamole/user-mapping.xml</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># end（到这里guacamole.properties的内容就结束了哈，别复制多了）</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 创建 user-mapping.xml（测试用的用户配置）</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">vim /etc/guacamole/user-mapping.xml</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 添加以下内容并保存 :wq（根据自己需要远程的机器信息进行填写）</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">&lt;user-mapping&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    &lt;authorize username="guacadmin" password="guacadmin"&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">        &lt;connection name="Test RDP"&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">            &lt;protocol&gt;rdp&lt;/protocol&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	    &lt;param name="hostname"&gt;192.168.8.206&lt;/param&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">            &lt;param name="port"&gt;3389&lt;/param&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">            &lt;param name="username"&gt;Administrator&lt;/param&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">            &lt;param name="password"&gt;9004&lt;/param&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">            &lt;param name="ignore-cert"&gt;true&lt;/param&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">            &lt;param name="cert-ignore-name-check"&gt;true&lt;/param&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">            &lt;param name="security"&gt;any&lt;/param&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">            &lt;param name="domain"&gt;.&lt;/param&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">        &lt;/connection&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    &lt;/authorize&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">&lt;/user-mapping&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 到这里结束，上面这个文件的里面的内容就是远程桌面连接里面填写的东西</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 创建 GUACAMOLE_HOME 软链接</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">ln -s /etc/guacamole /var/lib/tomcat/.guacamole</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 重启服务</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">systemctl restart tomcat</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">systemctl restart guacd</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 关闭防火墙（哈哈哈，个人机器，仅作测试，生产系统里面别关了啊哈哈哈哈哈）</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">systemctl stop firewalld.service</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 禁用防火墙自启</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">systemctl disable firewalld.service</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">查看防火墙状态</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">systemctl status firewalld.service</span><br></span></code></pre></div></div>
<p>全部启动之后就可以访问了
<a href="http://127.0.0.1:8080/guacamole" target="_blank" rel="noopener noreferrer">http://127.0.0.1:8080/guacamole</a></p>
<pre tabindex="0" class="codeBlockStandalone_MEMb thin-scrollbar codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><code class="codeBlockLines_e6Vv"></code></pre>
<p>输入认证的 guacadmin和密码 guacadmin <br>
如果配置没有问题就可以连接了</p>]]></content>
        <author>
            <name>luke</name>
            <uri>http://vectel.cn</uri>
        </author>
        <category label="linux" term="linux"/>
        <category label="网关" term="网关"/>
        <category label="远程，RDP" term="远程，RDP"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[在Window平台上编译libmediasoupclient]]></title>
        <id>http://www.vectel.cn/blog/windows-libmediasoupclient</id>
        <link href="http://www.vectel.cn/blog/windows-libmediasoupclient"/>
        <updated>2026-09-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[在Window平台如何编译libmediasoupclient和webrtc]]></summary>
        <content type="html"><![CDATA[<p>在Window平台如何编译libmediasoupclient和webrtc</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="前言">前言<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#%E5%89%8D%E8%A8%80" class="hash-link" aria-label="前言的直接链接" title="前言的直接链接">​</a></h2>
<p>由于想创建一个会议或者直播的Demo，所以才来研究一下mediasoup，已经在云服务器上配置完成了mediasoup，已通过终端测试可以进入同一个房间。
之后想使用libmediasoupclient 配合 Qt 完成一个简单的会议功能的软件，主要用于学习和了解mediasoup和WebRTC。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="需要的和需要完成的">需要的和需要完成的<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#%E9%9C%80%E8%A6%81%E7%9A%84%E5%92%8C%E9%9C%80%E8%A6%81%E5%AE%8C%E6%88%90%E7%9A%84" class="hash-link" aria-label="需要的和需要完成的的直接链接" title="需要的和需要完成的的直接链接">​</a></h2>
<ul>
<li>WebRTC : 想要编译libmediasoupclient，那么WebRTC是必须要编译的，而WebRTC作为Google开源的库则需要使用depot_tools 编译工具集</li>
<li>depot_tools : Google</li>
<li>libmediasoupclient :</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="depot_tools-工具集的安装">depot_tools 工具集的安装<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#depot_tools-%E5%B7%A5%E5%85%B7%E9%9B%86%E7%9A%84%E5%AE%89%E8%A3%85" class="hash-link" aria-label="depot_tools 工具集的安装的直接链接" title="depot_tools 工具集的安装的直接链接">​</a></h2>
<p>工具集是需要git工具的，需要先安装git<br>
<a></a><a href="https://git-scm.com/install/windows" target="_blank" rel="noopener noreferrer">https://git-scm.com/install/windows</a></p>
<p>从谷歌官方地址下载 depot_tools <br></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git</span><br></span></code></pre></div></div>
<p>depot_tools 是一套Python脚本工具，不需要编译。<br>
设置depot_tools 环境变量 设置系统环境变量 Path 增加一个 depot_tools的目录</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="webrtc编译">WebRTC编译<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#webrtc%E7%BC%96%E8%AF%91" class="hash-link" aria-label="WebRTC编译的直接链接" title="WebRTC编译的直接链接">​</a></h2>
<p>打开PowerShell 寻找一个合适的地方创建一个目录 webrtc</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">cd webrtc</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="配置webrtc源码库">配置webrtc源码库<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#%E9%85%8D%E7%BD%AEwebrtc%E6%BA%90%E7%A0%81%E5%BA%93" class="hash-link" aria-label="配置webrtc源码库的直接链接" title="配置webrtc源码库的直接链接">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">gclient config --name src https://webrtc.googlesource.com/src.git </span><br></span></code></pre></div></div>
<p>配置指定的分支代码</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">https://webrtc.googlesource.com/src.git@refs/branch-heads/7339</span><br></span></code></pre></div></div>
<p>初次安装git可能会遇到没有配置 gitconfig情况<br>
可以先进行配置，不需要账户</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">git config --global user.name "example"</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">git config --global user.email "example@163.com"</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">git config --global core.autocrlf false</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">git config --global core.filemode false</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">git config --global core.fscache true</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">git config --global core.preloadindex true</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">git config --global depot-tools.allowGlobalGitConfig true</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="同步源码">同步源码<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#%E5%90%8C%E6%AD%A5%E6%BA%90%E7%A0%81" class="hash-link" aria-label="同步源码的直接链接" title="同步源码的直接链接">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">gclient sync</span><br></span></code></pre></div></div>
<p>同步代码，代码很大，耐心等待<br></p>
<p>如果使用的是仓库是<a></a><a href="https://chromium.googlesource.com/webrtc.git" target="_blank" rel="noopener noreferrer">https://chromium.googlesource.com/webrtc.git</a> 
可以使用下面的命令来获取指定分支信息</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">#可以查询所有的分支</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">git ls-remote https://webrtc.googlesource.com/src.git refs/branch-heads/*</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">cd src</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">git fetch origin refs/branch-heads/7339 </span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">git checkout branch-heads/7339</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">#重新同步安装依赖</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">cd ..</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">gclient sync </span><br></span></code></pre></div></div>
<p>更换分支之后 建议使用 <code>gclient sync -D</code> 这样会将不用依赖删除  <br>
并且设置一个DEPOT_TOOLS_WIN_TOOLCHAIN变量 来使用本地的编译环境，这样就不会从下载了<br></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">set DEPOT_TOOLS_WIN_TOOLCHAIN=0 #此设置需要在cmd中执行 </span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">$env:DEPOT_TOOLS_WIN_TOOLCHAIN = "0"  #此命令可以在powershell中执行</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">VS2022安装时需要安装WindowSDK 10  / 11 （10.0.22621.0）</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="编译">编译<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#%E7%BC%96%E8%AF%91" class="hash-link" aria-label="编译的直接链接" title="编译的直接链接">​</a></h3>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="生成工程文件">生成工程文件<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#%E7%94%9F%E6%88%90%E5%B7%A5%E7%A8%8B%E6%96%87%E4%BB%B6" class="hash-link" aria-label="生成工程文件的直接链接" title="生成工程文件的直接链接">​</a></h4>
<p>编译首先需要生成工程文件。WebRTC默认使用Ninja作为编译系统，Ninja工程文件通过GN生成，由于我们需要使用VS进行代码编辑调试等，所以使用GN生成Ninja工程时需要配置--ide=vs生成VS的工程文件。
通过如下命令生成工程文件（Debug编译，工程文件位于out\Default目录下）</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">cd src</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># gn gen --ide=vs2022 out/Debug --args="is_debug=true target_os=\"win\" target_cpu=\"x64\"" #按需引导</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">gn gen --ide=vs2022 out/Default</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">#如果需要release编译 则需要</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">gn gen --ide=vs2022 out/Default --args="is_debug=false"</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">#如果不想使用默认编译参数，可以使用gn args out/Default --list查看当前编译参数</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">gn gen --ide=vs2022 out/Default --args="use_rtti=true is_clang=false rtc_build_tools=false rtc_include_tests=false rtc_build_examples=false"</span><br></span></code></pre></div></div>
<p>输出如下就是成功了</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">Generating Visual Studio projects took 5678ms</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Generating compile_commands took 380ms</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Done. Made 2575 targets from 382 files in 25323ms</span><br></span></code></pre></div></div>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="工程文件编译">工程文件编译<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#%E5%B7%A5%E7%A8%8B%E6%96%87%E4%BB%B6%E7%BC%96%E8%AF%91" class="hash-link" aria-label="工程文件编译的直接链接" title="工程文件编译的直接链接">​</a></h4>
<p>生成工程文件后，有两种方式构建工程</p>
<h5 class="anchor anchorWithStickyNavbar_LWe7" id="使用命令方式">使用命令方式<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#%E4%BD%BF%E7%94%A8%E5%91%BD%E4%BB%A4%E6%96%B9%E5%BC%8F" class="hash-link" aria-label="使用命令方式的直接链接" title="使用命令方式的直接链接">​</a></h5>
<p>就可以在src目录下执行编译命令：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">cd src</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">ninja -C out/Default</span><br></span></code></pre></div></div>
<h5 class="anchor anchorWithStickyNavbar_LWe7" id="使用visual-studio-打开">使用visual studio 打开<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#%E4%BD%BF%E7%94%A8visual-studio-%E6%89%93%E5%BC%80" class="hash-link" aria-label="使用visual studio 打开的直接链接" title="使用visual studio 打开的直接链接">​</a></h5>
<p>其中 nijia需要配置环境变量
ninja --version
where ninja</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="libmediasoupclient">libmediasoupclient<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#libmediasoupclient" class="hash-link" aria-label="libmediasoupclient的直接链接" title="libmediasoupclient的直接链接">​</a></h4>
<p>版本需要匹配</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">libmediasoupclient: webrtc-m140</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">webrtc:             branch-heads/7339</span><br></span></code></pre></div></div>
<p>使用如下的命令生成sln文件，进行编译</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">cmake . -Bbuild   -DLIBWEBRTC_INCLUDE_PATH:PATH=D:\\work\\webrtc\\src   -DLIBWEBRTC_BINARY_PATH:PATH=D:\\work\\webrtc\\src\\out\\Release\\obj   -DCMAKE_TOOLCHAIN_FILE:PATH=D:\\work\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5</span><br></span></code></pre></div></div>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="demo">demo<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#demo" class="hash-link" aria-label="demo的直接链接" title="demo的直接链接">​</a></h4>
<p>libmediasoupclient 在webrtc源码中有个demo，但是时macOS平台的需要修改才行<br></p>
<p>我最终使用如下命令创建的sln文件</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">cmake . -Bbuild -DLIBWEBRTC_INCLUDE_PATH=D:/work/webrtc/src -DLIBWEBRTC_BINARY_PATH=D:/work/webrtc/src/out/Release/obj -DMEDIASOUPCLIENT_BUILD_DEMO=ON -DCMAKE_TOOLCHAIN_FILE=D:\work\vcpkg\scripts\buildsystems\vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -DMBEDTLS_INCLUDE_DIRS=D:/work/vcpkg/installed/x64-windows/include -DMBEDTLS_LIBRARY=D:/work/vcpkg/installed/x64-windows-static/lib/mbedtls.lib -DMBEDX509_LIBRARY=D:/work/vcpkg/installed/x64-windows-static/lib/mbedx509.lib -DMBEDCRYPTO_LIBRARY=D:/work/vcpkg/installed/x64-windows-static/lib/mbedcrypto.lib -DZLIB_INCLUDE_DIR=D:/work/vcpkg/installed/x64-windows/include -DZLIB_LIBRARY=D:/work/vcpkg/installed/x64-windows/lib/z.lib</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre></div></div>
<p>修改完成后的CMakeLists.txt</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">cmake_minimum_required(VERSION 3.14)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">include(FetchContent)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># C++ standard requirements.</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">set(CMAKE_CXX_STANDARD 20)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">set(CMAKE_CXX_STANDARD_REQUIRED ON)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># nlohmann/json - 必须在 ProtooClient 之前</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">message(STATUS "\nFetching nlohmann/json...\n")</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">FetchContent_Declare(</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    json</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    GIT_REPOSITORY https://github.com/nlohmann/json.git</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    GIT_TAG        v3.11.2</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">FetchContent_MakeAvailable(json)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># ixwebsocket — WebSocket client with TLS support</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">message(STATUS "\nFetching ixwebsocket...\n")</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">FetchContent_Declare(</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	ixwebsocket</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	GIT_REPOSITORY https://github.com/machinezone/IXWebSocket.git</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	GIT_TAG        v11.4.5</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">set(IXWEBSOCKET_USE_MBED_TLS_MIN_VERSION_3 ON CACHE BOOL "Use mbedTLS v3.x" FORCE)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">set(USE_TLS ON CACHE BOOL "Enable TLS in ixwebsocket" FORCE)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">FetchContent_MakeAvailable(ixwebsocket)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># CLI11 — command-line argument parsing</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">message(STATUS "\nFetching CLI11...\n")</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">FetchContent_Declare(</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	cli11</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	GIT_REPOSITORY https://github.com/CLIUtils/CLI11.git</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	GIT_TAG        v2.4.2</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">FetchContent_MakeAvailable(cli11)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 源文件 - Windows 使用 CaptureVideoSource.hpp 而不是 AVF</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">set(DEMO_SOURCES</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    src/ProtooClient.cpp</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    src/RoomClient.cpp</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    src/main.cpp</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    include/ProtooClient.hpp</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    include/RoomClient.hpp</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">if(APPLE)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    list(APPEND DEMO_SOURCES src/AVFCaptureVideoSource.mm include/AVFCaptureVideoSource.hpp)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">else()</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    list(APPEND DEMO_SOURCES src/CaptureVideoSource.hpp)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">endif()</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">add_executable(mediasoupclient_demo ${DEMO_SOURCES})</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">target_compile_definitions(mediasoupclient_demo PRIVATE</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	$&lt;$&lt;PLATFORM_ID:Windows&gt;:NOMINMAX&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	$&lt;$&lt;PLATFORM_ID:Windows&gt;:WIN32_LEAN_AND_MEAN&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	$&lt;$&lt;PLATFORM_ID:Windows&gt;:WEBRTC_WIN&gt;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	NDEBUG</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">target_include_directories(mediasoupclient_demo PRIVATE</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	include</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	${mediasoupclient_SOURCE_DIR}/include</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	../include</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    ${LIBWEBRTC_INCLUDE_PATH}</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	${LIBWEBRTC_INCLUDE_PATH}/third_party/libyuv/include</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	${LIBWEBRTC_INCLUDE_PATH}/third_party/abseil-cpp      </span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    ${LIBWEBRTC_INCLUDE_PATH}/third_party/abseil-cpp/absl </span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    ${LIBWEBRTC_INCLUDE_PATH}/third_party/boringssl/src/include  </span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	${json_SOURCE_DIR}/include/nlohmann</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	${json_SOURCE_DIR}/include</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">if(APPLE)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	find_library(APPLICATION_SERVICES ApplicationServices)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	find_library(AUDIO_TOOLBOX AudioToolbox)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	find_library(AVFOUNDATION AVFoundation)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	find_library(CORE_AUDIO CoreAudio)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	find_library(CORE_FOUNDATION Foundation)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	find_library(CORE_MEDIA CoreMedia)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	find_library(CORE_VIDEO CoreVideo)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	find_library(SECURITY Security)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	target_link_libraries(mediasoupclient_demo PRIVATE</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		${APPLICATION_SERVICES}</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		${AUDIO_TOOLBOX}</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		${AVFOUNDATION}</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		${CORE_AUDIO}</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		${CORE_FOUNDATION}</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		${CORE_MEDIA}</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		${CORE_VIDEO}</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		${SECURITY}</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	set_target_properties(mediasoupclient_demo PROPERTIES</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		MACOSX_BUNDLE TRUE</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">endif()</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">if(UNIX)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	find_package(Threads REQUIRED)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	target_link_libraries(mediasoupclient_demo PRIVATE Threads::Threads)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">endif()</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 为特定目标添加库搜索路径</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">target_link_directories(mediasoupclient_demo PRIVATE</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	D:/work/libmediasoupclient/build/Release</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">if(MSVC)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    # 1. 统一运行时为 /MT</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$&lt;$&lt;CONFIG:Release&gt;:Release&gt;")</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">endif()</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">target_link_libraries(mediasoupclient_demo PRIVATE</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	mediasoupclient</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	ixwebsocket</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	CLI11::CLI11</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	${CMAKE_DL_LIBS}</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	winmm          # timeGetTime, timeBeginPeriod, timeEndPeriod</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    ws2_32         # socket</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    ole32          # COM</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    oleaut32       # COM</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    bcrypt         # BCryptGenRandom</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    crypt32        # 加密</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    secur32        # 安全</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    iphlpapi       # GetAdaptersAddresses</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    strmiids       # CLSID_CWMAudioAEC, IID_IMediaObject</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    dmoguids       # 更多 DMO GUIDs</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    wmcodecdspuuid # Windows Media 编解码器</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    mfuuid         # Media Foundation</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	legacy_stdio_definitions  # ← 添加这个</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    #ucrt                    # ← UCRT (Universal C Runtime)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    #vcruntime              # ← VS C++ 运行时</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	oldnames</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	mfuuid</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	msdmo</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	mfplat</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># libwebrtc is added after add_subdirectory in the parent scope,</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># so we link it explicitly here.</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">target_link_libraries(mediasoupclient_demo PUBLIC</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	${LIBWEBRTC_BINARY_PATH}/webrtc${CMAKE_STATIC_LIBRARY_SUFFIX}</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre></div></div>
<p>使用以上命令生成的工程 使用Release版本<br>
博主的webrtc，libmedisoupclient,libsdptransform,和其相关的库均使用MT Release进行编译</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">.\mediasoupclient_demo.exe   --ws-url    wss://vectel.cn:4443   --origin https://vectel.cn:4443</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="遗留问题">遗留问题<a href="http://www.vectel.cn/blog/windows-libmediasoupclient#%E9%81%97%E7%95%99%E9%97%AE%E9%A2%98" class="hash-link" aria-label="遗留问题的直接链接" title="遗留问题的直接链接">​</a></h3>
<p>客户端第一个进入会议，当其他参与者进入会议室，处理音频订阅时，麦克风突然关闭了。未排查到原因。<br>
使用自采集依然无法解决，只是随后会迅速恢复，目前只是不影响使用。</p>]]></content>
        <author>
            <name>luke</name>
            <uri>http://vectel.cn</uri>
        </author>
        <category label="windows" term="windows"/>
        <category label="libmediasoupclient" term="libmediasoupclient"/>
        <category label="webrtc" term="webrtc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[在WSL上安装Node.js]]></title>
        <id>http://www.vectel.cn/blog/setup-nodejs-on-wsl</id>
        <link href="http://www.vectel.cn/blog/setup-nodejs-on-wsl"/>
        <updated>2026-08-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[如何在wsl上安装node.js 环境]]></summary>
        <content type="html"><![CDATA[<p>如何在wsl上安装node.js 环境</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="安装node-js-的管理器-nvm">安装Node js 的管理器 nvm<a href="http://www.vectel.cn/blog/setup-nodejs-on-wsl#%E5%AE%89%E8%A3%85node-js-%E7%9A%84%E7%AE%A1%E7%90%86%E5%99%A8-nvm" class="hash-link" aria-label="安装Node js 的管理器 nvm的直接链接" title="安装Node js 的管理器 nvm的直接链接">​</a></h2>
<p>nvm 是 Node Version Manager 的缩写，它是一个用于管理 Node.js 版本的命令行工具。通过 nvm，你可以在同一台机器上安装和切换多个 Node.js 版本，这对于测试在不同 Node.js 版本上的应用程序兼容性非常有用。</p>
<p>在 Linux 上安装 nvm，你可以使用 cURL 或 Wget 运行安装脚本。以下是步骤：</p>
<p>打开你的终端。
使用 cURL 下载安装脚本：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash</span><br></span></code></pre></div></div>
<p>或者使用 Wget：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash</span><br></span></code></pre></div></div>
<p>该脚本会将 nvm 仓库克隆到 ~/.nvm，并将源行添加到你的配置文件（~/.bash_profile，~/.zshrc，~/.profile 或 ~/.bashrc）。</p>
<p>关闭你的终端并打开一个新的终端。</p>
<p>通过检查 nvm 的版本来验证安装是否成功：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">nvm --version</span><br></span></code></pre></div></div>
<p>记得将 v0.38.0 替换为最新可用的版本。</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="安装nodejs">安装NodeJS<a href="http://www.vectel.cn/blog/setup-nodejs-on-wsl#%E5%AE%89%E8%A3%85nodejs" class="hash-link" aria-label="安装NodeJS的直接链接" title="安装NodeJS的直接链接">​</a></h2>
<p>使用nvm命令安装NodeJS</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">nvm install 18</span><br></span></code></pre></div></div>
<p>切换Node js版本</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">nvm use 18</span><br></span></code></pre></div></div>
<p>检查已经安装的Node js</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">nvm list</span><br></span></code></pre></div></div>
<p>检查node js 版本</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">node -v</span><br></span></code></pre></div></div>]]></content>
        <author>
            <name>luke</name>
            <uri>http://vectel.cn</uri>
        </author>
        <category label="wsl" term="wsl"/>
        <category label="nodejs" term="nodejs"/>
        <category label="nvm" term="nvm"/>
        <category label="npm" term="npm"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[mediasoup]]></title>
        <id>http://www.vectel.cn/blog/Linux Mediasoup</id>
        <link href="http://www.vectel.cn/blog/Linux Mediasoup"/>
        <updated>2026-08-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[前言]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="前言">前言<a href="http://www.vectel.cn/blog/Linux%20Mediasoup#%E5%89%8D%E8%A8%80" class="hash-link" aria-label="前言的直接链接" title="前言的直接链接">​</a></h2>
<p>研究mediasoup多媒体框架<br></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="拉取">拉取<a href="http://www.vectel.cn/blog/Linux%20Mediasoup#%E6%8B%89%E5%8F%96" class="hash-link" aria-label="拉取的直接链接" title="拉��取的直接链接">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">git clone https://github.com/versatica/mediasoup-demo.git</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">cd mediasoup-demo</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">cd server</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">npm install</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">#如果内存不够可以使用临时swap</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">sudo dd if=/dev/zero of=/swapfile bs=64M count=32 #2G</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">sudo mkswap /swapfile</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">sudo swapon /swapfile</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># 安装完成后关闭 swap</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">sudo swapoff /swapfile</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">sudo rm /swapfile</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="安装完成后如何启动服务和app">安装完成后如何启动服务和app<a href="http://www.vectel.cn/blog/Linux%20Mediasoup#%E5%AE%89%E8%A3%85%E5%AE%8C%E6%88%90%E5%90%8E%E5%A6%82%E4%BD%95%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1%E5%92%8Capp" class="hash-link" aria-label="安装完成后如何启动服务和app的直接链接" title="安装完成后如何启动服务和app的直接链接">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">//启动APP</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">$env:VITE_LISTEN_PORT=3000; npm start -- --host 0.0.0.0</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">启动media server</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">MEDIASOUP_ANNOUNCED_ADDRESS=vectel.cn npm start --loglevel=verbose</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre></div></div>]]></content>
        <author>
            <name>luke</name>
            <uri>http://vectel.cn</uri>
        </author>
        <category label="linux" term="linux"/>
        <category label="mediasoup" term="mediasoup"/>
        <category label="app" term="app"/>
    </entry>
</feed>