You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中接收MediaMTX的WebRTC流?WHIP对接细节咨询

Flutter 移动端通过 WHIP 对接 MediaMTX 服务器的实操细节

一、核心端点信息

MediaMTX 启用 WHIP 后,默认推流端点格式为:http://<服务器IP>:8888/whip/<自定义流名称>

  • 示例:服务器IP是192.168.1.100,流名称设为mobile_stream,完整地址就是http://192.168.1.100:8888/whip/mobile_stream
  • 请求规则:必须用POST方法,请求头需携带Content-Type: application/sdp,请求体是本地生成的SDP内容

二、Flutter 端关键实现步骤

  1. 捕获本地媒体流并生成SDP Offer
    借助flutter_webrtc插件完成媒体捕获和PeerConnection初始化:
    final mediaConstraints = <String, dynamic>{
      'audio': true,
      'video': {
        'width': 1280,
        'height': 720,
        'facingMode': 'user',
      }
    };
    final localStream = await navigator.mediaDevices.getUserMedia(mediaConstraints);
    final pc = createPeerConnection({});
    localStream.getTracks().forEach((track) => pc.addTrack(track, localStream));
    final offer = await pc.createOffer();
    await pc.setLocalDescription(offer);
    
  2. 发送WHIP推流请求
    将生成的SDP作为请求体,发送到MediaMTX的WHIP端点:
    final url = Uri.parse('http://<服务器IP>:8888/whip/mobile_stream');
    final response = await http.post(
      url,
      headers: {'Content-Type': 'application/sdp'},
      body: pc.localDescription?.sdp,
    );
    
  3. 处理服务器响应完成连接
    服务器返回201状态码时,解析响应体中的远程SDP并设置到PeerConnection:
    if (response.statusCode == 201) {
      final remoteSdp = response.body;
      await pc.setRemoteDescription(RTCSessionDescription(remoteSdp, 'answer'));
    }
    

三、MediaMTX 服务器配置要点

确保mediamtx.yml配置文件中开启WHIP支持:

paths:
  all:
    source: whip  # 指定使用WHIP作为推流源
    sourceWIPH: false  # 仅推流场景可关闭WIPH拉流功能

四、相关资料获取渠道

  • MediaMTX 官方仓库的examples目录:包含Web端WHIP推流示例,可参考逻辑移植到Flutter
  • flutter_webrtc插件官方示例:覆盖移动端媒体捕获、PeerConnection处理的完整流程
  • MediaMTX 官方配置文件注释:里面藏着不少WHIP相关的参数细节,比通用文档更具体

内容的提问来源于stack exchange,提问作者mrRandom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:17:10