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

FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.4,SDP协议分析

SDP在4566 中有详细描述。

SDP 全称是 Session Description Protocol,

翻译过来就是描述会话的协议。

主要用于两个会话实体之间的媒体协商。

什么叫会话呢,比如一次网络电话、一次电话会议、一次视频聊天,这些都可以称之为一次会话。

那为什么要去发这个描述文本呢,主要是为了解决参与会话的各成员之间能力不对等的问题,如果参加本次通话的成员都支持高质量的通话,但是我们没有去进行协议,为了兼容性,使用的都是普通质量的通话格式,这样就很浪费资源了。所以 SDP 的作用还是很有必要的。

SDP(Session Description Protocol) 完全是⼀种会话描述格式 ― 它不属于传输协议 ― 它只使⽤不 同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、 实时流协议(RTSP)、 MIME 扩展协议的电⼦邮件以及超⽂本传输协议(HTTP)。SDP协议是也是基于⽂本的协议,这样就能保 证协议的可扩展性⽐较强,这样就使其具有⼴泛的应⽤范围。SDP 不⽀持会话内容或媒体编码的协商,所 以在流媒体中只⽤来描述媒体信息。媒体协商这⼀块要⽤ RTSP 来实现.

SDP 协议结构 key = value 

key 一般是一个字母,

value 的值由key的啥 对应不同的值

协议中的特殊符号 *

OPTIONAL items are marked with a "*".
在协议中 用 * 表示 是  可选的
如果没有 *,则表示是 必选的

由两大部分组成 或者三大部分组成,原始协议中将会话时间和重复信息划分到 (time description中)

协议部分说明是三大部分

Session description
v= (protocol version)
o= (originator and session identifier)
s= (session name)
i=* (session information)
u=* (URI of description)
e=* (email address)
p=* (phone number)
c=* (connection information -- not required if included in
all media)
b=* (zero or more bandwidth information lines)
One or more time descriptions ("t=" and "r=" lines; see below)
z=* (time zone adjustments)
k=* (encryption key)
a=* (zero or more session attribute lines)
Zero or more media descriptions
Time description
t= (time the session is active)
r=* (zero or more repeat times)
Media description, if present
m= (media name and transport address)
i=* (media title)
c=* (connection information -- optional if included at
session level)
b=* (zero or more bandwidth information lines)
k=* (encryption key)
a=* (zero or more media attribute lines)

会话级别信息

协议版本号(v)(必选)

version的缩写

作用:⼀个会话描述的开始,前⼀个会话结束标志。

描述: 表示sdp的版本号,不包含次版本号

        例子:v=0

会话源(o)(必选)

origin的缩写

作用:(会话源或者会话⽣成者,以及会话标识符)

        格式如下
        o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
        
        其中 username、session-id、nettype、addrtype、unicast-address ⼀起,唯⼀标识⼀
个会话
各字段含义如下:
username:发起者的⽤户名,不允许存在空格,如果应⽤不⽀持⽤户名,则为 -
sess-id:会话id,由应⽤⾃⾏定义,规范的建议是NTP(Network Time Protocol)时间戳。
sess-version:会话版本,⽤途由应⽤⾃⾏定义,只要会话数据发⽣变化时(⽐如编码),sess
version随着递增就⾏。同样的,规范的建议是NTP时间戳。
nettype:⽹络类型,⽐如 IN 表示 Internet
addrtype:地址类型,⽐如 IP4 IV6
unicast-address:域名,或者IP地址。
        例子: o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
        

会话名称(s)(必选)

Session Name 的缩写

        (会话名称)这个字段是个⽂本字符串,可以显示给会话参与者。

        s=SDP Seminar

        s=No Name

时间描述(t)(必选)

        (会话时间)这个字段指明会话开始时间与结束时间。
例子
       t=2873397496 2873404696
        t=0 0
  • 描述:t字段描述了会话的开始时间和结束时间, 为 NTP时间,单位是秒;如果 为0表示过了之后,会话一直持续;当 和 都为0的时候,表示持久会话,如拉实时流;

属性(a)(可选)一般都会有值

a=<attribute>
a=<attribute>:<value>
可选字段中,连接信息字段是特别与条件相关的。因为该字段定义了数据应发送到的⽹络地址,所以必须 被包含进会话描述中的某个地⽅。
        例子
                a=tool:libavformat 60.3.100

会话信息(i)(可选)

(会话信息)对字段的⽂本描述,提供了⽐会话名称更多的信息。该字段既可以⽤于会话级也可以⽤ 于媒体级。

例子

i=A Seminar on the session description protocol

URI(u)(可选)

(描述的URI地址)URI信息,通过这个地址可以获取更多会话相关信息。例如,⼀个会议可能公布 在WEB⻚⾯上,所以需要该WEB的URI。每个会话只能提供⼀个URI
例子

u=http://www.example.com/seminars/sdp.pdf

E-mail地址(e)(可选)

E=(E-mail地址)负责会话个体的E-mail地址,可以有多个。只能⽤于会话级别。
例子
e=j.doe@example.com (Jane Doe)

电话号码(p)(可选)

可以有多个,会话级别。
例子:
p=+1 617 555-6011
这里没有查到在国内应该怎么写电话号码,在协议中的例子 有 +,有 -,从例子中可以看到,不止是数字,应该+和-也能用

连接信息(c)(可选)

Connection Data

(连接信息)该字段提供连接数据,包括网络类型、地址类型和连接地址。可应⽤于会话级也可以⽤ 于媒体级
  • network type:网络类型,一般为IN,表示internet;
  • address type:地址类型,一般为IP4;
  • connection address,地址,可能为域名或ip地址两种形式;
在会话级时:   c=IN IP4 224.2.17.12/127
在媒体级时:  

带宽信息(b)(可选)

(带宽信息)指明带宽需求,单位 kbit/s , 可⽤于两个级别
b=<bwtype>:<bandwidth>
  • 描述:该选项描述了建议的带宽,单位 kbs/s,可选,modifier包括两种类型,CT和AS,CT表示总带宽,AS表示单个媒体带宽的最大值;bandwidth表示具体的带宽;

重复信息(r)(可选)

r=(重复次数)如果是有规律的⽇程安排活动,这个字段⽤来指明会话重复频次和时间。
r=<repeat interval> <active duration> <offsets from start-time>
重复间隔
活动持续时间
与开始时间的偏移
r=7d 1h 0 25h
d - days (86400 seconds)
h - hours (3600 seconds)
m - minutes (60 seconds)
s - seconds (allowed for completeness)

时区调整(z)(可选)

(时区调整)⽤于按⽇程安排的有规律活动会话。会话可能会夸时区,避免时区变更造成的混乱。
z=<adjustment time> <offset> <adjustment time> <offset> ....
z=2882844526 -1h 2898848070 0

加密密钥(k)(可选)

(加密密钥)为了对媒体加密、解密,该字段提供了⼀个加密密钥或者规定了⼀个获取密钥的机制。 可⽤于两个级别。
k=<method>
k=<method>:<encryption key>
k=clear:<encryption key>
k=base64:<encoded encryption key>
k=uri:<URI to obtain key>
k=prompt

媒体级别信息

媒体描述(m)

表示一个会话的媒体信息;

格式: m=(媒体类型)(端⼝号码)(传送层协议)(格式列表)


        media:媒体类型。有"audio",“video”,“application”,“data”(不向用户显示的数据),“control”(描述额外的控制通道);
        port:表示媒体流发往传输层的端口,对于RTP,偶数端口用来传输数据,奇数端口
对应RTCP用来传输信令;
        transport type:表示传输协议,与"c="一行相关联,一般用RTP/AVP表示,即 Realtime Transport Protocol using the Audio/Video profile over udp,即我们常说的RTP over udp;
        fmt list:表示媒体格式,分为静态绑定和动态绑定;
                静态绑定:媒体编码方式与RTP负载类型有确定的一一对应关系,如: m=audio 0 RTP/AVP 8;
                动态绑定:媒体编码方式没有完全确定,需要使用rtpmap进行进一步的说明;如下例子

                        m=video 0 RTP/AVP 96
                        a=rtpmap:96 H264/90000

该例子说明, 可以理解为 m 是video的,端口号由于还没有指定目前为0,传输协议为RTP/AVP,媒体格式为96(协议中称之为 payload type),这个96是啥意思呢?在 a=rtpmap中说明了,对应的编码名称为h264, clock rate为90000.。。关于a的详尽说明,参考后面a属性的说明。
        fmt list : 对应对应的⾳频负载类型(PT) 如果格式列表中 列出了所⽀持的所有不同类型的媒体格式。优先使⽤靠前的格式。( 15 3 0
格式列表中只有一个的例子
m=video 0 RTP/AVP 96
如果某个系统准备在端⼝ 45678 可以处理⼏种编码的语⾳: G.728 编码格式(负载类型为15)、 GSM 编码 格式(负载类型为3)、 G.711 u 编码格式(负载类型为0),⽽且系统优先采⽤ G.728 格式,则相应的媒体 信息如下所示:
格式列表中支持多个的例子
m=audio 45678 RTP/AVP 15 3 0

媒体信息(i)(可选)

协议中关于在媒体信息中的说明如下:
i=* (media title)

连接信息(c)(会话级进⾏了规定,这⾥可选)

带宽信息(b)(可选)

加密密钥(k)(可选)

属性(a)(可选,但是一般都要填充)

属性有两种形式,第⼀种是特征属性,第⼆种属于值属性。SDP描述了多个建议属性。

a=<attribute>
a=<attribute>:<value>

特征属性:

例如a=sendonly  表明会话描述的发送者只希望发送数据⽽不打算接收数据,端⼝号⽆意义,可以置为0。

例如 a=recvonly   表明这个会话描述的发送者只想接收数据⽽不打算发送数据。
值属性:
a= rtpmap 在协议中,SIP建议尽量 使用该属性 ,因此要特别分析一下
格式:a=rtpmap:(净荷类型)(编码名)/(时钟速率)【/(编码参数)】
a=rtpmap:<payload type> <encoding name>/<clock rate> [/<encoding parameters>]
a=control:(⾳/视频连接信息)
a=control:rtsp://192.168.1.197/h264stream0/trackID=0
a=rtpmap:96 H264/90000
a=rtpmap 
rtpmap 属性提供了⼀个在 VoIP 应⽤中的重要属性使⽤⽅法,该属性可⽤于媒体流,在媒体格式不是静态的 RTP 负载类型时特别有⽤。
严格来说, “rtpmap” 只在使⽤动态负载类型情况下才是必须的,例如标准的 G.711 语⾳是静态 RTP 负载类 型,采⽤如下⽅法就可以对它完整描述:
m=audio 45678 RTP/AVP 0
⽽对动态负载来说需要指定更多信息才能使远端完全识别到媒体编码,例如 16 位线性编码 16kHz 取样的⽴ 体声⾳就是⼀个动态 RTP 负载类型,如果我们采⽤动态负载类型 98 表示这个媒体流,那么 SDP 格式如下:
m=audio 45678 RTP/AVP 98
a=rtpmap 98 L16/16000/2
SIP 建议⽆论是静态负载还是动态负载,尽量都要采⽤该属性
a=rtpmap在协议中,SIP建议尽量使用该属性,因此要特别分析一下,

参见上面的分析

a=fmtp


fmtp(format parameters)用于指定媒体数据格式。

格式:a=fmtp:<format> <format specific parameters>

示例:a=fmtp:111 minptime=10;useinbandfec=1

表示PayloadType值为111的数据(Opus数据):以10ms长的音频数据为一帧,且数据经FEC(Forward Error Correction,前向纠错)编码。

 结合起来分析:

Media Description, name and address (m): video 0 RTP/AVP 96   
        Media Attribute (a): rtpmap:96 H264/90000
        Media Attribute (a): fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAKKzZQHgGWwFqAgICgAAAAwCAAAAYB4wYyw==,aOvjyyLA; profile-level-id=640028
        Media Attribute (a): control:streamid=0

我是video媒体类型,目前接口为0,,使用RTP/AVP协议,使用媒体格式编号为96

        rtpmap 则说明 96代码的是 h264编码,时钟速率为90000

        fmtp (format parameters)说明 96媒体数据的格式 :

                        packetization-mode =1;

                        sprop-parameter-sets = Z2QAKKzZQHgGWwFqAgICgAAAAwCAAAAYB4wYyw==,aOvjyyLA;

                        profile-level-id=640028

         control:streamid=0 说明ffmpeg对应的streamid 为0

例子

    Session Description Protocol
        Session Description Protocol Version (v): 0
        Owner/Creator, Session Id (o): - 0 0 IN IP4 127.0.0.1
        Session Name (s): No Name
        Connection Information (c): IN IP4 192.168.245.130
        Time Description, active time (t): 0 0
        Session Attribute (a): tool:libavformat 60.3.100
        Media Description, name and address (m): video 0 RTP/AVP 96
        Media Attribute (a): rtpmap:96 H264/90000
        Media Attribute (a): fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAKKzZQHgGWwFqAgICgAAAAwCAAAAYB4wYyw==,aOvjyyLA; profile-level-id=640028
        Media Attribute (a): control:streamid=0
        Media Description, name and address (m): audio 0 RTP/AVP 97
        Bandwidth Information (b): AS:128
        Media Attribute (a): rtpmap:97 MPEG4-GENERIC/44100/2
        Media Attribute (a): fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=121056E500
        Media Attribute (a): control:streamid=1

技巧:在 cmd 上打开 SDP 的log用来观察SDP的 内容

1. 启动 RTSP 服务器后

2. 使用ffmpeg 推流 或者ffplay拉流的时候 后面加上  -loglevel 40

使用推流 和 拉流的 方式打开

ffmpeg -re -i "zerenlian.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://192.168.245.130/test/002zerenlianmp4 -loglevel 40
 

ffplay -rtsp_transport tcp rtsp://192.168.245.130/test/002zerenlianmp4 -loglevel 40

相关文章:

FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.4,SDP协议分析

SDP在4566 中有详细描述。 SDP 全称是 Session Description Protocol&#xff0c; 翻译过来就是描述会话的协议。 主要用于两个会话实体之间的媒体协商。 什么叫会话呢&#xff0c;比如一次网络电话、一次电话会议、一次视频聊天&#xff0c;这些都可以称之为一次会话。 那为什…...

STM32 高级 WIFi案例1:测试AT指令

需求描述 测试AT指令是否能够正常控制ESP32的wifi&#xff0c;比如重启、读取设备信息等。 思路&#xff1a; stm32通过串口usart2向ESP32发布命令。ESP32通过串口1返回信息。 配置&#xff1a; 第一步&#xff1a;对ESP32芯片烧录可以读取stm32命令的固件&#xff08;fac…...

Mono里运行C#脚本18—mono_image_load_names

前面已经分析完成加载CLR的流表,接着下来就是使用前面分析的数据,更进一步来处理了。下面就是通过函数mono_image_load_names获得程序集的名称和模块名称。 在CLI定义的文档里,表Assembly : 0x20: Assembly表结构信息,以下是该表各列的简要说明: HashAlgId: 这是一个4字…...

Java和Python区别: 应用领域与性能抉择的深度解析

文章目录 1. 引言2. 语言特性对比&#xff1a;灵活性与严谨性的碰撞3. 应用场景分析&#xff1a;专注任务的工具选择3.1 数据库交互&#xff1a;Java 的优势所在3.2 图像识别与计算&#xff1a;Python 的专长3.3 Web 开发 4. 高并发请求处理&#xff1a;架构设计与硬件选择4.1 …...

SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者

SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者 文章目录 目录 前言 一、启动SQL server服务的三种方法 1.不启动SQL server服务的影响 2.方法一&#xff1a;利用cmd启动SQL server服务 3.方法二&#xff1a;利用SQL Serv…...

基于Docker+模拟器的Appium自动化测试(二)

模拟器的设置 打开“夜神模拟器”的系统设置&#xff0c;切换到“手机与网络”页&#xff0c;选中网络设置下的“开启网络连接”和“开启网络桥接模式”复选框&#xff0c;而后选择“静态IP”单选框&#xff0c;在IP地址中输入“192.168.0.105”&#xff0c;网关等内容不再赘述…...

CSS系列(47)-- Animation Timeline详解

前端技术探索系列&#xff1a;CSS Animation Timeline详解 ⏱️ 致读者&#xff1a;探索动画时间线的艺术 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 CSS Animation Timeline&#xff0c;这个强大的动画控制特性。 基础概念 &#x1f680; 时间线定义 …...

1、pycharm、python下载与安装

1、去官网下载pycharm 官网&#xff1a;https://www.jetbrains.com/pycharm/download/?sectionwindows 2、在等待期间&#xff0c;去下载python 进入官网地址&#xff1a;https://www.python.org/downloads/windows/ 3、安装pycharm 桌面会出现快捷方式 4、安装python…...

【翻译】优化加速像素着色器执行的方法

中文翻译 在回复我的 Twitter 私信时,我遇到了一个关于如何提高像素/片段着色器执行速度的问题。这是一个相当广泛的问题,具体取决于每个 GPU/平台和游戏内容的特性,但我在本帖中扩展了我“头脑风暴”式的回答,以便其他人也觉得有用。这不是一份详尽的清单,更像是一个高层…...

ZLib库使用详细教程 以及标准ZLib函数和QT自带压缩函数比较

1. 下载Zlib 官网下载地址如下&#xff1a;http://www.zlib.net/ 2. 利用cmake编译zlib 有两种方法可以打开cmake-gui winR输入cmd打开命令行&#xff0c;在命令行中输入cmake-gui可以直接打开应用界面找到你一开始安装cmake的文件夹&#xff0c;在bin子文件夹中双击cmake-…...

android stdudio环境: gradle一直安装失败

一、一直显示如下错误 The specified Gradle distribution file:/home/wangqingyuan/.gradle/wrapper/dists/gradle-8.6-bin/gradle-8.6-bin.zip does not exist. 经分析&#xff0c;是因为应用本身设置了gradle版本的地址为本地&#xff1a; 应用目录&#xff1a;gradle/gra…...

2024年12月31日Github流行趋势

项目名称&#xff1a;free-programming-books 项目地址url&#xff1a;https://github.com/EbookFoundation/free-programming-books项目语言&#xff1a;HTML历史star数&#xff1a;344575今日star数&#xff1a;432项目维护者&#xff1a;vhf, eshellman, davorpa, MHM5000, …...

音视频入门基础:MPEG2-TS专题(24)——FFmpeg源码中,显示TS流每个packet的pts、dts的实现

音视频入门基础&#xff1a;MPEG2-TS专题系列文章&#xff1a; 音视频入门基础&#xff1a;MPEG2-TS专题&#xff08;1&#xff09;——MPEG2-TS官方文档下载 音视频入门基础&#xff1a;MPEG2-TS专题&#xff08;2&#xff09;——使用FFmpeg命令生成ts文件 音视频入门基础…...

设计模式の状态策略责任链模式

文章目录 前言一、状态模式二、策略模式三、责任链模式 前言 本篇是关于设计模式中的状态模式、策略模式、以及责任链模式的学习笔记。 一、状态模式 状态模式是一种行为设计模式&#xff0c;核心思想在于&#xff0c;使某个对象在其内部状态改变时&#xff0c;改变该对象的行为…...

TI毫米波雷达原始数据解析之Lane数据交换

TI毫米波雷达原始数据解析之Lane数据交换 背景Lane 定义Lane 确认确认LVDS Lane 数量的Matlab 代码数据格式参考 背景 解析使用mmWave Studio 抓取的ADC Data Lane 定义 芯片与DCA100之间的数据使用LVDS接口传输&#xff0c;使用mmWave Studio 配置过程中有一个选项是LVDS L…...

Python-Pdf转Markdown

使用pdfminer.sixmarkdownify pdfminer.six可以提取Pdf文本内容markdownify可以将文本内容写markdown文件 安装 pip install pdfminer.six pip install markdownify实现 from pdfminer.high_level import extract_text from markdownify import markdownifydef pdf2markdo…...

win32汇编环境下,双击窗口程序内生成的listview列表控件的某行,并提取其内容的示例程序

;运行效果 ;双击后 ;上源码&#xff0c;仔细研究里面的几条备注就理解原理了 ;提取窗口程序内生成的listview列表控件的内容示例程序 ;抄下面源码&#xff0c;可以在radasm里面直接编译运行。主要的部分加了备注。 ;>>>>>>>>>>>>>>…...

对45家“AI+安全”产品/方案的分析

一. 关键洞察 “AI+安全”创新非常活跃,一片百家争鸣之势,赛道选择上,以事件分诊Incident Triage、 安全辅助Security Copilots、自动化Automation三者为主为主,这充分反映了当前安全运营的主要需求,在产品理念选择上以 AI 和 自动化为主,这确实又切合上了在关键…...

家用电器销售系统|Java|SSM|JSP|

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…...

小程序租赁系统构建指南与市场机会分析

内容概要 在当今竞争激烈的市场环境中&#xff0c;小程序租赁系统正崭露头角&#xff0c;成为企业转型与创新的重要工具。通过这个系统&#xff0c;商户能够快速推出自己的小程序&#xff0c;无需从头开发&#xff0c;节省了大量时间和资金。让我们来看看这个系统的核心功能吧…...

《XML Schema 字符串数据类型》

《XML Schema 字符串数据类型》 1. 引言 XML Schema 是一种用于描述和验证 XML 文档结构和内容的语言。在 XML Schema 中&#xff0c;字符串数据类型是一种基本的数据类型&#xff0c;用于表示文本数据。本文将详细介绍 XML Schema 中的字符串数据类型&#xff0c;包括其定义…...

探索框架领域的新兴技术:微框架与插件化框架的崛起

近年来&#xff0c;随着软件开发技术的快速发展&#xff0c;开发者对框架的需求也在不断变化。从传统的重量级框架到轻量级微框架&#xff0c;以及支持高度扩展性的插件化框架&#xff0c;技术生态系统日新月异。本文旨在介绍这些新兴框架技术中的一些小众但创新的理念与实现&a…...

【数据结构-单调队列】力扣2762. 不间断子数组

给你一个下标从 0 开始的整数数组 nums 。nums 的一个子数组如果满足以下条件&#xff0c;那么它是 不间断 的&#xff1a; i&#xff0c;i 1 &#xff0c;…&#xff0c;j 表示子数组中的下标。对于所有满足 i < i1, i2 < j 的下标对&#xff0c;都有 0 < |nums[i1…...

【复盘】2024年终总结

工作 重构风控系统 今年上半年其实就是整体重构系统&#xff0c;经历了多次加班的&#xff0c;其中的辛酸苦辣只有自己知道&#xff0c;现在来看的话&#xff0c;其实对自己还有一定的成长&#xff0c;从这件事情上也明白 绩效能不能拿到A&#xff0c;在分配的任务的时候就决…...

QT 学习第十四天 QWidget布局

QT 学习十四天 布局 布局管理Qt Widgets 布局布局管理器简介基本布局管理器栅格布局管理器窗体布局管理器综合使用布局管理器设置部件大小可扩展窗口 布局管理 今天讲 Qt Widgets 和 Qt Quick 中的布局。 前者主要用布局管理器 后者除了布局管理器还有基于锚的布局&#xff08…...

各个Spring Cloud版本有何主要差异

Spring Cloud 的各个版本之间确实存在一些关键差异&#xff0c;这些差异主要体现在功能更新、性能优化、对新技术的支持以及对旧有技术的替代等方面。 1. Spring Cloud Dalston 这是 Spring Cloud 的一个早期版本&#xff0c;它提供了微服务架构所需的基本组件&#xff0c;如服…...

开发AI电子宠物 参考资料

开发AI电子宠物涉及多个方面&#xff0c;包括但不限于硬件选择、软件编程、人工智能算法的应用等。下面我将提供一个概览性的指南&#xff0c;并列出一些资源链接&#xff0c;帮助您开始自己的AI电子宠物项目。 AI电子宠物开发教程概览 1. 确定需求与规划 定义目标&#xff…...

数据结构与算法之动态规划: LeetCode 62. 不同路径 (Ts版)

不同路径 https://leetcode.cn/problems/unique-paths/description/ 描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “…...

操作系统论文导读(八):Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个

Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个关键性规范的零星任务的可调度性分析 目录 一、论文核心思想 二、基本定义 2.1 关键性指标 2.2 任务及相关参数定义 2.3 几个基础定义 三、可调度性分析 3.1 调度算法分…...

Android IO 问题:java.io.IOException Operation not permitted

问题描述与处理策略 1、问题描述 java.io.IOException: Operation not permittedjava.nio.file.FileSystemException: /storage/emulated/0/test/test.txt: Operation not permittedjava.io.IOException: Operation not permitted&#xff1a;异常为操作不被允许 java.nio.f…...

Unity Mesh生成Cube

1. 配置一个Cube的每个面的数据 一共是6个面&#xff0c;每个面包含的数据包括4个顶点的相对顶点坐标&#xff08;Cube的中心为原点&#xff09;&#xff0c;法线方向&#xff0c;UV坐标&#xff0c;顶点渲染顺序&#xff0c;以及这个面用到的材质&#xff0c;因为这里是Top&am…...

Wend看源码-Java-Collections 工具集学习

摘要 java.util.Collections它提供了一系列静态方法&#xff0c;用于对集合&#xff08;如List、Set、Map等&#xff09;进行操作。这些操作包括排序、查找、替换、同步等多种功能&#xff0c;帮助开发者更方便地处理集合数据。以下是Collections 提供的一些主要方法的总结。…...

怎样用 Excel 做数据分析?

与其单纯地学习怎么使用Excel&#xff0c;不如结合AI工具来进行数据分析。 接下来就来盘一盘AI在Excel做数据分析方面会带来哪些改进和帮助。 原本不能非常复杂的公式&#xff0c;变成聊天的方式。Excel门槛被大大降低&#xff0c;以前技术大佬才能干的活&#xff0c;现在前台…...

深度学习——损失函数汇总

1. 连续值损失函数 总结:主要使用胡贝儿损失函数,应用于连续数值的预测之间的误差损失,参考地址 import torch import torch.nn as nna = torch.tensor([[1, 2], [3, 4]], dtype=torch.float) b = torch.tensor([[3, 5], [8, 6]], dtype=torch.float)loss_fn1 = torch.nn.M…...

KAFKA入门:原理架构解析

文章目录 一、认识kafka二、架构介绍2.1 工作流程2.2 Kafka可靠性保证2.3 Kafka存储 一、认识kafka Kafka到底是个啥&#xff1f;用来干嘛的&#xff1f; 官方定义如下&#xff1a; Kafka is used for building real-time data pipelines and streaming apps. It is horizont…...

记录第一次跑YOLOV8做目标检测

今天是24年的最后一天&#xff0c;终于要向新世界开始破门了&#xff0c;开始深度学习&#xff0c;YOLO来敲门~ 最近做了一些皮肤检测的功能&#xff0c;在传统的处理中经历了反复挣扎&#xff0c;终于要上YOLO了。听过、看过&#xff0c;不如上手体会过~ 1、YOLO是什么&#x…...

全场景——(十一)综合实现

文章目录 一、产品框架1.1 硬件框架1.2 设计思路1.2.1 上位机如何定位到传感器1.2.2 上位机如何读写传感器1.2.3 中控如何读写传感器1.2.4 上位机如何发送映射关系、传输固件1.2.5 上位机界面 1.3 软件框架 二、改造libmodbus 实现文件传输2.1 分析Write File Record 功能2.2 实…...

mysql系列7—Innodb的redolog

背景 本文涉及的内容较为底层&#xff0c;做了解即可&#xff0c;是以前学习《高性能Mysql》和《mysql是怎样运行的》的笔记整理所得。 redolog(后续使用redo日志表示)的核心作用是保证数据库的持久性。 在mysql系列5—Innodb的缓存中介绍过&#xff1a;数据和索引保存在磁盘上…...

数据表中列的完整性约束概述

文章目录 一、完整性约束概述二、设置表字段的主键约束三、设置表字段的外键约束四、设置表字段的非空约束五、设置表字段唯一约束六、设置表字段值自动增加七、设置表字段的默认值八、调整列的完整性约束 一、完整性约束概述 完整性约束条件是对字段进行限制&#xff0c;要求…...

深入解析 Wireshark 的 TLS 设置:应用场景与实操技巧

简述 在网络数据分析中&#xff0c;传输层安全&#xff08;TLS&#xff09;协议的流量解密和分析是一项重要的技能。Wireshark 提供了专门的设置选项&#xff0c;帮助用户处理 TLS 流量&#xff0c;例如解密会话、重组分片等。本文将详细解析上图所示的 Wireshark TLS 设置功能…...

小波与傅里叶变换在去噪效果上的对比分析-附Matlab源程序

&#x1f468;‍&#x1f393; 博主简介&#xff1a;博士研究生 &#x1f52c; 超级学长&#xff1a;超级学长实验室&#xff08;提供各种程序开发、实验复现与论文指导&#xff09; &#x1f4e7; 个人邮箱&#xff1a;easy_optics126.com &#x1f56e; 目 录 摘要一、…...

Tailwind CSS 实战:社交媒体信息流开发

在社交媒体的世界里&#xff0c;信息流就像是一条永不停歇的河流&#xff0c;承载着用户的分享与互动。记得在一个社交平台项目中&#xff0c;我们通过重新设计信息流的展示方式&#xff0c;让用户的平均浏览时长提升了 45%。今天&#xff0c;我想和大家分享如何使用 Tailwind …...

深入解析:谱分解、SVD与PCA在算法中的应用与实现

特征值分解&#xff08;EVD&#xff09;、奇异值分解&#xff08;SVD&#xff09;和主成分分析&#xff08;PCA&#xff09;是矩阵分解技术的三种重要形式&#xff0c;它们在人工智能中扮演了关键角色。随着数据维度的快速增长和信息复杂度的提升&#xff0c;这些技术为处理高维…...

C#编写的金鱼趣味小应用 - 开源研究系列文章

今天逛网&#xff0c;在GitHub中文网上发现一个源码&#xff0c;里面有这个金鱼小应用&#xff0c;于是就下载下来&#xff0c;根据自己的C#架构模板进行了更改&#xff0c;最终形成了这个例子。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 1) 初始化&#xff1b; 将样…...

Android 系统 AlarmManager 系统层深度定制

Android 系统 AlarmManager 系统层深度定制 目录 引言AlarmManager 概述AlarmManager 系统架构AlarmManager 核心代码解读AlarmManager 深度定制方法 修改 AlarmManagerService 修改定时任务调度策略增加定时任务类型定制内核层 修改定时触发精度增加定时触发类型优化定时任务…...

uniapp-vue3(下)

关联链接&#xff1a;uniapp-vue3&#xff08;上&#xff09; 文章目录 七、咸虾米壁纸项目实战7.1.咸虾米壁纸项目概述7.2.项目初始化公共目录和设计稿尺寸测量工具7.3.banner海报swiper轮播器7.4.使用swiper的纵向轮播做公告区域7.5.每日推荐滑动scroll-view布局7.6.组件具名…...

Debian-linux运维-docker安装和配置

腾讯云搭建docker官方文档&#xff1a;https://cloud.tencent.com/document/product/213/46000 阿里云安装Docker官方文档&#xff1a;https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance 天翼云常见docker源配置指导&#xff1a;htt…...

【每日学点鸿蒙知识】tensorflowlite编译、音频编码线程、沉浸式状态栏、TextArea最大字节数限制等

1、如何编译Tensorflow lite库&#xff1f; 之前项目基于tflite推理引擎做人脸识别的功能&#xff0c;鸿蒙侧如何复用tflite模型&#xff1f; tflite对Android和iOS本身支配了GPU支持&#xff0c;但是鸿蒙侧目前并没有&#xff0c;鸿蒙提供了自己的推理引擎&#xff0c;而且支…...

Windows上Git LFS的安装和使用

到Git LFS官网下载 传送门 初始化GitHub LFS和Git仓库 在仓库目录中运行&#xff1a; git lfs install再运行&#xff1a; git init跟踪大文件 git lfs track "*.zip"添加并提交文件 git add . git commit -m "Add large files"上传到我的github 配…...

嵌入式入门Day37

作业 驱动机械臂 #include <myhead.h>#define IP "192.168.124.16" #define SERPORT 8888int main(int argc, const char *argv[]) {//创建套接字int oldfd socket(AF_INET, SOCK_STREAM, 0);if (oldfd -1){perror("socket");return -1;}//连接服…...