音视频学习(二十三):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;
    }
}
相关推荐
无心水16 分钟前
20、大数据架构设计理论与实践 核心考点与学习笔记
大数据·笔记·学习·架构师·系统架构设计师·软考系统架构设计师·架构设计师
程序员梅雨23 分钟前
【从零开始学习数据仓库 | 第三篇】: Flume——数据采集基石
java·大数据·数据仓库·后端·学习·flume
Ryan-Zhong36 分钟前
数字人口播视频 API 实战:Python 跑通模板合成、异步轮询与批量出片
开发语言·python·音视频
Z21-X38 分钟前
云原生运维实战笔记:华为云计算与网络类服务全景解析
运维·笔记·学习·云原生·华为云
redtank200043 分钟前
纯血鸿蒙学习效率三件套实测:背单词艾宾浩斯曲线、时间记录与睡眠辅助
学习·华为·harmonyos
Android系统攻城狮1 小时前
Linux FFmpeg深度解析之avcodec_default_get_buffer2调用流程与实战(二十)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
Android系统攻城狮1 小时前
Linux FFmpeg深度解析之av_parser_init调用流程与实战(二十一)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
乐橙开放平台1 小时前
跨地域监控难管理?通过 GB28181 把各地海康大华乐橙摄像头注册到云端平台
开发语言·笔记·物联网·自动化·php·音视频·智能家居
动词ing1 小时前
【学习笔记】51单片机 模块化编程
笔记·学习·51单片机
海绵宝宝转agent1 小时前
计网基础知识
网络·笔记·学习·智能路由器