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

一文详解WebRTC、RTSP、RTMP、SRT

背景

好多开发者,希望对WebRTC、RTSP、RTMP、SRT有个初步的了解,知道什么场景该做怎样的方案选择,本文就四者区别做个大概的介绍。

WebRTC

提到WebRTC,相信好多开发者第一件事想到的就是低延迟,WebRTC(Web Real-Time Communication)是一项实时通讯技术,它允许网络应用或者站点在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流、音频流或其他任意数据的传输。以下是关于WebRTC的详细介绍:

一、技术特点

  1. 实时性与高质量
    • WebRTC提供了低延迟、高质量的实时通信,使得音视频会议、在线教育、视频直播等实时应用更加流畅和自然。
  2. 点对点通信
    • WebRTC支持直接在两个浏览器之间建立点对点的连接,提高了通信的效率和安全性。
  3. 加密安全
    • WebRTC通过SRTP(Secure Real-Time Transport Protocol)和DTLS(Datagram Transport Layer Security)来保护传输的音视频数据,确保通信内容的安全性和保密性。
  4. 跨平台兼容
    • WebRTC可以在多种操作系统和设备上运行,包括桌面电脑、移动设备和智能电视等,提供更广泛的兼容性。
  5. 自适应比特率
    • WebRTC支持自适应比特率传输,根据网络条件自动调整音视频质量,确保在不同网络环境下的流畅播放。

二、应用场景

WebRTC技术已经广泛应用于多个领域,包括但不限于:

  • 视频会议和在线会议:构建实时的视频会议和在线会议应用,提供多方通信和屏幕共享功能。
  • 在线教育:搭建在线教育平台,支持远程教学和互动交流。
  • 视频直播:实现实时的视频直播,支持实时聊天和互动功能。
  • 客户服务:构建在线客户服务平台,实现实时语音、视频和文字通信,提供更好的客户体验。
  • 社交网络:用于社交网络中的实时语音、视频通话,增强社交网络的交互性。
  • 智能硬件与智能家居:如无人机、摄像头监控、智能语音设备等,实现远程控制和数据传输。

三、技术架构与API

WebRTC的技术架构通常包括以下几个部分:

  • Web开发者API层:提供基于JavaScript的API,允许开发者在Web应用中直接调用浏览器提供的实时通信功能。
  • 浏览器厂商实现层:浏览器厂商可以根据标准自定义实现WebRTC的底层技术,如音视频采集、编解码、网络传输等。
  • 硬件适配层:与硬件相关的音频采集和渲染、视频捕捉、网络IO等模块,这些模块通常是可重载的,以增加WebRTC的灵活性和跨平台性。

四、优缺点

优点

  • 方便:用户无需安装任何插件或软件,即可通过浏览器实现实时通信。
  • 免费:Google开源WebRTC技术,不收取任何费用。
  • 强大的打洞能力:支持NAT和防火墙穿透技术,如STUN、ICE、TURN等。

缺点

  • 缺乏服务器方案的设计和部署:需要开发者自行设计和管理服务器方案。
  • 传输质量难以保证:基于P2P的传输设计难以保障复杂的互联网环境下的传输质量。
  • 设备端适配问题:在不同设备和操作系统上可能存在适配性问题,如回声、录音失败等。
  • 对Native开发支持不够:虽然也可以用于Native开发,但框架设计复杂,API粒度较细。

RTSP

RTSP(Real Time Streaming Protocol)是一种网络控制协议,用于控制流媒体服务器,以实现音频、视频等多媒体流的实时播放和控制。RTSP本身并不传输流媒体数据,而是作为控制流媒体传输的协议,通常与RTP(Real-time Transport Protocol)和RTCP(Real-time Transport Control Protocol)等协议协同工作。

以大牛直播SDK的模块为例,海康2560*1440 8M码率,分别用vlc player和大牛直播SDK的SmartPlayer播放为例,延迟效果。

