当前位置: 首页 > news >正文

基于 MediaMTX 的微信小程序 Web 实时音视频实操方案

我现在有一个微信小程序,里面有个实时音视频功能,目前用的是腾讯云的。考虑到成本问题,我想自己基于开源的livekit 搭建一个代替腾讯云的实时音视频。请问方案是否可行,如果可行,帮我写出详细的落地方案。

很现实的一个需求!毕竟TX实时音视频的费用是越来越贵!!
向 ChatGPT 提问的时候,我只知道一个 Livekit,根本不知道 MediaMTX

实际使用实时音视频场景 主要是医生PC端,医生小程序端,患者小程序端。可以继续沿用live-pusher 和live-player。给出详细的实施方案。目前使用的是腾讯的实时音视频 trtc的方案 https://cloud.tencent.com/document/product/647/116548

二、ChatGPT 提供的几种方案对比

方案 A:全部使用 MediaMTX(推荐)

医生端 (Web)  ---> WebRTC 推流 ---> MediaMTX ---> RTMP/FLV ---> 小程序↑                                                   ↑FLV 播放 <--- MediaMTX <--- RTMP 推流 <--- 小程序

优点:

  • MediaMTX 原生支持 WebRTC → RTMP/FLV 转换
  • 配置简单,一个服务器搞定
  • 不需要 LiveKit

缺点:

  • 小程序只能使用 RTMP/FLV,延迟略高
  • 不支持复杂多房间逻辑

方案 B:全部使用 LiveKit(最佳体验)

医生端 (Web)  ---> WebRTC ---> LiveKit <---> WebRTC ---> 小程序↑                                                  ↑WebRTC 接收 <--- LiveKit <---> WebRTC <--- 小程序

优点:

  • 端到端低延迟,体验最好
  • 多人会议和房间管理方便

缺点:

  • 小程序无法直接使用 live-pusher mode="RTC" 连接
  • 需要 TRTC SDK 或自研 WebRTC adapter
  • 实现复杂,生产环境门槛高

方案 C:简化 RTMP + FFmpeg(快速验证)

医生端 (Web) ---> WebM ---> 后端 FFmpeg ---> RTMP ---> MediaMTX ---> FLV ---> 小程序↑                                                             ↑FLV 播放 <--- MediaMTX <--- RTMP <--- live-pusher (小程序)

优点:

  • 实现简单,可快速验证
  • 利用现有 MediaMTX,无需 LiveKit

缺点:

  • 后端依赖 FFmpeg
  • 延迟较高(2-5 秒)

三、本地快速验证步骤(方案 C)

  1. 部署 MediaMTX

    docker-compose up -d
    
    • 暴露端口:7880 (WebRTC/HTTP),1935 (RTMP),8889 (FLV)
  2. 启动 Node 后端
    提供 RTMP 推流和 FLV 播放地址

    cd server
    npm install
    node server.js
    

    如果提示端口被占

    netstat -ano | findstr ":<端口号>"
    

    结束 PID 进程

    taskkill /pid <PID号> /f
    
  3. 启动医生端 React 前端

    cd web-doctor
    npm install
    npm run dev
    
    • 浏览器访问 http://localhost:5173
    • 通过 WebRTC 推流到 MediaMTX
    • 使用 flv.js 播放患者端 RTMP 推来的流
  4. 小程序患者端

    • 使用 live-pusher 推 RTMP 到 MediaMTX
    • 使用 live-player 播 FLV

四、实操

本地进行方案 调试过程,开始想着是方案C 最后走到了 A。

初始代码是ChatGPT直接生成的一个zip包,这点很赞,不像DeepSeek,给的链接或是包都是虚构的。。。

文件结构

livekit-demo/
├── docker-compose.yml        # 启动 LiveKit + MediaMTX
├── server/
│   ├── package.json
│   ├── server.js             # Node 后端
└── miniprogram/├── app.js├── app.json├── pages/│   └── index/│       ├── index.wxml│       ├── index.js│       └── index.wxss

docker-compose.yml (放在 livekit-demo 根目录)

version: '3.8'services:livekit:image: livekit/livekit-servercontainer_name: livekitports:- "7880:7880"- "7881:7881/tcp"- "7882:7882/udp"
http://www.dtcms.com/a/490000.html

相关文章:

  • 《UDP网络编程完全指南:从套接字到高并发聊天室实战》
  • 关于 云服务器WindowsServer2016双击无法运行可执行程序 的解决方法
  • LeetCode每日一题——在区间范围内统计奇数数目
  • Linux内核架构浅谈43-Linux slab分配器:小内存块分配与内核对象缓存机制
  • 最好的免费发布网站wordpress 文章二维码
  • Spring Boot 3零基础教程,Spring Boot 日志格式,笔记18
  • mybatis-plus分页插件使用
  • 福建住房和城乡建设网站网站做提示框
  • 李宏毅机器学习笔记24
  • Leetcode每日一练--28
  • Vue Router 路由元信息(meta)详解
  • 列表标签之无序标签(本文为个人学习笔记,内容整理自哔哩哔哩UP主【非学者勿扰】的公开课程。 > 所有知识点归属原作者,仅作非商业用途分享)
  • sk13.【scikit-learn基础】-- 自定义模型与功能
  • (Spring)Spring Boot 中 @Valid 与全局异常处理器的联系详解
  • 数据库数据类型,数据值类型,字符串类型,日期类型详解
  • 怎么写网站规划方案买链接做网站 利润高吗
  • SAP MM物料主数据锁定及解锁接口分享
  • [FSCalendar] 可定制的iOS日历组件 | docs | Interface Builder
  • 中兴B860AV5.1-M2/B860AV5.2M_安卓9_S905L3SB_支持外置WIFI_线刷固件包
  • AI 模型部署体系全景:从 PyTorch 到 RKNN 的嵌入式类比解析
  • 全球汽车紧固件产业进入关键转型期,中国供应链加速融入世界市场
  • 17网站一起做网店下载自动发卡网站建设
  • PHP 类型比较
  • oracle:To_char
  • MySQL 数据库核心操作全解析:从创建到备份与连接管理
  • 环境函数 SYS_CONTEXT 在 DM8 与 Oracle 中的差异
  • 长春怎么做网站重庆网站建设aiyom
  • Linux中的管道与重定向:深入理解两者的本质区别
  • 上传OSS服务器图片文件视频(使用elemenplus上传组件)
  • 全面适配iOS 26液态玻璃,基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.2发布