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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Unity Transform 组件
  • docker部署个人网页导航
  • QFramework v1.0 使用指南 更新篇:20240918. 新增 BindableList
  • 瑞芯微RK3588开发板Linux系统添加自启动命令的方法,深圳触觉智能Arm嵌入式鸿蒙硬件方案商
  • Python爬虫解析工具之xpath使用详解
  • 从0开始学ARM
  • 【VitualBox】VitualBox的网络模式+网络配置
  • 情感类智能体——你的微信女神
  • 防火墙配置变更管理
  • 基于JAVA+SpringBoot+Vue的智能无人仓库管理
  • C++初阶学习——探索STL奥秘——反向迭代器
  • C++初阶学习——探索STL奥秘——标准库中的priority_queue与模拟实现
  • 【正负交替的分数求和】
  • OpenAI GPT o1技术报告阅读(3)-英文阅读及理解
  • 浅谈C++调用COM组件
  • hexo+github搭建个人博客
  • 收藏网友的 源程序下载网
  • Android优雅地处理按钮重复点击
  • Asm.js的简单介绍
  • C语言笔记(第一章:C语言编程)
  • Java 多线程编程之:notify 和 wait 用法
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • JWT究竟是什么呢?
  • KMP算法及优化
  • mac修复ab及siege安装
  • 多线程 start 和 run 方法到底有什么区别?
  • 二维平面内的碰撞检测【一】
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 爬虫模拟登陆 SegmentFault
  • 一个项目push到多个远程Git仓库
  • "无招胜有招"nbsp;史上最全的互…
  • #DBA杂记1
  • (Qt) 默认QtWidget应用包含什么?
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (一) 初入MySQL 【认识和部署】
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)Oracle存储过程编写经验和优化措施
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • ***详解账号泄露:全球约1亿用户已泄露
  • .net 4.0发布后不能正常显示图片问题
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net 反编译_.net反编译的相关问题
  • .NET 服务 ServiceController
  • .Net 应用中使用dot trace进行性能诊断
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .Net中ListT 泛型转成DataTable、DataSet
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @RequestBody与@ModelAttribute
  • [ linux ] linux 命令英文全称及解释
  • [100天算法】-实现 strStr()(day 52)
  • [20190401]关于semtimedop函数调用.txt
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [Codeforces] probabilities (R1600) Part.1