C# 实时流转换为m3u8

news2024/12/29 11:48:40

主要通过FFmpeg 执行命令进行转换
FFmpeg 下载地址

命令行

ffmpeg -i "rtsp://your_rtsp_stream_address" -codec: copy -start_number 0 -hls_time 10 -hls_list_size 12 -f hls "output.m3u8"

start_number 设置播放列表中最先播放的索引号,默认 0
hls_time 10 :切片长度 单位秒 10秒
hls_list_size size 设置播放列表中字段最大数。如果为0,则包含所有分段。默认为5
-f hls:输出格式为HLS
output.m3u8 输出文件名,可以完整路径

通过C# 执行命令行
我是winfrom 所有把ffmpeg 放到了执行目录在这里插入图片描述

也可以把ffmpeg 注册到环境变量中
1、右击“计算机”或“此电脑”,选择“属性”。
2、点击“高级系统设置”,然后点击“环境变量”。
3、在“系统变量”部分,找到并选中“Path”变量,点击“编辑”。
4、在“变量值”字段末尾添加 FFmpeg 的 bin 目录路径(例如 C:\ffmpeg\bin),用分号分隔开。
5、点击“确定”保存更改,按 Win + R,输入 cmd,然后按 Enter 打开命令提示符。输入 ffmpeg -version 并按 Enter。如果安装成功,会显示 FFmpeg 的版本信息
在这里插入图片描述

C# 执行命令行代码

		/// <summary>
        /// 执行命令
        /// </summary>
        /// <param name="command"></param>
        /// <returns></returns>
private void ConvertVideo(string command)
        {
            using (var process = new Process())
            {
           	    //这里如果写入了环境变量就不用写ffmpeg的完整路径
                process.StartInfo.FileName = Path.Combine(System.Environment.CurrentDirectory, "ffmpeg.exe"); // 指定命令行解释器;
                process.StartInfo.Arguments = command;
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.RedirectStandardError = true;
                process.StartInfo.CreateNoWindow = true;
                process.ErrorDataReceived += Process_OutputDataReceived;

                process.EnableRaisingEvents = true;
                process.Exited += Process_Exited;

                try
                {
                    process.Start();
                    process.BeginErrorReadLine();

                }
                catch (Exception ex)
                {
                    throw new Exception("FFmpeg启动失败:" + ex.Message);
                }
            }
        }
        /// <summary>
        /// 进程被结束
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Process_Exited(object sender, EventArgs e)
        {
           
        }
		/// <summary>
        /// 显示输出
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (!string.IsNullOrEmpty(e.Data))
            {
                AddText(e.Data);
                //outputTextBox.AppendText(e.Data + Environment.NewLine);
            }
        }

        private void AddText(string Data)
        {
            // 更新UI线程中的控件,例如文本框显示输出
            outputTextBox.Invoke((MethodInvoker)delegate
            {
                outputTextBox.AppendText(Data + Environment.NewLine);
            });
        }

调用
在这里插入图片描述

海康&大华&DSS获取RTSP

实时流

海康:

rtsp://[username]:[password]@ip:[port]/[codec]/[channel]/[subtype]/av_stream
说明:
username: 用户名。例如admin。
password: 密码。例如12345。
ip: 为设备IP。例如 192.0.0.64。
port: 端口号默认为554,若为默认可不填写。
codec:有h264、MPEG-4、mpeg4这几种。
channel: 通道号,起始为1。例如通道1,则为ch1。
subtype: 码流类型,主码流为main,辅码流为sub。

栗子:

IPC

rtsp://admin:123456@192.168.18.105:554/h264/ch1/main/av_stream

NVR
rtsp://admin:123456@192.168.18.106:554/Streaming/Channels/101

说明:

101,第一个1代表通道,最后一个1代表麻溜。

大华:

rtsp://[username]:[password]@ip:[port]/cam/realmonitor?channel=1&subtype=0
说明:
username: 用户名。例如admin。
password: 密码。例如admin。
ip: 为设备IP。例如 10.7.8.122。
port: 端口号默认为554,若为默认可不填写。
channel: 通道号,起始为1。例如通道2,则为channel=2。
subtype: 码流类型,主码流为0(即subtype=0),辅码流为1(即subtype=1)。

栗子:

rtsp://admin:admin@192.168.18.107:554/cam/realmonitor?channel=2&subtype=1

回放流

海康:

rtsp://[username]:[password]@ip:[port]/Streaming/tracks/101?starttime=20120802t063812z&endtime=20120802t064816z

