ffmpeg+nginx+video实现rtsp流转hls流,web页面播放

2024-06-22 10:04

本文主要是介绍ffmpeg+nginx+video实现rtsp流转hls流,web页面播放,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目场景:

最近调试海康摄像头需要将rtsp流在html页面播放,因为不想去折腾推拉流,所以我选择ffmpeg转hls流,nginx转发,html直接访问就好了

1.首先要下载nginx和ffmpeg

附上下载地址:

nginx nginx news

ffmpeg https://github.com/BtbN/FFmpeg-Builds/releases

ffmpeg解压后 需配置环境变量

2.使用FFmpeg将RTSP视频源转换为HLS格式

在cmd命令窗口中执行下列命令

ffmpeg -i rtsp://admin:zkgd@wdv@192.168.3.202:554/Streaming/Channels/1 -c:v libx264 -preset medium -crf 23 -c:a aac -strict -2 -b:a 160k -start_number 0 -hls_time 10 -hls_list_size 0 -f hls E:/vedio/hls/test.m3u8
  • ffmpeg: 这是调用FFmpeg命令行工具的部分。

  • -i rtsp://admin:zkgd@wdv@192.168.3.202:554/Streaming/Channels/1:这一部分指定了输入源,即要转换的RTSP视频流地址。其中,admin:zkgd@wdv是用于访问该视频流的认证信息(用户名和密码),192.168.3.202:554是视频服务器的IP地址和端口号,Streaming/Channels/1通常表示视频流的一个通道。

  • -c:v libx264:指定视频编码器为libx264,这是一个广泛使用的H.264视频编码库,适用于输出高质量且兼容性好的视频流。

  • -preset medium:设置x264的预设值为medium,这会影响编码速度和输出文件的大小。medium是一个平衡了编码速度和压缩效率的选项。

  • -crf 23:Constant Rate Factor (CRF) 控制视频的质量。值越小,质量越高,但文件也越大。23是一个常见的选择,能提供不错的平衡。

  • -c:a aac -strict -2:指定音频编码器为AAC,这是一种高效且广泛支持的音频编码格式。-strict -2是为了兼容旧版FFmpeg中对AAC的支持设置的,新版本可能不需要这个参数。

  • -b:a 160k:设定音频比特率为160kbps,控制音频的质量和大小。

  • -start_number 0:指定输出的TS片段从0开始编号,这对于某些播放器的连续播放有帮助。

  • -hls_time 10:设置HLS切片的时间长度为10秒,意味着视频会每10秒切分为一个小段(TS文件)。

  • -hls_list_size 0:此设置表示HLS播放列表不会限制存储的分片数量,0意味着所有生成的分片都将被保存在列表中,直到手动清理。

  • -f hls:指定输出格式为HLS。

  • E:/vedio/hls/test.m3u8:这是输出文件的路径和名称,表示生成的HLS播放列表(m3u8文件)及相应的视频分片将保存在E盘的vedio/hls目录下,文件名为test.m3u8。

  • 命令执行成功后会看道如下界面

3.修改nginx配置文件


#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;server {listen       81;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   E:/environment/nginx-1.24.0/www/test;index  index.html index.htm demo.html;}location /hls {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}alias   E:/vedio/hls;add_header Cache-Control no-cache ;add_header Access-Control-Allow-Origin *;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

4.访问  localhost:81

5.补充:py定时清理文件小脚本,需安装py环境

import os
import time
from datetime import datetime, timedelta# 目标文件夹路径
target_folder = r"E:\vedio\hls"
# 检查时间阈值(5分钟前)
time_threshold = datetime.now() - timedelta(minutes=5)def delete_old_files(folder_path, threshold):"""删除指定文件夹下指定时间以前创建的文件"""for filename in os.listdir(folder_path):file_path = os.path.join(folder_path, filename)# 确保是文件且不是目录if os.path.isfile(file_path):# 获取文件创建时间creation_time = datetime.fromtimestamp(os.path.getctime(file_path))# 如果文件创建时间早于阈值时间,则删除if creation_time < threshold:print(f"删除文件: {file_path}")os.remove(file_path)def main():while True:print("正在检查并删除旧文件...")delete_old_files(target_folder, time_threshold)# 每10分钟执行一次time.sleep(360)  # 360秒等于10分钟if __name__ == "__main__":print("脚本开始运行...")main()

执行效果如下

完成

这篇关于ffmpeg+nginx+video实现rtsp流转hls流,web页面播放的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083977

相关文章

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre