音视频学习(二十三):srs+ffmpeg实现rtmp的推拉流

rtmp协议:https://blog.csdn.net/www_dong/article/details/131026072

rtmp收流:https://blog.csdn.net/www_dong/article/details/135073488

rtmp发流:https://blog.csdn.net/www_dong/article/details/135254847

安装和配置SRS服务器

  1. 克隆 SRS 源码并进入目录:
bash 复制代码
git clone -b develop https://github.com/ossrs/srs.git
cd srs
  1. 配置并编译 SRS
bash 复制代码
./configure
make
  1. 编译完成后,SRS 可执行文件将位于 objs 目录中。

  2. 启动srs(默认)

bash 复制代码
./objs/srs -c conf/rtmp.conf

默认情况下,SRS 会监听 RTMP 端口 1935

配置 SRS 实现 RTMP 推流与拉流

conf/rtmp.conf 文件中,你可以使用以下配置来启用 RTMP 推流和拉流:

ini 复制代码
listen              1935;          # RTMP 监听端口
max_connections     1000;          # 最大连接数

vhost __defaultVhost__ {
    enabled         on;            # 启用 RTMP
    chunk_size      60000;         # 每个数据块的大小

    # 配置推流和拉流
    # 推流和拉流的 URL 为 rtmp://<server-ip>/live/stream
    # 例如: rtmp://localhost/live/stream
}

保存文件后,重新启动 SRS 服务:

bash 复制代码
./objs/srs -c conf/rtmp.conf

使用 FFmpeg 推流到 SRS

将本地视频文件 input.mp4 推流到 rtmp://localhost/live/stream

bash 复制代码
# 方式一
ffmpeg -re -i input.mp4 -c:v libx264 -preset fast -c:a aac -f flv rtmp://localhost/live/stream

# 方式二
ffmpeg -re -i input.mp4 -c copy -f flv -y rtmp://localhost/live/stream
  • -re:表示以实时速度发送视频数据(有助于模拟实时推流)。

  • -i input.mp4:输入文件路径。

  • -c:v libx264:使用 libx264 编解码器进行视频编码。

  • -c:a aac:使用 aac 编解码器进行音频编码。

  • -f flv:使用 FLV 格式进行推流。

  • rtmp://localhost/live/stream:RTMP 推流的目标地址。

推流时常见问题

  1. 推流地址错误 :确认推流 URL 是否正确(如 rtmp://localhost/live/stream)。
  2. 推流端口被防火墙阻塞 :确保防火墙允许通过 RTMP 默认端口(1935)进行通信。

使用 FFmpeg 从 SRS 拉流

可以使用 FFmpeg 拉取 SRS 服务器上的 RTMP 流,并保存到本地文件。

bash 复制代码
ffmpeg -i rtmp://localhost/live/stream -c copy output.mp4
  • -i rtmp://localhost/live/stream:RTMP 流的输入 URL。

  • -c copy:直接复制音视频流,不进行重新编码。

实时播放 RTMP 流

如果希望实时播放流,可以将 RTMP 流发送给 VLC 播放器进行实时播放。

bash 复制代码
ffmpeg -i rtmp://localhost/live/stream -f flv - | vlc -

高级配置与优化

启用 HLS

除了 RTMP,SRS 还支持 HLS(HTTP Live Streaming)。你可以在 SRS 配置文件中启用 HLS 功能,以便通过 HTTP 播放 RTMP 流。

conf/rtmp.conf 中,添加以下配置来启用 HLS:

ini 复制代码
vhost __defaultVhost__ {
    hls {
        enabled         on;
        hls_path        ./objs/nginx/html;    # 设置 HLS 输出路径
        hls_fragment    10;                   # 设置 HLS 分片大小(秒)
    }
}

保存后,重启 SRS。

此时,可以通过以下 URL 拉取 HLS 流:

arduino 复制代码
http://localhost/live/stream.m3u8

推流鉴权

如果你希望为推流设置鉴权(例如限制谁能推流到 SRS),可以配置 HTTP 鉴权:

ini 复制代码
vhost __defaultVhost__ {
    http_hooks {
        enabled         on;
        on_publish      http://your-server/auth/publish;
    }
}
相关推荐
kimble_xia@oracle5 小时前
性能优化笔记
ffmpeg
Hello_Embed5 小时前
STM32HAL 快速入门(二十四):I2C 编程(一)—— 从 OLED 显示初识 I2C 协议
c语言·stm32·单片机·嵌入式硬件·学习
凯尔萨厮6 小时前
Java学习笔记四(继承)
java·笔记·学习
wang_chao1186 小时前
RK3399平台ffmpeg-VPU硬编码录制USB摄像头视频、H264或MJPEG编码
ffmpeg·音视频
ホロHoro6 小时前
学习笔记:Javascript(5)——事件监听(用户交互)
javascript·笔记·学习
froxy6 小时前
音频中的PDM、PCM概念解读
音视频·pcm
爱喝水的鱼丶6 小时前
SAP-MM:SAP核心组织单元:工厂(Plant)全面学习指南及配置图解
学习·sap·abap·配置·工厂·mm模块
励志不掉头发的内向程序员6 小时前
STL库——AVL树
开发语言·c++·学习
晨非辰8 小时前
#C语言——刷题攻略:牛客编程入门训练(十一):攻克 循环控制(三),轻松拿捏!
c语言·开发语言·经验分享·学习·visual studio
xiaoxiaoxiaolll9 小时前
期刊速递 | 《Light Sci. Appl.》超宽带光热电机理研究,推动碳纳米管传感器在制药质控中的实际应用
人工智能·学习