当前位置: 首页 > article >正文

FFmpeg + Nginx + HLS流媒体播放方案

要实现将RTSP流转换为HLS格式,并使用Nginx推送HLS流供前端播放,可以按照以下步骤进行:

Linux

1. 安装FFmpeg

首先,确保你已经安装了FFmpeg。如果没有安装,可以使用以下命令安装:

sudo apt-get update
sudo apt-get install ffmpeg

2. 使用FFmpeg将RTSP流转换为HLS格式

使用FFmpeg将RTSP流转换为HLS格式。假设你的RTSP流地址为 rtsp://example.com/stream,你可以使用以下命令:

ffmpeg -i rtsp://example.com/stream -c:v copy -c:a aac -strict experimental -f hls -hls_time 2 -hls_list_size 3 -hls_flags delete_segments -hls_segment_type mpegts -hls_segment_filename "stream_%03d.ts" stream.m3u8

解释:

  • -i rtsp://example.com/stream:输入RTSP流地址。
  • -c:v copy:视频流直接复制,不重新编码。
  • -c:a aac:音频流使用AAC编码。
  • -f hls:输出格式为HLS。
  • -hls_time 2:每个TS文件的时长为2秒。
  • -hls_list_size 3:HLS播放列表中保留3个TS文件。
  • -hls_flags delete_segments:自动删除旧的TS文件。
  • -hls_segment_type mpegts:TS文件格式为MPEG-TS。
  • -hls_segment_filename "stream_%03d.ts":TS文件的命名格式。
  • stream.m3u8:生成的HLS播放列表文件。

3. 配置Nginx

接下来,配置Nginx来推送HLS流。

3.1 安装Nginx

如果还没有安装Nginx,可以使用以下命令安装:

sudo apt-get install nginx
3.2 配置Nginx

编辑Nginx配置文件,通常位于 /etc/nginx/nginx.conf/etc/nginx/sites-available/default

http 块中添加以下内容:

server {
    listen 80;
    server_name your_domain_or_ip;

    location /hls {
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t ts;
        }
        root /path/to/your/hls/folder;
        add_header Cache-Control no-cache;
        add_header Access-Control-Allow-Origin *;
    }
}

解释:

  • location /hls:指定HLS流的访问路径。
  • root /path/to/your/hls/folder:指定HLS文件存放的目录。
  • add_header Cache-Control no-cache:禁用缓存。
  • add_header Access-Control-Allow-Origin *:允许跨域访问。
3.3 重启Nginx

保存配置文件后,重启Nginx以应用更改:

sudo systemctl restart nginx

4. 前端播放HLS流

在前端页面中,可以使用 hls.js 库来播放HLS流。首先,引入 hls.js

<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>

然后,创建一个视频播放器:

<video id="video" controls></video>
<script>
  if (Hls.isSupported()) {
    var video = document.getElementById('video');
    var hls = new Hls();
    hls.loadSource('http://your_domain_or_ip/hls/stream.m3u8');
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED, function() {
      video.play();
    });
  } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
    video.src = 'http://your_domain_or_ip/hls/stream.m3u8';
    video.addEventListener('loadedmetadata', function() {
      video.play();
    });
  }
</script>

5. 测试

确保所有步骤都正确配置后,访问你的前端页面,应该可以看到视频流正常播放。

总结

通过以上步骤,你可以使用FFmpeg将RTSP流转换为HLS格式,并通过Nginx推送HLS流,最终在前端页面中播放。

window

在 Windows 环境下测试将 RTSP 流转换为 HLS 格式,并将生成的 HLS 文件存储到 D:\ffmpeg_video 目录下,以下是详细步骤:


1. 安装 FFmpeg

如果你还没有安装 FFmpeg,可以按照以下步骤安装:

1.1 下载 FFmpeg

访问 FFmpeg 官方下载页面,选择 Windows 版本的预编译二进制文件(通常是 .zip 文件)。

1.2 解压并配置环境变量
  1. 将下载的 .zip 文件解压到一个目录,例如 C:\ffmpeg
  2. 将 FFmpeg 的 bin 目录添加到系统的环境变量中:
    • 右键点击“此电脑”或“我的电脑”,选择“属性”。
    • 点击“高级系统设置”,然后点击“环境变量”。
    • 在“系统变量”中找到 Path,点击“编辑”。
    • 点击“新建”,输入 FFmpeg 的 bin 目录路径,例如 C:\ffmpeg\bin
    • 点击“确定”保存。
1.3 验证安装

打开命令提示符(CMD)或 PowerShell,运行以下命令验证 FFmpeg 是否安装成功:

ffmpeg -version

如果显示 FFmpeg 版本信息,说明安装成功。


2. 创建 HLS 文件存储目录

D:\ffmpeg_video 目录下创建一个文件夹用于存储 HLS 文件。例如:

mkdir D:\ffmpeg_video\hls

3. 使用 FFmpeg 将 RTSP 流转换为 HLS 格式

在命令提示符或 PowerShell 中运行以下命令,将 RTSP 流转换为 HLS 格式,并将文件存储到 D:\ffmpeg_video\hls 目录下。