RTSP的主要特点

  1. 媒体流控制
    • RTSP提供了对媒体流的控制功能,如播放、暂停、快进、快退、定位等操作。这使得客户端可以根据需要灵活地控制媒体流的播放。
  2. 可扩展性
    • RTSP支持多种传输层协议,如TCP和UDP,可以根据网络环境和应用需求选择合适的传输方式。同时,RTSP还支持多种编解码器和媒体格式,具有良好的可扩展性。
  3. 跨平台性
    • RTSP是一种基于文本的协议,易于解析和扩展,可以在不同的操作系统和平台上实现。这使得RTSP成为流媒体传输领域的一种通用协议。
  4. 会话控制
    • RTSP支持会话的概念,可以建立和管理多个媒体流之间的会话关系。这使得RTSP可以处理复杂的多媒体应用场景,如多方视频会议等。

RTSP的应用场景

RTSP广泛应用于各种流媒体传输场景,包括但不限于:

  • 网络视频监控:在闭路电视监控系统中,RTSP用于控制摄像头和流媒体服务器之间的视频流传输,实现远程监控和回放功能。
  • 网络广播:在网络广播系统中,RTSP用于控制广播媒体流的播放和分发,确保观众可以实时接收并控制广播内容。
  • 流媒体点播:在流媒体点播系统中,RTSP用于实现用户对媒体文件的点播请求和播放控制,提供个性化的播放体验。
  • 视频会议:在视频会议系统中,RTSP可以用于控制多方视频流的传输和同步,确保会议的顺利进行。

RTSP与RTP、RTCP的关系

RTSP通常与RTP和RTCP一起使用,以实现流媒体的传输和控制。其中,RTP负责媒体数据的实时传输,RTCP负责传输控制信息(如丢包率、延迟等),而RTSP则负责控制整个媒体会话的建立、维护和终止。三者协同工作,共同实现流媒体的实时传输和控制。

WebRTC、RTSP、RTMP比较

协议特点适用场景
WebRTC基于浏览器、点对点通信、低延迟、安全性高、广泛支持视频会议、在线教育、实时客户支持、实时协作工具、远程医疗
RTSP控制协议、不直接传输数据、可扩展性、高效性监控系统、闭路电视网络、需要对媒体流进行精细控制的场景
RTMP基于TCP、广泛应用、灵活性高、安全性(通过加密)视频直播、视频点播、广播媒体、需要高性能和低延迟的实时流媒体传输场景

RTMP

RTMP(Real Time Messaging Protocol)是一种实时消息传输协议,它主要用于在流媒体服务器和客户端之间高效地传输音频、视频和数据。RTMP最初由Adobe公司开发,用于在Flash Player和Adobe Media Server(现在的Adobe Media Services)之间传输流媒体内容。尽管Adobe Flash Player和Adobe Media Server的更新和支持已经逐渐减少,但RTMP协议仍然被广泛使用,并且有许多开源和商业的RTMP服务器和客户端实现。

以大牛直播SDK的模块为例,Android平台分别为启动了轻量级RTSP服务,和RTMP推流,Windows分别播放RTSP和RTMP流,延迟效果如下。

RTMP的主要特点

  1. 基于TCP:RTMP使用TCP协议进行数据传输,这意味着它提供了比基于UDP的协议(如WebRTC的某些部分)更可靠的传输,但可能在高延迟或网络拥塞时表现不佳。

  2. 实时性:尽管RTMP基于TCP,但它被设计为支持实时流媒体传输。通过使用适当的缓冲和流控制机制,RTMP可以提供接近实时的流媒体体验。

  3. 兼容性:RTMP在流媒体行业有着广泛的兼容性,许多现有的流媒体平台和设备都支持RTMP。这使得RTMP成为将流媒体内容推送到多个平台和观众的一个流行选择。

  4. 易于集成:RTMP协议相对简单,且有许多开源和商业的库和工具可用于RTMP的编码、解码和传输。这使得RTMP易于集成到现有的应用程序和系统中。

  5. 安全性:虽然RTMP本身不提供加密功能,但可以通过在传输层(如使用HTTPS或TLS封装RTMP连接)或应用层(如使用RTMP的加密扩展)来增强安全性。

