如何在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 端关键实现步骤
- 捕获本地媒体流并生成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); - 发送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, ); - 处理服务器响应完成连接
服务器返回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
相关产品推荐
相关产品推荐

