利用RTMP协议构建电脑与手机的直播Demo
以下是一个完整的RTMP直播Demo搭建指南,从媒体服务器部署到推流/播放全流程,支持电脑和手机双向互播。
一、整体架构
二、媒体服务器部署(推荐选择)
方案1:SRS(轻量级,适合本地测试)
# 1. 下载SRS
git clone https://github.com/ossrs/srs.git
cd srs/trunk
# 2. 编译安装
./configure --prefix=/usr/local/srs
make && make install
# 3. 启动RTMP/HLS服务
./objs/srs -c conf/rtmp.conf
方案2:Nginx-rtmp(Docker快速部署)
# 1. 创建配置文件
mkdir rtmp-config
cat > rtmp-config/nginx.conf <<EOF
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
# 开启HLS支持手机播放
hls on;
hls_path /tmp/hls;
hls_fragment 3s;
hls_playlist_length 60s;
}
}
}
http {
server {
listen 8080;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
alias /tmp/hls;
}
}
}
EOF
# 2. 启动容器
docker run -d -p 1935:1935 -p 8080:8080 -v $PWD/rtmp-config:/etc/nginx \
-v /tmp/hls:/tmp/hls --name nginx-rtmp nginx
三、推流端设置
电脑端推流(Windows/Mac/Linux)
方法1:使用OBS Studio(推荐)
- 下载安装:https://obsproject.com/
- 配置推流:
- 服务:自定义
- 服务器:
rtmp://服务器IP/live
- 流密钥:自定义流名称(如
my_stream
)
- 添加源:
- 显示器采集/摄像头/应用程序捕获
- 点击"开始推流"
方法2:FFmpeg命令行推流
# 推摄像头内容(Linux)
ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast \
-tune zerolatency -f flv rtmp://server_ip/live/my_stream
# 推桌面(Windows)
ffmpeg -f gdigrab -i desktop -c:v libx264 -preset ultrafast \
-f flv rtmp://server_ip/live/my_stream
# 推视频文件
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server_ip/live/movie
手机端推流
Android:Larix Broadcaster (免费)
- 安装:Google Play搜索"Larix Broadcaster"
- 配置:
- 地址:
rtmp://server_ip/live
- 流名称:任意(如
android_stream
)
- 地址:
- 开始推流
iOS:StreamLabs (免费)
- 安装:App Store搜索"StreamLabs"
- 配置:
- 自定义RTMP服务器
- URL:
rtmp://server_ip/live
- 流密钥:任意(如
ios_stream
)
- 开始推流
四、播放端设置
电脑播放器
VLC媒体播放器:
- 打开:媒体 > 打开网络串流
- 输入:
rtmp://server_ip/live/my_stream
FFplay:
ffplay rtmp://server_ip/live/my_stream
手机播放器
安卓:
- VLC for Android
- 打开:网络串流 >
rtmp://server_ip/live/my_stream
- 打开:网络串流 >
- MX Player
- 打开:网络URL > 输入RTMP地址
iOS:
- VLC for Mobile
- 打开:网络 > 输入RTMP地址
- 使用HLS协议播放(更兼容):
http://server_ip:8080/hls/my_stream.m3u8
五、双向互播Demo测试
-
电脑推流 → 手机播放
- PC:OBS推流到
rtmp://server/live/demo_pc
- 手机:VLC打开
rtmp://server/live/demo_pc
或http://server:8080/hls/demo_pc.m3u8
- PC:OBS推流到
-
手机推流 → 电脑播放
- 手机:Larix推流到
rtmp://server/live/demo_phone
- PC:VLC打开
rtmp://server/live/demo_phone
- 手机:Larix推流到
六、进阶功能扩展
1. 搭建简易直播平台
<!DOCTYPE html>
<html>
<head>
<title>简易直播平台</title>
<link href="https://unpkg.com/video.js@7/dist/video-js.min.css" rel="stylesheet">
</head>
<body>
<h2>电脑推流直播</h2>
<video id="pc-stream" class="video-js" controls width="640" height="360">
<source src="http://server_ip:8080/hls/demo_pc.m3u8" type="application/x-mpegURL">
</video>
<h2>手机推流直播</h2>
<video id="phone-stream" class="video-js" controls width="640" height="360">
<source src="http://server_ip:8080/hls/demo_phone.m3u8" type="application/x-mpegURL">
</video>
<script src="https://unpkg.com/video.js@7/dist/video.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/videojs-flash@2/dist/videojs-flash.min.js"></script>
<script>
// 初始化播放器
var pcPlayer = videojs('pc-stream');
var phonePlayer = videojs('phone-stream');
// RTMP备选方案(需要Flash)
function playRTMP() {
pcPlayer.src({type: 'rtmp/mp4', src: 'rtmp://server_ip/live/demo_pc'});
phonePlayer.src({type: 'rtmp/mp4', src: 'rtmp://server_ip/live/demo_phone'});
pcPlayer.play();
phonePlayer.play();
}
</script>
</body>
</html>
2. 网络穿透解决(本地无公网IP)
使用内网穿透工具:
- Ngrok:
ngrok tcp 1935
- frp:配置转发RTMP端口
- Cloudflare Tunnel:安全内网穿透
3. 推流质量监控
使用SRS控制台:
http://server_ip:8080/
七、故障排查指南
问题现象 | 解决方案 |
---|---|
OBS连接失败 | 检查防火墙(开1935端口)、确认服务器IP正确 |
手机播放黑屏 | 尝试HLS协议(http://ip:8080/hls/stream.m3u8 ) |
高延迟(>5s) | OBS设置:编码预设"ultrafast"、关闭高级设置中的串流延迟 |
音频不同步 | 调整OBS音频采样率(44.1kHz)、检查手机端带宽 |
手机推流失败 | 检查手机网络(4G/5G可能阻断1935端口)、尝试不同推流APP |
八、安全注意事项
-
公网暴露时:
- 设置流密钥白名单:
rtmp://server/live?token=SECRET_KEY
- 使用HTTPS/WSS协议
- 启用HTTP Basic认证
- 设置流密钥白名单:
-
SRS安全配置:
# conf/rtmp.conf
vhost __defaultVhost__ {
security {
on;
allow play 192.168.1.0/24; # 只允许本地网络播放
allow publish 127.0.0.1; # 只允许本机推流
}
}
提示:测试完成后关闭公开访问,防止被滥用服务器资源
这个完整的RTMP直播Demo可以实现电脑与手机之间的双向推流和播放,适合用于直播应用的原型验证、企业内网直播、远程教育等多种场景。