FFmpeg+Nginx将视频转为hls点播视频流

简介: FFmpeg+Nginx将视频转为hls点播视频流

 一、FFmpeg+Nginx转流hls

1、FFmpeg安装

windows下安装:

解压FFmpeg文件夹,配置环境变量:在“Path”变量原有变量值内容上加上d:\ffmpeg\bin,验证:ffmpeg -version 出现版本号则成功,如下图所示。

image.gif编辑

image.gif编辑

2、Nginx安装

Windows下安装:

下载进行解压,进入windowcmd窗口,输入如下图所示的命令,进入到nginx目录,使用start nginx.exe进行nginx的启动,如下图所示:

image.gif编辑

启动成功后,在任务管理器中会看到“nginx.exe”进程,如下图所示:

image.gif编辑

在浏览器地址栏输入:127.0.0.1,会看到如下图所示的nginx欢迎界面

image.gif编辑

3、Nginx配置

修改配置文件:nginx/conf/nginx.conf
在http --> server下增加:

# ffmpeg生成hls流的http访问配置
location /hls 
{
#若nginx\conf\mime.types中没有配置如下type,请加上,或直接在mime.types加
#types{
#       application/vnd.apple.mpegurl m3u8;
#       application/x-mpegURL m3u8;
#       video/mp2t ts;
#}
        root html
;
#add_header Cache-Control no-cache;
        add_header Access-Control-Allow-Origin *
;
}

image.gif

注:下面用ffmepg转流需要指定目标路径为上面配置的nginx/html/hls
在nginx目录html下创建配置的目标路径目录hls,然后,使用“nginx.exe -s reload”命令重启nginx服务,如下所示

image.gif编辑

4、FFmpeg命令行转流

ffmpeg -i "rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov" -c copy -f hls -hls_time 2 -hls_list_size 1 -hls_wrap 15 E:/soft/nginx-1.18.0/html/hls/test.m3u8

其中:rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov是对应视频设备的rtsp地址E:/soft/nginx-1.18.0/html/hls/test.m3u8 是对应nginx.conf配置中的hls访问路径/hls

image.gif编辑

ffmpeg 关于hls方面的指令说明:

    • -hls_time n: 设置每片的长度,默认值为2。单位为秒
    • -hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5
    • -hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量
    • -hls_start_number n:设置播放列表中sequence number的值为number,默认值为0

    演示图片

    image.gif编辑


    相关文章
    Python使用ffmpeg下载m3u8拼接为视频
    Python使用ffmpeg下载m3u8拼接为视频
    |
    编解码 Linux
    CentOS安装ffmpeg并转码视频为mp4
    CentOS安装ffmpeg并转码视频为mp4
    371 0
    |
    10月前
    |
    编解码 监控 网络协议
    如何使用FFmpeg实现RTSP推送H.264和H.265(HEVC)编码视频
    本文详细介绍了如何使用FFmpeg实现RTSP推送H.264和H.265(HEVC)编码视频。内容涵盖环境搭建、编码配置、服务器端与客户端实现等方面,适合视频监控系统和直播平台等应用场景。通过具体命令和示例代码,帮助读者快速上手并实现目标。
    2601 6
    |
    11月前
    |
    Java 数据安全/隐私保护
    Java ffmpeg 实现视频加文字/图片水印功能
    【10月更文挑战第22天】在 Java 中使用 FFmpeg 实现视频加文字或图片水印功能,需先安装 FFmpeg 并添加依赖(如 JavaCV)。通过构建 FFmpeg 命令行参数,使用 `drawtext` 滤镜添加文字水印,或使用 `overlay` 滤镜添加图片水印。示例代码展示了如何使用 JavaCV 实现文字水印。
    950 1
    |
    11月前
    |
    计算机视觉 Python
    FFMPEG学习笔记(一): 提取视频的纯音频及无声视频
    本文介绍了如何使用FFmpeg工具从视频中提取纯音频和无声视频。提供了具体的命令行操作,例如使用`ffmpeg -i input.mp4 -vn -c:a libmp3lame output.mp3`来提取音频,以及`ffmpeg -i input.mp4 -c:v copy -an output.mp4`来提取无声视频。此外,还包含了一个Python脚本,用于批量处理视频文件,自动提取音频和生成无声视频。
    895 1
    |
    11月前
    FFmpeg学习笔记(二):多线程rtsp推流和ffplay拉流操作,并储存为多路avi格式的视频
    这篇博客主要介绍了如何使用FFmpeg进行多线程RTSP推流和ffplay拉流操作,以及如何将视频流保存为多路AVI格式的视频文件。
    1076 0
    |
    应用服务中间件 Linux nginx
    FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流
    《FFmpeg开发实战》书中介绍了如何使用FFmpeg向网络推流,简单流媒体服务器MediaMTX不适用于复杂业务。nginx-rtmp是Nginx的RTMP模块,提供基本流媒体服务。要在Linux上集成rtmp,需从官方下载nginx和nginx-rtmp-module源码,解压后在nginx目录配置并添加rtmp模块,编译安装。配置nginx.conf启用RTMP服务,监听1935端口。使用ffmpeg推流测试,如能通过VLC播放,表明nginx-rtmp运行正常。更多详情见书本。
    388 0
    FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流
    |
    编解码
    FFmpeg开发笔记(三十七)分析SRS对HLS协议里TS包的插帧操作
    《FFmpeg开发实战》书中讲解了音视频封装格式,重点介绍了TS,因其固定长度和独立解码特性,常用于HLS协议。HLS通过m3u8文件指示客户端播放TS分片。SRS服务器在转换MP4至TS时,会在每个TS包头添加SPS和PPS帧,保证解码完整性。这一过程在SrsIngestHlsOutput::on_ts_video函数中体现,调用write_h264_sps_pps和write_h264_ipb_frame完成。详细实现涉及SrsRawH264Stream::mux_sequence_header函数,遵循ISO标准写入SPS和PPS NAL单元。
    293 0
    FFmpeg开发笔记(三十七)分析SRS对HLS协议里TS包的插帧操作
    |
    编解码 Linux 计算机视觉
    python 调用ffmpeg使用usb摄像头录制视频,输出h264格式,自动获取摄像头的最佳帧率和最大画面尺寸
    使用 Python 调用 FFmpeg 进行 USB 摄像头视频录制,需先确保安装 FFmpeg 和 Python 的 `subprocess` 模块。代码示例展示了如何自动获取摄像头的最佳帧率和最大分辨率,然后录制视频。首先通过 FFmpeg 列出摄像头格式获取信息,解析出帧率和分辨率,选择最优值。之后调用 FFmpeg 命令录制视频,设置帧率、分辨率等参数。注意 `/dev/video0` 是 Linux 的摄像头设备路径,Windows 系统需相应调整。代码中未直接实现自动获取最佳参数,通常需要借助其他库如 OpenCV。