玩转直播流全攻略:从自建服务器到多平台同步推流,新手也能轻松上手

写评论

玩转直播流全攻略:从自建服务器到多平台同步推流,新手也能轻松上手

卷心菜 卷心菜

玩转直播流全攻略:从自建服务器到多平台同步推流,新手也能轻松上手

在直播日益普及的当下,你是否想过搭建自己的推流服务器,摆脱对第三方平台的依赖?又或者希望将直播内容同步推送到多个平台,扩大影响力?今天这篇干货,将从服务器搭建到多平台推流,手把手教你玩转直播流,无论是Linux还是Windows用户,都能找到适合自己的方案!


一、前期准备:系统与工具选择

推荐优先使用Linux系统,稳定性更优;若你是Windows用户,建议在WSL2(Windows子系统)中操作,能更好地兼容后续工具。核心工具需提前准备:

  • Docker:用于快速部署SRS推流服务器

  • FFmpeg:处理音视频流,实现中转、复制等功能

  • SRS:轻量级高性能推流服务器

  • OBS Studio(可选):用于自制内容推流


二、 step 1:搭建SRS推流服务器

SRS是直播流场景的常用工具,支持RTMP、HLS、WebRTC等多种协议,通过Docker安装能大幅简化流程。

1. 环境配置(分系统操作)

  • Ubuntu/Linux用户:安装Docker
    打开终端,执行以下命令,通过阿里云镜像加速安装:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  • Windows用户:安装WSL2+Docker
    先参考WSL2+Docker安装教程完成配置,装好后打开WSL2 Ubuntu命令行窗口,再进行后续操作。

2. 安装FFmpeg

无论哪种系统,都需安装FFmpeg处理流数据,终端执行:

sudo apt update
sudo apt install ffmpeg

3. 部署SRS服务器(二选一)

SRS提供稳定版和beta版,按需选择,命令执行后自动拉取镜像并启动服务:

  • SRS3(稳定版,推荐新手)
docker run --restart=always --name srs -d -it --network=host registry.cn-hangzhou.aliyuncs.com/ossrs/srs:3
  • SRS4(beta版,支持WebRTC)
docker run --restart=always --name srs -d -it --network=host registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/docker.conf

4. 验证服务器是否正常运行

  • 访问SRS控制面板:打开浏览器输入http://localhost:8080/,能看到界面即部署成功

  • 推流服务器地址:rtmp://localhost:1935(1935是RTMP默认端口,可省略,简化为rtmp://localhost


三、 step 2:用FFmpeg实现中转推流

FFmpeg是直播流处理的“瑞士军刀”,能将外部流(如在线直播源、本地视频)中转到自建的SRS服务器,还能实现失败自动重启。

1. 基础中转推流命令

以“拉取CCTV13直播流,中转到SRS服务器”为例,终端执行:

ffmpeg -re -i 'http://cctvalih5ca.v.myalicdn.com/live/cctv13_2/index.m3u8' -f flv -c copy -bsf:a aac_adtstoasc 'rtmp://localhost/live/livestream'
  • 关键参数说明:

  • -re必须添加!保证流按实时速度传输,避免卡顿(不加会导致流速忽快忽慢)

  • -i:指定输入源,可替换为本地视频(如./my-video.flv)、其他直播源(如m3u8、flv地址)

  • -bsf:a aac_adtstoasc:若音频编码不是AAC,可删除该参数

2. 实现“失败自动重启”

普通命令在网络波动时会停止推流,添加循环语句可解决:

while true; do ffmpeg -re -i 'http://cctvalih5ca.v.myalicdn.com/live/cctv13_2/index.m3u8' -f flv -c copy -bsf:a aac_adtstoasc 'rtmp://localhost/live/livestream'; done
  • 停止推流:连续按Ctrl+C,或直接关闭终端窗口

四、 step 3:观看直播流(多协议可选)

SRS支持多种观看协议,按“流畅度+兼容性”排序,推荐优先选择RTMP或HLS:

协议

观看地址(localhost替换为服务器IP,远程观看用)

适用场景

RTMP

rtmp://localhost/live/livestream

用VLC播放器观看,延迟低

H5(HLS)

http://localhost:8080/live/livestream.m3u8

浏览器观看,兼容性强

H5(WebRTC)

webrtc://localhost/live/livestream

仅SRS4支持,超低延迟

H5(HTTP-FLV)

http://localhost:8080/live/livestream.flv

浏览器观看,可能卡顿

快速预览流状态

访问http://localhost:8080/console/ng_index.html#/streams?port=1985,能查看当前所有推流,点击“预览”即可直接观看,若预览卡顿,可将地址后缀.flv改为.m3u8


五、 step 4:多流同时推送到自建服务器

若想在服务器上同时提供多个直播源(如CCTV13、CCTV2),只需修改推流地址中的“流名称”(如livestream改为cctv13),并在不同终端窗口执行命令:

  • 终端1(推CCTV13):
while true; do ffmpeg -re -i 'http://cctvalih5ca.v.myalicdn.com/live/cctv13_2/index.m3u8' -f flv -c copy -bsf:a aac_adtstoasc 'rtmp://localhost/live/cctv13'; done
  • 终端2(推CCTV2):
while true; do ffmpeg -re -i 'http://cctvalih5ca.v.myalicdn.com/live/cctv2_2/index.m3u8' -f flv -c copy -bsf:a aac_adtstoasc 'rtmp://localhost/live/cctv2'; done

