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

C# 实时流转换为m3u8

主要通过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.kler.cn/news/313363.html

相关文章:

  • docker 升级步骤
  • 从一个文本文件中挑选出符合条件的内容行
  • Java ----常用类
  • 算法课习题汇总(2)
  • java中SPI(服务提供者的接口)
  • 项目实训:CSS基本布局理解——WEB开发系列38
  • js中两种异步方式:async+await以及then
  • 梧桐数据库(WuTongDB):Volcano/Cascades 优化器框架简介
  • 毕业设计选题:基于ssm+vue+uniapp的捷邻小程序
  • Linux系统编程(基础指令)上
  • 《动手深度学习》线性回归简洁实现实例
  • 【Webpack--013】SourceMap源码映射设置
  • windows环境下配置MySQL主从启动失败 查看data文件夹中.err发现报错unknown variable ‘log‐bin=mysql‐bin‘
  • 使用vite+react+ts+Ant Design开发后台管理项目(二)
  • SpringBoot:关于Redis的配置失效(版本问题)
  • 6. Python 输出长方形,直角三角形,等腰三角形
  • 【Linux基础IO】深入Linux文件描述符与重定向:解锁高效IO操作的秘密
  • 解决“Windows系统中以管理员身份运行程序时无法访问映射的网络磁盘”的问题
  • C# WPF如何实现数据共享
  • C#使用实体类Entity Framework Core操作mysql入门:从数据库反向生成模型2 处理连接字符串
  • 2024年上海小学生古诗文大会倒计时一个月:做2024官方模拟题
  • 人家90年代就尝试过的模式:我们所热衷的“数科公司”
  • 基于spring的ssm整合
  • 航空航司reese84逆向
  • linux文件同步、传输
  • 数据结构不再难懂:带你轻松搞定图
  • linux-L6 linux管理服务的启动、重启、停止、重载、查看状态命令
  • EmguCV学习笔记 VB.Net 12.3 OCR
  • OpenAI GPT o1技术报告阅读(4)- 填字游戏推理
  • 【Git 操作】Git 的基本操作