说明:

101:1,表示通道1;01,表示以单播形式回放指定设备的通道中的录像文件

starttime:开始时间

endtime:结束时间

时间范围是starttime到endtime,其中starttime和endtime的格式要符合ISO 8601。

具体格式是YYYYMMDD”T”HHmmSS.fraction”Z” ,Y是年,M是月,D是日,T是时间分格符,H是小时,M是分,S是秒,Z是可选的、表示Zulu (GMT) 时间。

大华:

rtsp://[username]:[password]@ip:[port]/cam/playback?channel=1&subtype=0&starttime=2017_01_10_01_00_00&endtime=2017_01_10_02_00_00

说明:

username: 用户名。例如admin。
password: 密码。例如admin。
ip: 为设备IP。
port: 端口号默认为554,若为默认可不填写。
channel: 通道号,起始为1。例如通道2,则为channel=2。
subtype: 码流类型,主码流为0(即subtype=0),辅码流为1(即subtype=1)。

starttime:开始时间

endtime:结束时间

大华DSS

rtsp://ip:[port]/dss/monitor/params?cameraid=设备编号$通道号&substream=码流类型

说明:

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5725b8416e7947ee9298abf02e1ec911.png

设备编号:平台上设备编号,例如1000004
通道号:设备下通道,从0(通道一)开始。
码流类型:1代表主码流,2代表辅码流

栗子:

rtsp://192.168.19.102:9090/dss/monitor/params?cameraid=1000112$0&substream=1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2151291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM基础篇学习笔记

【注&#xff1a;本文章为自学笔记&#xff0c;仅供学习使用。】 一、JVM简介 JVM是Java虚拟机的缩写&#xff0c;本质上是运行在计算机上面的程序&#xff0c;作用是运行Java字节码文件。 1.1 JVM的功能 Java如果不做优化&#xff0c;则性能不如C/C&#xff0c;因为后者会…

uv-ui组件的使用——自定义输入框的样式

一、官网的使用 二、自定义修改样式 我是在小程序中使用此组件 想要自定义修改样式的话&#xff0c;需要placeholderClass加上 placeholderStyle配合使用 tip1&#xff1a;单独使用placeholderClass&#xff0c;他只会第一次渲染时生效&#xff0c;输入文字再清除后就不生效…

Spring面试题合集

Spring 1.谈谈你对Spring的理解 首先Spring是一个轻量级的开源框架&#xff0c;为Java程序的开发提供了基础架构支持&#xff0c;简化了应用开发&#xff0c;让开发者专注于开发逻辑&#xff1b; 同时Spring是一个容器&#xff0c;它通过管理Bean的生命周期和依赖注入&#…

flask项目初始化

1、初始环境 python3.8 2、flask文档地址&#xff1a;https://flask.palletsprojects.com/en/latest/installation/#install-flask 3、初始化项目 $ mkdir myproject $ cd myproject $ python3 -m venv .venv $ . .venv/bin/activate $ pip install Flask4、打开项目mypr…

机器翻译之多头注意力(MultiAttentionn)在Seq2Seq的应用

目录 1.多头注意力&#xff08;MultiAttentionn&#xff09;的理念图 2.代码实现 2.1创建多头注意力函数 2.2验证上述封装的代码 2.3 创建 添加了Bahdanau的decoder 2.4训练 2.5预测 3.知识点个人理解 1.多头注意力&#xff08;MultiAttentionn&#xff09;的理念图…

云服务器使用

最近搭建一个内网穿透工具&#xff0c;推荐一个云服务器&#xff1a; 三丰台&#xff1a;https://www.sanfengyun.com/ 作为学生党这个服务器是免费的可以体验使用&#xff01;可以使用免费虚拟主机和云服务器&#xff0c;写一个申请的基本步骤方便大家构建 申请步骤&#x…

11.1图像的腐蚀和膨胀

基本概念-图像腐蚀 图像腐蚀是一种用于去除图像中小的对象或者突出物体边缘的形态学操作。 图像腐蚀&#xff08;erosion&#xff09;的基本概念 图像腐蚀通常用于二值图像&#xff0c;其基本原理是从图像中“侵蚀”掉一些像素点&#xff0c;这些像素点通常是边界上的或者是孤…

Word中引用参考文献和公式编号的方法

文章目录 应用参考文献对于单个文献引用多于多个文献同时引用 公式编号手动编号自动编号 参考&#xff1a; 应用参考文献 对于单个文献引用 word中的参考文献用交叉应用实现。 首先&#xff0c;将参考文献编号&#xff1a; 然后&#xff0c;在需要引用的地方用交叉引用插入…

