利用RTMP协议构建电脑与手机的直播Demo

利用RTMP协议构建电脑与手机的直播Demo

以下是一个完整的RTMP直播Demo搭建指南,从媒体服务器部署到推流/播放全流程,支持电脑和手机双向互播。

一、整体架构

RTMP
RTMP
HLS
RTMP
RTMP
电脑播放
媒体服务器
手机播放
手机/网页播放
手机推流

二、媒体服务器部署(推荐选择)

方案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(推荐)
  1. 下载安装:https://obsproject.com/
  2. 配置推流:
    • 服务:自定义
    • 服务器:rtmp://服务器IP/live
    • 流密钥:自定义流名称(如my_stream
  3. 添加源:
    • 显示器采集/摄像头/应用程序捕获
  4. 点击"开始推流"
方法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 (免费)
  1. 安装:Google Play搜索"Larix Broadcaster"
  2. 配置:
    • 地址:rtmp://server_ip/live
    • 流名称:任意(如android_stream
  3. 开始推流
iOS:StreamLabs (免费)
  1. 安装:App Store搜索"StreamLabs"
  2. 配置:
    • 自定义RTMP服务器
    • URL: rtmp://server_ip/live
    • 流密钥:任意(如ios_stream
  3. 开始推流

四、播放端设置

电脑播放器

VLC媒体播放器:
  • 打开:媒体 > 打开网络串流
  • 输入:rtmp://server_ip/live/my_stream
FFplay:
ffplay rtmp://server_ip/live/my_stream

手机播放器

安卓:
  1. VLC for Android
    • 打开:网络串流 > rtmp://server_ip/live/my_stream
  2. MX Player
    • 打开:网络URL > 输入RTMP地址
iOS:
  1. VLC for Mobile
    • 打开:网络 > 输入RTMP地址
  2. 使用HLS协议播放(更兼容):
    • http://server_ip:8080/hls/my_stream.m3u8

五、双向互播Demo测试

  1. 电脑推流 → 手机播放

    • PC:OBS推流到rtmp://server/live/demo_pc
    • 手机:VLC打开rtmp://server/live/demo_pchttp://server:8080/hls/demo_pc.m3u8
  2. 手机推流 → 电脑播放

    • 手机:Larix推流到rtmp://server/live/demo_phone
    • PC:VLC打开rtmp://server/live/demo_phone

六、进阶功能扩展

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)

使用内网穿透工具:

  • Ngrokngrok 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

八、安全注意事项

  1. 公网暴露时:

    • 设置流密钥白名单:rtmp://server/live?token=SECRET_KEY
    • 使用HTTPS/WSS协议
    • 启用HTTP Basic认证
  2. SRS安全配置:

# conf/rtmp.conf
vhost __defaultVhost__ {
    security {
        on;
        allow play 192.168.1.0/24;   # 只允许本地网络播放
        allow publish 127.0.0.1;     # 只允许本机推流
    }
}

提示:测试完成后关闭公开访问,防止被滥用服务器资源

这个完整的RTMP直播Demo可以实现电脑与手机之间的双向推流和播放,适合用于直播应用的原型验证、企业内网直播、远程教育等多种场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值