然而,RTMP也有一些缺点,特别是在现代流媒体环境中:

  • 延迟:由于RTMP基于TCP,并且通常使用较大的缓冲区来确保数据的可靠传输,因此它可能比其他一些实时通信协议(如WebRTC)具有更高的延迟。

  • 带宽效率:RTMP可能不如一些现代协议(如SRT)在带宽效率方面高效。这可能会导致在带宽受限的环境中流媒体质量下降。

  • Adobe依赖性:尽管RTMP现在是开源的,并且有许多非Adobe的实现,但它最初是由Adobe开发的,并且与Adobe的产品和服务紧密相关。这可能导致在某些情况下对Adobe技术的依赖。

RTMP的应用场景

1. 视频直播

RTMP协议在视频直播领域有着广泛的应用。通过RTMP协议,主播可以将实时视频流传输到流媒体服务器,观众则可以通过各种客户端(如网页浏览器、移动应用等)观看直播内容。RTMP的低延迟特性使得音视频数据可以实时传输,非常适合体育赛事直播、新闻现场报道、在线教育、社交媒体直播等需要实时互动的场景。

2. 视频点播

除了直播,RTMP协议也被用于视频点播领域。通过RTMP协议,视频文件可以被分块传输,并在客户端进行播放,同时支持视频的快进、快退等操作。这种方式满足了用户对于高清视频的点播需求,适用于在线视频课程、影视点播平台等场景。

3. 实时通讯

RTMP协议因其良好的实时性和可靠性,也被广泛应用于实时通讯领域。在视频会议、在线客服以及社交软件中,RTMP协议可以作为视频和音频数据的传输协议,保证实时通讯的稳定和流畅。

4. 其他流媒体应用

RTMP协议还可用于其他流媒体应用场景,如IPTV(交互式网络电视)服务中的低延迟传输、虚拟现实(VR)和增强现实(AR)应用中的远程场景实时音视频流传输等。

尽管如此,RTMP仍然是流媒体行业中一个非常流行和重要的协议,特别是在需要将流媒体内容推送到多个平台和观众时。随着技术的进步和新的协议(如WebRTC和SRT)的出现,RTMP可能会逐渐被一些更现代、更高效的协议所取代,但在可预见的未来,它仍将继续在流媒体行业中发挥重要作用。

SRT

SRT(Secure Reliable Transport)是一种开源的视频传输协议,旨在通过互联网高效、可靠且安全地传输视频流。SRT由Haivision公司开发并开源,它结合了UDP的效率和TCP的可靠性,同时增加了加密、错误恢复和多路传输等特性,以应对复杂的网络环境和高要求的实时视频传输场景。

SRT的主要特点

  1. 低延迟
    • SRT通过优化网络传输和减少协议开销,实现了低延迟的视频流传输,适合实时通信和直播等应用。
  2. 高可靠性
    • SRT结合了UDP的效率和TCP的可靠性,通过错误恢复机制(如重传和FEC前向纠错)来确保数据包的完整性和到达率。
  3. 安全性
    • SRT支持加密传输,可以保护视频流内容免受中间人攻击和其他安全威胁。
  4. 多路径传输
    • SRT支持多路径传输,可以在网络条件不佳的情况下,通过多条路径发送数据包,提高传输的稳定性和可靠性。
  5. 灵活性
    • SRT支持多种编解码器和媒体格式,可以灵活地适应不同的应用场景和设备。
  6. 开源与跨平台
    • SRT是一个开源项目,可以在多种操作系统和平台上使用,方便开发者进行集成和部署。

SRT的应用场景

SRT广泛应用于各种需要高效、可靠、安全传输视频流的场景,包括但不限于:

  • 视频直播:在视频直播领域,SRT可以确保低延迟、高质量的视频传输,提升观众的观看体验。
  • 远程制作:在远程制作场景中,SRT可以支持多路视频流的实时传输和同步,方便制作团队进行远程协作。
  • 视频点播:虽然SRT主要用于实时视频传输,但它也可以用于视频点播场景,提供高质量的视频流服务。
  • 视频监控:在视频监控领域,SRT可以确保视频数据的实时、可靠传输,提高监控系统的效率和安全性。

