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

如何将本地WebRTC流推送至云端NodeJS服务器生成公网直播URL

WebRTC本地流转公网直播可行方案

你已经拿到了可用的MediaStream对象,不需要修改现有局域网拉流逻辑,只需要新增流推送到公网直播服务的逻辑即可,下面是两种常用落地路径:

方案1:直接使用支持WebRTC输入的开源直播服务器(推荐,改造成本最低)

部署步骤

  • 第一步:在公网服务器部署支持WebRTC推/拉流的直播服务,可选SRS、MediaSoup、Janus等,其中SRS配置最简单,对直播场景适配度最高,默认就支持WebRTC流转HLS、HTTP-FLV等通用直播协议。
  • 第二步:修改你的Ionic应用代码,将已经获取到的event.streams[0]流作为推流源,向公网直播服务发起WebRTC推流,参考代码示例:
// 你已经拿到的远端WebRTC流
const pushStream = event.streams[0];
// 新建推流用的RTCPeerConnection,指向公网SRS服务
const pushPc = new RTCPeerConnection({
  iceServers: [{urls: 'stun:你的公网服务器IP:3478'}]
});
// 将流的音视频轨道加入推流连接
pushStream.getTracks().forEach(track => pushPc.addTrack(track, pushStream));
// 发起offer请求推流
const offer = await pushPc.createOffer();
await pushPc.setLocalDescription(offer);
// 向SRS的WebRTC推流接口请求交换SDP
const res = await fetch('http://你的公网服务器IP:1985/rtc/v1/publish/', {
  method: 'POST',
  body: JSON.stringify({
    api: 'http://你的公网服务器IP:1985/rtc/v1/publish/',
    streamurl: 'webrtc://你的公网服务器IP/live/你的流ID',
    sdp: offer.sdp
  })
});
const data = await res.json();
await pushPc.setRemoteDescription(new RTCSessionDescription({type: 'answer', sdp: data.sdp}));
  • 推流成功后你就可以获得多个公网播放地址:
    • WebRTC低延迟播放地址:webrtc://你的公网服务器IP/live/你的流ID
    • HLS兼容播放地址:http://你的公网服务器IP:8080/live/你的流ID.m3u8
    • HTTP-FLV播放地址:http://你的公网服务器IP:8080/live/你的流ID.flv

方案2:WebRTC转RTMP推流(适合对接现有传统直播CDN)

如果你的公网直播服务仅支持RTMP输入,可以在树莓派端运行ffmpeg进程,直接拉取本地的WebRTC流转换为RTMP协议推送到公网直播服务,不需要修改移动端代码:

  • 树莓派端执行推流命令示例:
ffmpeg -i http://你的树莓派本地IP/对应流地址 -vcodec libx264 -acodec aac -f flv rtmp://你的公网直播服务地址/live/流ID
  • 推流成功后直接使用直播服务提供的公网HLS/FLV播放地址即可。

注意事项

  • 公网服务器需要开放对应端口的出入规则,例如SRS需要开放1985(API端口)、8080(HTTP端口)、8000(WebRTC UDP端口)的安全组和防火墙规则
  • 可在推流接口增加鉴权参数,避免未授权的推流操作
  • 若需要面向大量用户观看,可以将公网直播服务的流对接主流云厂商直播CDN,降低服务器带宽压力

内容的提问来源于stack exchange,提问作者Jason van der Zeeuw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:24:07