示例命令:
ffmpeg -i rtsp://example.com/stream ^
-c:v copy -c:a aac -strict experimental ^
-f hls -hls_time 2 -hls_list_size 3 -hls_flags delete_segments ^
-hls_segment_type mpegts ^
-hls_segment_filename "D:\ffmpeg_video\hls\stream_%03d.ts" ^
"D:\ffmpeg_video\hls\stream.m3u8"
参数说明:
  • -i rtsp://example.com/stream:输入 RTSP 流地址。
  • -c:v copy:视频流直接复制,不重新编码。
  • -c:a aac:音频流使用 AAC 编码。
  • -f hls:输出格式为 HLS。
  • -hls_time 2:每个 TS 文件的时长为 2 秒。
  • -hls_list_size 3:HLS 播放列表中保留 3 个 TS 文件。
  • -hls_flags delete_segments:自动删除旧的 TS 文件。
  • -hls_segment_type mpegts:TS 文件格式为 MPEG-TS。
  • -hls_segment_filename "D:\ffmpeg_video\hls\stream_%03d.ts":指定 TS 文件的存储路径和命名格式。
  • "D:\ffmpeg_video\hls\stream.m3u8":指定 .m3u8 文件的存储路径和文件名。

4. 验证 HLS 文件生成

运行 FFmpeg 命令后,检查 D:\ffmpeg_video\hls 目录下是否生成了 .m3u8.ts 文件:

dir D:\ffmpeg_video\hls

你应该看到类似以下的文件:

stream.m3u8
stream_000.ts
stream_001.ts
stream_002.ts

5. 使用 Nginx 提供 HLS 流

在 Windows 上安装并配置 Nginx,以便通过 HTTP 提供 HLS 流。

5.1 下载 Nginx

访问 Nginx 官方下载页面,选择 Windows 版本的 .zip 文件并下载。

5.2 解压 Nginx

将下载的 .zip 文件解压到一个目录,例如 C:\nginx

5.3 配置 Nginx

编辑 Nginx 的配置文件 C:\nginx\conf\nginx.conf,在 http 块中添加以下内容:

server {
    listen 80;
    server_name localhost;

    location /hls {
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t ts;
        }
        root D:/ffmpeg_video;  # 指向 HLS 文件的存储目录
        add_header Cache-Control no-cache;
        add_header Access-Control-Allow-Origin *;
    }
}
5.4 启动 Nginx

在命令提示符或 PowerShell 中运行以下命令启动 Nginx:

C:\nginx\nginx.exe

6. 前端播放 HLS 流

在前端页面中,使用 hls.js 播放 HLS 流。确保播放地址指向 Nginx 配置的路径,例如:

<video id="video" controls></video>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<script>
  if (Hls.isSupported()) {
    var video = document.getElementById('video');
    var hls = new Hls();
    hls.loadSource('http://localhost/hls/stream.m3u8');
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED, function() {
      video.play();
    });
  } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
    video.src = 'http://localhost/hls/stream.m3u8';
    video.addEventListener('loadedmetadata', function() {
      video.play();
    });
  }
</script>

7. 测试

  1. 确保 FFmpeg 正在运行并生成 HLS 文件。
  2. 确保 Nginx 已启动并正确配置。
  3. 打开浏览器,访问前端页面,检查视频是否正常播放。

总结

通过以上步骤,你可以在 Windows 环境下将 RTSP 流转换为 HLS 格式,并将生成的 HLS 文件存储到指定目录(如 D:\ffmpeg_video\hls)。使用 Nginx 提供 HLS 流,并通过前端页面播放视频。


http://www.kler.cn/a/552441.html

相关文章:

  • 深入理解TT无人机曲线飞行和挑战卡飞行+EP机甲全面运动
  • 【Windows软件 - HeidiSQL】导出数据库
  • Linux系统资源监控:全面掌握目录、文件、内存和硬盘使用情况
  • C++基础知识学习记录—string类
  • lwip和tcp/ip区别
  • 鸿蒙NEXT开发-沉浸式导航和键盘避让模式
  • Ubuntu 20 掉显卡驱动的解决办法
  • 利用 UniApp 实现带有渐变背景的盒子
  • mysql和minio
  • SpringCloud面试题----什么是Zuul微服务网关
  • 【网络基本知识--2】
  • Qt QListWidget 总结
  • 【Python爬虫(15)】从0到1:Python爬虫实战攻克电商网站动态数据堡垒
  • Unity Shader学习6:多盏平行光+点光源 ( 逐像素 ) 前向渲染 (Built-In)
  • 简述Vue2和Vue3的区别
  • Python HTTP 请求工具类 HttpUtils:简化 HTTP 请求的高效工具
  • 深度集成DeepSeek大模型:WebSocket流式聊天实现
  • 目标检测中的数据增强:翻转、旋转、缩放、裁剪、亮度、模糊等【附完整源码】
  • 【深度学习】Transformer入门:通俗易懂的介绍
  • Kotlin 2.1.0 入门教程(二十一)数据类