SRT与其他协议的比较

  • 与RTSP比较:RTSP主要是一种控制协议,用于控制流媒体服务器的媒体流传输,而SRT则是一种传输协议,专注于视频流的实时、可靠、安全传输。RTSP可以与SRT等传输协议结合使用,实现更复杂的流媒体应用。
  • 与RTMP比较:RTMP(Real Time Messaging Protocol)是一种基于TCP的传输协议,虽然也广泛用于视频直播,但在高延迟和丢包率较高的网络环境下表现不佳。SRT通过优化网络传输和增加错误恢复机制,可以在更复杂的网络环境中提供更好的传输效果。

总结

WebRTC作为一种实时通信技术,具有实时性、高质量、点对点通信、加密安全、跨平台兼容等优点,并在多个领域得到了广泛应用。然而,它也存在一些缺点和挑战,需要开发者在使用时加以注意和解决。

RTSP作为一种网络控制协议,在流媒体传输领域具有广泛的应用。它提供了对媒体流的控制功能,支持多种传输层协议和媒体格式,具有良好的可扩展性和跨平台性。通过与RTP和RTCP等协议协同工作,RTSP可以实现高质量的流媒体传输和控制,满足各种流媒体应用场景的需求。

SRT作为一种开源的视频传输协议,通过其低延迟、高可靠性、安全性和灵活性等特点,为实时视频传输提供了强有力的支持。它在视频直播、远程制作、视频监控等领域有着广泛的应用前景。随着SRT技术的不断发展和完善,相信它将在更多领域发挥重要作用。

简单来说:

如果追求实时性和浏览器兼容性:WebRTC是首选,因为它支持浏览器之间的点对点通信,且延时低。

如果需要进行流媒体播放控制:RTSP是合适的选择,因为它提供了丰富的控制功能。

如果用于直播领域:RTMP因其广泛的CDN支持和简单的协议实现,仍然是主流选择。

如果追求高质量的视频传输:SRT提供了低延迟、高可靠性的保障,是视频直播和远程监控等领域的优选。

写到这里,回答下好多开发者的疑惑,为什么WebRTC和SRT这么好,大牛直播SDK只做了跨平台的RTMP推送、RTMP播放、轻量级RTSP服务和GB28181设备接入?是的,WebRTC和SRT也都有适用的场景,WebRTC已经非常成熟,SRT实际上我们之前也有做过,只是没有对外发布,以目前我们的经历,能把RTMP推送、RTMP播放、RTSP播放、RTSP转RTMP推送、轻量级RTSP服务和GB28181设备接入模块做到一梯队高水平,属实不易,随着后续音视频需求越来越多,我们也会做相应的调整和跟进,与时俱进,提供更优异的低延迟音视频直播解决方案。

相关文章:

一文详解WebRTC、RTSP、RTMP、SRT

