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

树莓派经服务器向移动端(安卓/iOS)推送HLS直播流的技术问询

Hey there! 既然你已经搞定了局域网内树莓派到安卓的直播流传输,那公网中转的核心逻辑就是把链路改成「树莓派→公网中转服务器→安卓设备」,用成熟的流媒体协议完成流的推送与拉取。下面我分步骤给你拆解具体实现:

一、先搞定中转服务器的基础配置
  • 你需要一台带公网IP的云服务器(轻量应用服务器就行,低配置完全够用)
  • 安装nginx-rtmp-module作为流媒体中转服务,它轻量、配置简单,完美适配RTMP/HLS这类直播协议:
    1. 先安装nginx,再编译加入rtmp模块(或者直接用带rtmp的预编译包)
    2. 修改nginx配置文件(nginx.conf),在http代码块外添加RTMP服务配置:
      rtmp {
          server {
              listen 1935; # RTMP默认端口,必须在服务器防火墙+安全组开放
              chunk_size 4096;
      
              application live {
                  live on; # 开启直播模式
                  hls on; # 开启HLS模式,适配移动端拉流
                  hls_path /usr/local/nginx/html/hls; # 存放HLS切片的路径,需提前创建并赋权
                  hls_fragment 5s; # 切片时长,数值越小延迟越低
                  hls_playlist_length 15s; # 播放列表保留的切片数量
              }
          }
      }
      
    3. 重启nginx服务,确保RTMP模块正常运行
二、树莓派端推流到中转服务器
  • 你之前应该已经用raspivid+ffmpeg做过局域网推流,现在只需要把推流目标地址改成中转服务器的公网IP即可:
    原来的局域网推流命令大概是这样:
    raspivid -o - -t 0 -w 1280 -h 720 -fps 25 | ffmpeg -i - -vcodec copy -acodec aac -f flv rtmp://局域网安卓IP/live/stream
    
    现在替换成中转服务器的公网地址:
    raspivid -o - -t 0 -w 1280 -h 720 -fps 25 | ffmpeg -i - -vcodec copy -acodec aac -f flv rtmp://你的服务器公网IP/live/stream
    
  • 注意:要确认树莓派能ping通服务器,同时服务器的1935端口(RTMP)和80端口(HLS拉流用)已经完全开放
三、安卓端从中转服务器拉取流
  • 安卓端推荐用ExoPlayer播放,它对RTMP/HLS的兼容性都很好:
    • 如果追求兼容性优先(适合多数安卓设备),用HLS协议,拉流地址是:http://你的服务器公网IP/hls/stream.m3u8(这里的stream要和树莓派推流命令里的最后一段路径一致)
    • 核心代码示例:
      // 初始化ExoPlayer
      SimpleExoPlayer player = new SimpleExoPlayer.Builder(context).build();
      playerView.setPlayer(player);
      
      // 构建HLS媒体源并播放
      MediaItem mediaItem = MediaItem.fromUri("http://你的服务器公网IP/hls/stream.m3u8");
      player.setMediaItem(mediaItem);
      player.prepare();
      player.play();
      
    • 如果追求低延迟(1-3秒左右),可以用RTMP协议,拉流地址是rtmp://你的服务器公网IP/live/stream,但需要给ExoPlayer添加RTMP扩展库支持
四、常见问题排查
  • 树莓派推流失败:检查服务器公网IP是否正确、端口是否开放、nginx的RTMP配置有无语法错误,以及树莓派能否正常访问公网
  • 安卓端拉流卡顿:可以降低树莓派的推流分辨率/帧率,或者把HLS切片时长调小(比如改成3s),同时确保服务器带宽足够
  • 延迟过高:HLS本身是HTTP切片协议,延迟在10-20秒属于正常;如果要更低延迟,优先选RTMP,也可以尝试SRT协议(稳定性更好,但配置稍复杂)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:10:33