此时访问预览页,能看到两个独立的直播流,实现“一台服务器多流并发”。


六、 step 5:用OBS推流到自建服务器(自制内容适用)

若你是主播,想将自己的摄像头、屏幕内容推到自建服务器,OBS Studio是最佳选择:

  1. 打开OBS,点击右下角“设置”→“推流”
  2. 推流类型选择“自定义”
  3. URL填写:rtmp://localhost/live(远程推流则将localhost改为服务器IP)
  4. 流名称填写:livestream(可自定义,与后续观看地址对应)
  5. 点击“确定”,回到主界面点击“开始推流”,即可将内容推到SRS服务器

七、 step 6:FFmpeg多平台同步推流(关键技能!)

想同时在B站、斗鱼、虎牙开播?无需逐个平台设置,用FFmpeg就能实现“一次推流,多平台同步”。

1. 先获取各平台推流地址

所有直播平台的推流地址,都由“服务器地址+串流密钥”组成,只需将两者用/连接(若服务器地址结尾有/,则无需再加):

  • B站:先注册主播→开播后获取,示例地址:rtmp://live-push.bilivideo.com/live-bvc/?streamname=live_123456_7890123456&key=你的密钥

  • 斗鱼:注册主播→开播后获取,示例地址:rtmp://sendtc3.douyu.com/live/12345678abcdEFGH?wsSecret=你的密钥&wsTime=xxx

  • 虎牙:先用手机APP开播一次(完成实名认证)→在主播设置中获取,地址可直接使用

2. 多平台推流命令(以B站+斗鱼为例)

while true; do
ffmpeg -re -f flv -listen 1 -i rtmp://0.0.0.0:1945/live/livestream \
  -f fifo -fifo_format flv -map 0:v -map 0:a -vtag 7 -atag 10 \
  -flags +global_header -flvflags no_duration_filesize \
  -drop_pkts_on_overflow 1 -attempt_recovery 1 -recover_any_error 1 -c copy \
    'B站推流地址' \
  -f fifo -fifo_format flv -map 0:v -map 0:a -vtag 7 -atag 10 \
  -flags +global_header -flvflags no_duration_filesize \
  -drop_pkts_on_overflow 1 -attempt_recovery 1 -recover_any_error 1 -c copy \
    '斗鱼推流地址' \
# end
done
  • 关键优化参数:

  • -drop_pkts_on_overflow 1:卡顿时自动丢帧,避免持续卡顿

  • -attempt_recovery 1:掉线自动重连

  • -vtag 7 -atag 10:指定视频为H.264编码、音频为AAC编码,适配多数平台

3. 同步推流+录像

想在推流的同时保存直播录像,只需在命令中添加“本地文件输出”:

while true; do
ffmpeg -re -f flv -listen 1 -i rtmp://0.0.0.0:1945/live/livestream \
  # 保存录像到本地,文件名含日期时间
  -f flv -flvflags no_duration_filesize -c copy "/home/你的用户名/Videos/直播录像-$(date '+%F_%H-%M-%S').flv" \
  # 推流到B站
  -f fifo -fifo_format flv -map 0:v -map 0:a -vtag 7 -atag 10 \
  -flags +global_header -flvflags no_duration_filesize \
  -drop_pkts_on_overflow 1 -attempt_recovery 1 -recover_any_error 1 -c copy \
    'B站推流地址' \
  # 推流到斗鱼
  -f fifo -fifo_format flv -map 0:v -map 0:a -vtag 7 -atag 10 \
  -flags +global_header -flvflags no_duration_filesize \
  -drop_pkts_on_overflow 1 -attempt_recovery 1 -recover_any_error 1 -c copy \
    '斗鱼推流地址' \
# end
done

八、 进阶技巧:内网多人看直播更流畅

若内网有多个用户同时观看同一直播,普通方式会占用大量带宽,推荐用WebRTC+P2P技术优化,让用户之间相互分享数据,降低服务器压力。

1. 现成工具推荐

  • 在线演示:访问http://www.hifilm.top/film/tv?media=你的m3u8地址,将media值改为你的直播源(如CCTV13的m3u8地址)

  • 开源项目:


  • hlsjs-p2p-engine:HLS流P2P加速插件

  • CBPlayer:内置P2P功能的H5播放器,支持记忆播放,可查看实时P2P数据


九、 常见问题解决

  1. 推流到虎牙报错“Tag avc1 incompatible with output codec id '27'”
    解决方案:在推流命令中添加-vtag 7 -atag 10,指定编码格式。
  2. 观看时卡顿
    排查方向:①确认FFmpeg命令加了-re参数;②将观看地址后缀.flv改为.m3u8;③内网用户启用P2P。
  3. 多平台推流时部分平台断流
    解决方案:检查推流地址是否正确,确保命令中添加了-drop_pkts_on_overflow 1-attempt_recovery 1参数。

从自建服务器到多平台同步推流,以上步骤覆盖了直播流处理的核心场景。无论是个人测试、小型团队直播,还是内网共享直播源,都能通过这些工具实现。如果在操作中遇到问题,可反复核对命令参数,或参考文中的开源项目文档,动手尝试后你会发现,玩转直播流其实没那么难!

THE END

登录 后才能评论~