背景 好多开发者,希望对WebRTC、RTSP、RTMP、SRT有个初步的了解,知道什么场景该做怎样的方案选择,本文就四者区别做个大概的介绍。 WebRTC 提到WebRTC,相信好多开发者第一件事想到的就是低延迟,WebRTC(W…...

全国职业院校技能大赛(大数据赛项)-平台搭建Zookeeper笔记

ZooKeeper是一个分布式的、开放源码的分布式应用程序协调服务,为分布式应用提供一致性服务。它的设计目标是简化分布式系统的管理,保证多个节点之间的数据一致性和协调工作。ZooKeeper提供了类似文件系统的层次化命名空间,用来存储和管理元数…...

不同领域神经网络一般选择什么模型作为baseline(基准模型)

在神经网络研究中,选择合适的baseline(基线模型)是评估新方法有效性的重要步骤。基线模型通常是领域内公认的、性能良好的参考模型,用于比较和验证新提出模型的优势。以下是一些在不同任务和领域中常见的基线模型选择:…...

华为-IPv6与IPv4网络互通的6to4自动隧道配置实验

IPv4向IPv6的过渡不是一次性的,而是逐步地分层次地。在过渡时期,为了保证IPv4和IPv6能够共存、互通,人们发明了一些IPv4/IPv6的互通技术。 本实验以6to4技术为例,阐述如何配置IPv6过渡技术。 配置参考 R1 # sysname R1 # ipv6# interface GigabitEthernet0/0/1ip address 200…...

【spring中event】事件简单使用

定义事件类 /* * 1. 定义事件类 * 首先,我们创建一个自定义事件 UserRegisteredEvent,用于表示用户注册事件。 * */ public class UserRegisteredEvent extends ApplicationEvent {private final String email;public UserRegisteredEvent(Object sourc…...

leetcode每日一题day19(24.9.29)——买票需要的时间

思路:在最开始的情况下每人需要买的票数减一是能保持相对位置不变的, 如果再想减一就有可能 有某些人只买一张票,而离开了队伍, 所有容易想到对于某个人如果比当前的人买的多就按当前的人数量算 因为在一次次减一的情况下&#xf…...

智源研究院推出全球首个中文大模型辩论平台FlagEval Debate

近日,智源研究院推出全球首个中文大模型辩论平台FlagEval Debate,旨在通过引入模型辩论这一竞争机制对大语言模型能力评估提供新的度量标尺。该平台是智源模型对战评测服务FlagEval大模型角斗场的延展,将有助于甄别大语言模型的能力差异。 F…...

python实用脚本(二):删除xml标签下的指定类别

介绍 在目标检测中,有些时候会遇到标注好的类别不想要了的情况,这时我们可以运行下面的代码来批量删除不需要的类别节省时间。 代码实现: import argparseimport xml.etree.ElementTree as ET import osclasses [thin_smoke]def GetImgNam…...

vue3 父子组件调用

vue3 父子组件调用 父组件调用子组件方法 子组件使用defineExpose将方法抛出 父组件定义 function&#xff0c;子组件通过 defineExpose 暴露方法&#xff0c;父组件通过 ref 获取子组件实例&#xff0c;然后通过 ref 获取子组件方法。 // 父组件 <template><div>…...

线性模型到神经网络

&#x1f680; 在初始神经网络那一节&#xff08;链接如下&#xff1a;初始神经网络&#xff09;的最后&#xff0c;我们通过加大考虑的天数使得我们最后得到的模型Loss最终停留在了0.32k&#xff0c;当我们在想让模型更加准确的时候&#xff0c;是做不到的&#xff0c;因为我们…...

【架构】前台、中台、后台

文章目录 前台、中台、后台1. 前台&#xff08;Frontend&#xff09;特点&#xff1a;技术栈&#xff1a; 2. 中台&#xff08;Middleware&#xff09;特点&#xff1a;技术栈&#xff1a; 3. 后台&#xff08;Backend&#xff09;特点&#xff1a;技术栈&#xff1a; 示例场景…...

Stable Diffusion 蒙版:填充、原图、潜空间噪声(潜变量噪声)、潜空间数值零(潜变量数值零)

在Stable Diffusion中&#xff0c;蒙版是一个重要工具&#xff0c;它允许用户对图像的特定部分进行编辑或重绘。关于蒙版蒙住的内容处理选项&#xff0c;包括填充、原图、潜空间噪声&#xff08;潜变量噪声&#xff09;、浅空间数值零&#xff08;潜变量数值零&#xff09;&…...

ffmpeg录制视频功能

本文目录 1.环境配置2.ffmpeg编解码的主要逻辑&#xff1a;3. 捕获屏幕帧与写入输出文件4. 释放资源 在录制结束时&#xff0c;释放所有分配的资源。5.自定义I/O上下文6.对于ACC编码器注意事项 1.环境配置 下载并安装FFmpeg库 在Windows上 从FFmpeg官方网站下载预编译的FFmpeg…...

【LeetCode】每日一题 2024_10_1 最低票价(记忆化搜索/DP)

前言 每天和你一起刷 LeetCode 每日一题~ 大家国庆节快乐呀~ LeetCode 启动&#xff01; 题目&#xff1a;最低票价 代码与解题思路 今天这道题是经典动态规划&#xff0c;我们定义 dfs(i) 表示从第 1 天到 第 i 天的最小花费&#xff0c;然后使用祖传的&#xff1a;从记忆…...

[C++] 小游戏 征伐 SLG DNF 0.0.1 版本 zty出品

目录 先赞后看 养成习惯 War and Expedition SLG DNF 0.0.1 version 讲人话就是 图标解释&#xff1a; 绿色代表空地&#xff0c;可通过&#xff0c;对应数值 0 蓝色“~ ”为水&#xff0c;不可通过&#xff0c;对应数值 1 棕色“”为桥梁&#xff0c;可通过&#xff0…...

黑马头条day7-app端文章搜索

今天的内容也只是跑了一下 对于具体的实现掌握的很差 仔细看 es 在微服务学的es使用基本忘光了 这里用起来一点都熟悉 重学&#xff01;&#xff01;&#xff01; kafka异步 文章自动构建索引的时候用到了‘’ mongoDB 用来存储用户的搜索记录 遗忘&#xff08;拦截器 j…...

嵌入式必懂微控制器选型:STM32、ESP32、AVR与PIC的比较分析

目录 1 微控制器基础概述 1.1 微控制器基本概念 1.2 工作原理及架构 1.3 STM32、ESP32、AVR和PIC简介 2 微控制器性能比较分析 2.1 性能比较 2.2 功耗比较 2.3 功耗分析 2.4 外设接口对比 3 应用场景与选择策略 3.1 物联网应用场景 3.2 工业控制场景 3.3 智能家居场…...

Python selenium库学习使用实操二

系列文章目录 Python selenium库学习使用实操 文章目录 系列文章目录前言一、模拟登录二、表单录入 前言 在上一篇文章中&#xff0c;我们完成Selenium环境的搭建&#xff0c;和简单的自动化。今天继续深入学习。今天的目标是完成模拟登录&#xff0c;和表单录入。 一、模拟登…...

基于Hive和Hadoop的电信流量分析系统

本项目是一个基于大数据技术的电信流量分析系统&#xff0c;旨在为用户提供全面的通信数据和深入的流量使用分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 Spark…...

访问docker容器中服务的接口,报错提示net::ERR_CONNECTION_REFUSED

背景 使用httpclient和前端调用docker容器中部署的springboot服务接口,一直连接不上。 报错信息 AxiosError {message: Network Error, name: AxiosError, code: ERR_NETWORK, config: {…}, request: XMLHttpRequest, …} sys.ts:28 POST http://172.33.28.179:8181/sy…...

【mysql相关总结】

mysql相关总结 数据库小的表,全表扫描效率更高&#xff0c;不用建索引。 索引的类型 1.普通索引&#xff1a;基本的索引&#xff0c;没有任何约束限制 2.唯一索引&#xff1a;类似普通索引,有唯一约束性 3.主键索引&#xff1a;特殊的唯一索引,不允许有空值 4.组合索引&#xf…...

uniapp 微信小程序 微信支付

本章的内容我尽量描述的细致一些&#xff0c;哪里看不懂给我评论就可以&#xff0c;我看到进行回复 微信支付大致分为4步&#xff0c;具体看后端设计 1. 获取code 2. 根据code获取openid 3. 根据openid&#xff0c;以及部分订单相关数据&#xff0c;生成prepayId (预支付交易会…...

CSS 效果:实现动态展示双箭头

最近写了一段 CSS 样式&#xff0c;虽然不难&#xff0c;但实现过程比较繁琐。这个效果结合了两个箭头&#xff0c;一个突出&#xff0c;一个内缩&#xff0c;非常适合用于步骤导航或选项卡切换等场景。样式不仅仅是静态的&#xff0c;还可以通过点击 click 或者 hover 事件&am…...

Linux 创建开发用的账户

在Linux系统中&#xff0c;创建一个用于开发的用户账户通常涉及到添加用户、设置密码以及配置适当的权限和环境。这里将详细介绍如何在Linux系统中创建一个新的开发用户账户&#xff0c;包括为其配置sudo权限&#xff0c;使其能够执行需要管理员权限的命令。 步骤 1: 创建用户…...

检查一个CentOS服务器的配置的常用命令

在CentOS系统中&#xff0c;查看服务器配置的常用命令非常丰富&#xff0c;这些命令可以帮助用户快速了解服务器的硬件信息、系统状态以及网络配置等。以下是一些常用的命令及其简要说明&#xff1a; 1. 查看CPU信息 (1) cat /proc/cpuinfo&#xff1a;显示CPU的详细信息&…...

Redis 简单的消息队列

使用redis 进行简单的队列很容易&#xff0c;不需要使用较为复杂的MQ队列&#xff0c;直接使用redis 进行&#xff0c;不过唯一不足的需要自己构造生产者消费者&#xff0c;这里使用while True的方法进行消费者操作 目录 介绍数据类型StringHash 重要命令消息队列 介绍 key-v…...

C++:继承和多态,自定义封装栈,队列

1.栈&#xff1a; stack.cpp #include "stack.h"Stack::Stack():top(nullptr),len(0){} //析构函数 Stack::~Stack() {while(!empty()){pop();} }bool Stack::empty() //判断栈是否为空 {return topnullptr; }int Stack::size()//获取栈的大小 {return len; } //压…...

Python多个set中的交集

Python多个set中的交集 在 Python 中&#xff0c;集合&#xff08;set&#xff09;是一种非常有用的数据结构&#xff0c;它可以存储唯一的元素&#xff0c;并提供了高效的数学集合操作&#xff0c;包括求交集、并集和差集等。本文将重点介绍如何通过多重集合求交集&#xff0…...

百度百科 X-Bk-Token 算法还原

声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除! 文章目录 声明案例地址参数分析X-Bk-Token算法追踪X-Bk-Token后缀算法还原c 值跟踪与算法还原往期逆向文章推荐最近太忙了,博客摆烂了好…...

RUST语言的初印象-从一个模拟登陆谈起-slint+reqwest+aes

本文就一个做了三四天的小程序讲第一次学用RUST的感受&#xff0c;内附代码。 了角语言 从一些渠道听说了R&#xff0c;这个字母挺魔性&#xff0c;那个文章说C和R的团体已经上升到了宗教崇拜的高度&#xff0c;然后&#xff0c;我觉得必 有过人之处&#xff0c;大约10年没碰…...

网站建设 软件开发/百度推广服务费一年多少钱

下面的操作都是在linux下进行的&#xff0c;我用的Ubuntu。切换到su超级用户。 1.下载源码&#xff0c;有各种方法&#xff1a; ①你如果能访问谷歌的话&#xff0c;直接用git下载。 ②不能访问谷歌&#xff0c;那就搜索下载源码压缩包&#xff08;搜不到的可以联系我&#…...

实用写作网站/黄冈黄页88网黄冈房产估价

如果你是前端工程师的话&#xff0c;你应该对 caniuse 这个网站会比较熟悉。 这个网站的作用就是 对 CSS&#xff0c;JS 的一些兼容性问题&#xff0c;并且都从它反馈的兼容性数据中获益&#xff0c;让我们的线上项目更加稳定、和谐的跑在用户电脑里。 简单来说就是因为用户使…...

wordpress设置固定链接/推广公司产品

使用LINQ to SQL设计器设计Northwind数据库的五个类&#xff08;Product&#xff0c;Category&#xff0c;Customer&#xff0c;Order和OrderDetail&#xff09;的时候&#xff0c;每个类中的属性都映射了相应数据库中表的列&#xff0c;每个类的实例则代表了数据库表中的一条记…...

用ps做网站导航/广州百度推广代理公司

在推荐系统简介中&#xff0c;我们给出了推荐系统的一般框架。很明显&#xff0c;推荐方法是整个推荐系统中最核心、最关键的部分&#xff0c;很大程度上决定了推荐系统性能的优劣。目前&#xff0c;主要的推荐方法包括&#xff1a;基于内容推荐、协同过滤推荐、基于关联规则推…...

酷家乐网站做墙裙教程/微信朋友圈广告推广代理

1. 题目 原题链接 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 ‘X’ 和 ‘O’ &#xff0c;找到所有被 ‘X’ 围绕的区域&#xff0c;并将这些区域里所有的 ‘O’ 用 ‘X’ 填充 。 示例 1&#xff1a; 输入&#xff1a;board [[“X”,“X”,“X”,“X”],[“X”…...

xydown wordpress/免费推广引流平台推荐

玩懂手机网资讯&#xff0c;如果你是一名代码爱好者&#xff0c;自由开源爱好者&#xff0c;你可能非常熟悉GitHub&#xff0c;在国内大部分用户和企业更喜欢使用码云Gitee&#xff0c;很多企业和个人的项目都放置在码云Gitee上面&#xff0c;进行协作开发&#xff0c;对于大部…...