VM虚拟机使用的镜像文件下载

文章目录 Windows系统进入微软官网下载工具以Windows10为例下载镜像文件 Windows系统 进入微软官网下载工具 微软中国官网&#xff1a;https://www.microsoft.com/zh-cn/ 以Windows10为例下载镜像文件 选择下载的路径 开始下载 安装windows10操作系统出现Time out问题及解决办…

【AI视频】Runway:Gen-2 运镜详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI视频 | Runway 文章目录 &#x1f4af;前言&#x1f4af;Camera Control&#xff08;运镜&#xff09;&#x1f4af;Camera Control功能测试Horizonta&#xff08;左右平移&#xff09;Vertical&#xff08;上下平移&#xff0…

Python 中的 Kombu 类库

Kombu 是一个用于 Python 的消息队列库&#xff0c;提供了高效、灵活的消息传递机制。它是 Celery 的核心组件之一&#xff0c;但也可以单独使用。Kombu 支持多种消息代理&#xff08;如 RabbitMQ、Redis、Amazon SQS 等&#xff09;&#xff0c;并提供了消息生产者和消费者的功…

ByteTrack多目标跟踪流程图

ByteTrack多目标跟踪流程图 点个赞吧&#xff0c;谢谢。

用 Pygame 实现一个乒乓球游戏

用 Pygame 实现一个乒乓球游戏 伸手需要一瞬间&#xff0c;牵手却要很多年&#xff0c;无论你遇见谁&#xff0c;他都是你生命该出现的人&#xff0c;绝非偶然。若无相欠&#xff0c;怎会相见。 引言 在这篇文章中&#xff0c;我将带领大家使用 Pygame 库开发一个简单的乒乓球…

python文字转wav音频

借鉴博客 一.前期准备 1. pip install baidu-aip 2. pip install pydub 3. sudo apt-get install ffmpeg 二.代码 from aip import AipSpeech from pydub import AudioSegment import time#input your own APP_ID/API_KEY/SECRET_KEY APP_ID 14891501 API_KEY EIm2iXtvD…

【可变模板参数】

文章目录 可变参数模板的概念可变参数模板的定义方式参数包的展开方式递归展开参数包逗号表达式展开参数包 STL容器中的emplace相关接口函数 可变参数模板的概念 可变参数模板是C11新增的最强大的特性之一&#xff0c;它对参数高度泛化&#xff0c;能够让我们创建可以接受可变…

linux入门——“linux基本指令”下

1.mv指令 mv指令用于移动文件或者目录。语法是mv 源文件 目标文件。它的用法需要注意&#xff1a; 当目标文件不存在的时候&#xff0c;默认是将源文件进行重命名操作&#xff0c;名字就是目标文件的名字&#xff0c;当目标文件存在的时候才会把源文件移动到目标文件。 目标文…

centos 7.9安装k8s

前言 Kubernetes单词来自于希腊语&#xff0c;含义是领航员&#xff0c;生产环境级别的容器编排技术&#xff0c;可实现容器的自动部署扩容以及管理。Kubernetes也称为K8S&#xff0c;其中8代表中间8个字符&#xff0c;是Google在2014年的开源的一个容器编排引擎技术&#xff…

WebLogic 后台弱⼝令GetShell

漏洞描述 通过弱⼝令进⼊后台界⾯ , 上传部署war包 , getshell 影响范围 全版本&#xff08;前提后台存在弱⼝令&#xff09; 环境搭建 cd vulhub-master/weblogic/weak_password docker-compose up -d 漏洞复现 默认账号密码&#xff1a;weblogic/Oracle123 weblogic…

SQL编程题复习(24/9/19)

练习题 x25 10-145 查询S001学生选修而S003学生未选修的课程&#xff08;MSSQL&#xff09;10-146 检索出 sc表中至少选修了’C001’与’C002’课程的学生学号10-147 查询平均分高于60分的课程&#xff08;MSSQL&#xff09;10-148 检索C002号课程的成绩最高的二人学号&#xf…

34. 模型材质父类Material

学习到现在大家对threejs的材质都有简单的了解&#xff0c;本节课主要结合文档&#xff0c;从JavaScript语法角度&#xff0c;给大家总结一下材质API的语法。 材质父类Material 查询threejs文档&#xff0c;你可以看到基础网格材质MeshBasicMaterial、漫反射网格材质MeshLamb…