音视频学习(二十三):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;
    }
}
相关推荐
小蒜学长34 分钟前
医疗报销系统的设计与实现(代码+数据库+LW)
数据库·spring boot·学习·oracle·课程设计
kiramario1 小时前
【结束】JS如何不通过input的onInputFileChange使用本地mp4文件并播放,nextjs下放入public文件的视频用video标签无法打开
开发语言·javascript·音视频
羊小猪~~1 小时前
MYSQL学习笔记(九):MYSQL表的“增删改查”
数据库·笔记·后端·sql·学习·mysql·考研
余多多_zZ1 小时前
鸿蒙初学者学习手册(HarmonyOSNext_API14)_组件截图(@ohos.arkui.componentSnapshot (组件截图) )
学习·华为·harmonyos·鸿蒙·鸿蒙系统
余~~185381628002 小时前
矩阵碰一碰发视频的后端源码技术,支持OEM
线性代数·矩阵·音视频
剑走偏锋o.O3 小时前
Spring MVC 框架学习笔记:从入门到精通的实战指南
学习·spring·springmvc
sealaugh323 小时前
aws(学习笔记第二十九课) aws cloudfront hands on
笔记·学习·aws
虾球xz3 小时前
游戏引擎学习第117天
学习·游戏引擎
StickToForever4 小时前
第4章 信息系统架构(三)
经验分享·笔记·学习·职场和发展
划水哥~4 小时前
高清下载油管视频到本地
音视频