流媒体传输 - RTSP Over HTTP

news2025/1/20 11:57:02

RTSP 的标准端口是 554,但是由于各种不同的防火墙等安全策略配置的原因,客户端在访问 554 端口时可能存在限制,从而无法正常传输 RTSP 报文。 但是 HTTP 端口(80 端口)是普遍开放的,于是就有了让 RTSP 报文通过 80 端口透传的想法,即 RTSP Over HTTP。

协议介绍

RTSP Over HTTP 的关键在于:让 RTSP 报文通过 HTTP 端口通信,但目前 RTSP Over HTTP 没有标准做法,苹果公司出了一份非正式文档公开在外,并且也被 Live555 等支持

基础知识

RTSP 和 HTTP

RTSP (Real Time Streaming Protocol,实时流传输协议) 和 HTTP (HyperText Transfer Protocol,超文本传输协议) 的共同点如下:

  • 两者均为应用层协议
  • 两者均为工作于客户端 - 服务端架构

两者区别如下:

  • HTTP 协议是无连接(HTTP/1.1 版本之后支持长连接),而 RTSP 为面向连接协议 > 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
  • HTTP 协议是无状态协议,而 RTSP 为有状态协议

协议交互

Live555 的具体做法如下

首先客户端开启 2 个 socket 链接服务器 HTTP 端口,我们称这 2 个 socket 分别为 "数据 socket" 和 "命令 socket"。

  1. 客户端通过 "数据 socket" 发送 HTTP GET 命令,请求 RTSP 链接。

  2. 服务器通过 "数据 socket" 响应 HTTP GET 命令,并回复成功 / 失败。

  3. 客户端创建 "命令 socket",并通过 "命令 socket" 发送 HTTP POST 命令,建立 RTSP 会话。

    至此,HTTP 的辅助功能完成,服务器不返回客户端的 HTTP POST 命令。接下来是 RTSP 在 HTTP 端口上的标准流程,但是需要通过 2 个 socket 协同完成,"命令 socket" 只负责发送,"数据 socket" 只负责接受。

  4. 客户端通过 "命令 socket" 发送 RTSP 命令(BASE64 编码加密)。

  5. 服务器通过 "数据 socket" 响应 RTSP 命令(明文)。

  6. 重复 Step4-Step5,直到客户端发送 RTSP PLAY 命令,服务器响应 RTSP PLAY 命令。

  7. 服务器通过 数据 socket" 向客户端传输音视频数据

    数据交互...

  8. 客户端通过 "命令 socket" 发送 RTSP TEARDOWN 命令(BASE64 编码加密)

  9. 服务器通过 "数据 socket" 响应 RTSP TEARDOWN 命令(明文)。

  10. 关闭 2 个 socket。

交互示例

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

通过海康的 IPC 和 海康播放器 VSPlayer 进行抓包,得到数据交互过程如下:

由于有两个连接之间进行交互 直接通过 Wirshark 观察数据不够清晰,这里对每次交互的数据方向和通道进行了注释

  1. Data Socket, C -> S

     GET /ch1/main/av_stream HTTP/1.0
     CSeq: 1
     User-Agent: NKPlayer-VSPlayer1.0
     x-sessioncookie: 6521ade129b5b5e14e8eacd
     Accept: application/x-rtsp-tunnelled
     Pragma: no-cache
     Cache-Control: no-cache
  2. Data Socket, S -> C

     HTTP/1.1 200 OK
     Connection: close
     Content-Type: application/x-rtsp-tunnelled
  3. Command Socket, C -> S

     POST /ch1/main/av_stream HTTP/1.0
     CSeq: 1
     User-Agent: NKPlayer-VSPlayer1.0
     x-sessioncookie: 6521ade129b5b5e14e8eacd
     Content-Type: application/x-rtsp-tunnelled
     Pragma: no-cache
     Cache-Control: no-cache
     Content-Length: 32767
     Expires: Sun, 9 Jan 1972 00:00:00 GMT

    至此,HTTP 的辅助功能完成,服务器不返回客户端的 HTTP POST 命令。接下来是 RTSP 在 HTTP 端口上的标准流程,但是需要通过 2 个 socket 协同完成,"命令 socket" 只负责发送,"数据 socket" 只负责接受。

  4. Command Socket, C -> S

     T1BUSU9OUyBydHNwOi8vMTAuMTkyLjQ0Ljk3OjU1NC9jaDEvbWFpbi9hdl9zdHJlYW0gUlRTUC8xLjANCkNTZXE6IDINClVzZXItQWdlbnQ6IE5LUGxheWVyLVZTUGxheWVyMS4wDQoNCg==
     -------------------------------------------------------------------
     OPTIONS rtsp://10.192.44.97:554/ch1/main/av_stream RTSP/1.0
     CSeq: 2
     User-Agent: NKPlayer-VSPlayer1.0
  5. Data Socket, S -> C

     RTSP/1.0 200 OK
     CSeq: 2
     Public: OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER
     Date:  Mon, Sep 21 2020 20:08:41 GMT
  6. Command Socket, C -> S

     REVTQ1JJQkUgcnRzcDovLzEwLjE5Mi40NC45Nzo1NTQvY2gxL21haW4vYXZfc3RyZWFtIFJUU1AvMS4wDQpDU2VxOiAzDQpVc2VyLUFnZW50OiBOS1BsYXllci1WU1BsYXllcjEuMA0KQWNjZXB0OiBhcHBsaWNhdGlvbi9zZHANCg0K
     -------------------------------------------------------------------
     DESCRIBE rtsp://10.192.44.97:554/ch1/main/av_stream RTSP/1.0
     CSeq: 3
     User-Agent: NKPlayer-VSPlayer1.0
     Accept: application/sdp
  7. Data Socket, S -> C

     RTSP/1.0 401 Unauthorized
     CSeq: 3
     WWW-Authenticate: Digest realm="IP Camera(E6990)", nonce="921e0ab66f8f6763ef05ecb06c4c86a0", stale="FALSE"
     WWW-Authenticate: Basic realm="IP Camera(E6990)"
     Date:  Mon, Sep 21 2020 20:08:41 GMT
  8. Command Socket, C -> S

     REVTQ1JJQkUgcnRzcDovLzEwLjE5Mi40NC45Nzo1NTQvY2gxL21haW4vYXZfc3RyZWFtIFJUU1AvMS4wDQpDU2VxOiA0DQpBdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9ImFkbWluIiwgcmVhbG09IklQIENhbWVyYShFNjk5MCkiLCBub25jZT0iOTIxZTBhYjY2ZjhmNjc2M2VmMDVlY2IwNmM0Yzg2YTAiLCB1cmk9InJ0c3A6Ly8xMC4xOTIuNDQuOTc6NTU0L2NoMS9tYWluL2F2X3N0cmVhbSIsIHJlc3BvbnNlPSIwNjk0ZjhkMmNlODE3NzE5OTIxOTk1MzJkNDdiNzNhZCINClVzZXItQWdlbnQ6IE5LUGxheWVyLVZTUGxheWVyMS4wDQpBY2NlcHQ6IGFwcGxpY2F0aW9uL3NkcA0KDQo=
     -------------------------------------------------------------------
     DESCRIBE rtsp://10.192.44.97:554/ch1/main/av_stream RTSP/1.0
     CSeq: 4
     Authorization: Digest username="admin", realm="IP Camera(E6990)", nonce="921e0ab66f8f6763ef05ecb06c4c86a0", uri="rtsp://10.192.44.97:554/ch1/main/av_stream", response="0694f8d2ce81771992199532d47b73ad"
     User-Agent: NKPlayer-VSPlayer1.0
     Accept: application/sdp
  9. Data Socket, S -> C RTSP/1.0 200 OK CSeq: 4 Content-Type: application/sdp Content-Length: 633

     v=0
     o=- 1600718921878550 1600718921878550 IN IP6 6d69:6e22:3a09:302c:a09:909:909:2240
     s=Media Presentation
     e=NONE
     b=AS:5100
     t=0 0
     a=control:*
     m=video 0 RTP/AVP 96
     c=IN IP4 0.0.0.0
     b=AS:5000
     a=recvonly
     a=x-dimensions:2560,1440
     a=control:trackID=1
     a=rtpmap:96 H264/90000
     a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z00AMpY1QFABa03AQEBQAABwgAAV+QBA,aO48gA==
     m=audio 0 RTP/AVP 8
     c=IN IP4 0.0.0.0
     b=AS:50
     a=recvonly
     a=control:trackID=2
     a=rtpmap:8 PCMA/8000
     a=Media_header:MEDIAINFO=494D4B48010200000400000111710110401F000000FA000000000000000000000000000000000000;
     a=appversion:1.0
  10. Command Socket, C -> S

    U0VUVVAgcnRzcDovLzEwLjE5Mi40NC45Nzo1NTQvY2gxL21haW4vYXZfc3RyZWFtL3RyYWNrSUQ9MSBSVFNQLzEuMA0KQ1NlcTogNQ0KQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJhZG1pbiIsIHJlYWxtPSJJUCBDYW1lcmEoRTY5OTApIiwgbm9uY2U9IjkyMWUwYWI2NmY4ZjY3NjNlZjA1ZWNiMDZjNGM4NmEwIiwgdXJpPSJydHNwOi8vMTAuMTkyLjQ0Ljk3OjU1NC9jaDEvbWFpbi9hdl9zdHJlYW0iLCByZXNwb25zZT0iNmRmZTdiMjhhMmZmZjliMTYxYmFjNWRkYWQxMjg5ZTQiDQpVc2VyLUFnZW50OiBOS1BsYXllci1WU1BsYXllcjEuMA0KVHJhbnNwb3J0OiBSVFAvQVZQL1RDUDt1bmljYXN0O2ludGVybGVhdmVkPTAtMQ0KDQo=
    -------------------------------------------------------------------
    SETUP rtsp://10.192.44.97:554/ch1/main/av_stream/trackID=1 RTSP/1.0
    CSeq: 5
    Authorization: Digest username="admin", realm="IP Camera(E6990)", nonce="921e0ab66f8f6763ef05ecb06c4c86a0", uri="rtsp://10.192.44.97:554/ch1/main/av_stream", response="6dfe7b28a2fff9b161bac5ddad1289e4"
    User-Agent: NKPlayer-VSPlayer1.0
    Transport: RTP/AVP/TCP;unicast;interleaved=0-1
  11. Data Socket, S -> C

    RTSP/1.0 200 OK
    CSeq: 5
    Session:       2090545605;timeout=60
    Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=11c14094;mode="play"
    Date:  Mon, Sep 21 2020 20:08:41 GMT
  12. Command Socket, C -> S

    U0VUVVAgcnRzcDovLzEwLjE5Mi40NC45Nzo1NTQvY2gxL21haW4vYXZfc3RyZWFtL3RyYWNrSUQ9MiBSVFNQLzEuMA0KQ1NlcTogNg0KQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJhZG1pbiIsIHJlYWxtPSJJUCBDYW1lcmEoRTY5OTApIiwgbm9uY2U9IjkyMWUwYWI2NmY4ZjY3NjNlZjA1ZWNiMDZjNGM4NmEwIiwgdXJpPSJydHNwOi8vMTAuMTkyLjQ0Ljk3OjU1NC9jaDEvbWFpbi9hdl9zdHJlYW0iLCByZXNwb25zZT0iNmRmZTdiMjhhMmZmZjliMTYxYmFjNWRkYWQxMjg5ZTQiDQpVc2VyLUFnZW50OiBOS1BsYXllci1WU1BsYXllcjEuMA0KVHJhbnNwb3J0OiBSVFAvQVZQL1RDUDt1bmljYXN0O2ludGVybGVhdmVkPTItMw0KU2Vzc2lvbjogMjA5MDU0NTYwNQ0KDQo=
    -------------------------------------------------------------------
    SETUP rtsp://10.192.44.97:554/ch1/main/av_stream/trackID=2 RTSP/1.0
    CSeq: 6
    Authorization: Digest username="admin", realm="IP Camera(E6990)", nonce="921e0ab66f8f6763ef05ecb06c4c86a0", uri="rtsp://10.192.44.97:554/ch1/main/av_stream", response="6dfe7b28a2fff9b161bac5ddad1289e4"
    User-Agent: NKPlayer-VSPlayer1.0
    Transport: RTP/AVP/TCP;unicast;interleaved=2-3
    Session: 2090545605
  13. Data Socket, S -> C

    RTSP/1.0 200 OK
    CSeq: 6
    Session:       2090545605;timeout=60
    Transport: RTP/AVP/TCP;unicast;interleaved=2-3;ssrc=6819e89f;mode="play"
    Date:  Mon, Sep 21 2020 20:08:41 GMT
  14. Command Socket, C -> S

    UExBWSBydHNwOi8vMTAuMTkyLjQ0Ljk3OjU1NC9jaDEvbWFpbi9hdl9zdHJlYW0gUlRTUC8xLjANCkNTZXE6IDcNCkF1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0iYWRtaW4iLCByZWFsbT0iSVAgQ2FtZXJhKEU2OTkwKSIsIG5vbmNlPSI5MjFlMGFiNjZmOGY2NzYzZWYwNWVjYjA2YzRjODZhMCIsIHVyaT0icnRzcDovLzEwLjE5Mi40NC45Nzo1NTQvY2gxL21haW4vYXZfc3RyZWFtIiwgcmVzcG9uc2U9IjkzN2VhNWIyMjUxNGViNzVjZjIxNTNiODZmOTEzMmQyIg0KVXNlci1BZ2VudDogTktQbGF5ZXItVlNQbGF5ZXIxLjANClNlc3Npb246IDIwOTA1NDU2MDUNClJhbmdlOiBucHQ9MC4wMDAtDQoNCg==
    -------------------------------------------------------------------
    PLAY rtsp://10.192.44.97:554/ch1/main/av_stream RTSP/1.0
    CSeq: 7
    Authorization: Digest username="admin", realm="IP Camera(E6990)", nonce="921e0ab66f8f6763ef05ecb06c4c86a0", uri="rtsp://10.192.44.97:554/ch1/main/av_stream", response="937ea5b22514eb75cf2153b86f9132d2"
    User-Agent: NKPlayer-VSPlayer1.0
    Session: 2090545605
    Range: npt=0.000-
  15. Data Socket, S -> C

    RTSP/1.0 200 OK
    CSeq: 7
    Session:       2090545605
    RTP-Info: url=trackID=1;seq=19485,url=trackID=2;seq=5076
    Date:  Mon, Sep 21 2020 20:08:42 GMT
  16. Command Socket, C -> S

    VEVBUkRPV04gcnRzcDovLzEwLjE5Mi40NC45Nzo1NTQvY2gxL21haW4vYXZfc3RyZWFtIFJUU1AvMS4wDQpDU2VxOiA4DQpBdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9ImFkbWluIiwgcmVhbG09IklQIENhbWVyYShFNjk5MCkiLCBub25jZT0iOTIxZTBhYjY2ZjhmNjc2M2VmMDVlY2IwNmM0Yzg2YTAiLCB1cmk9InJ0c3A6Ly8xMC4xOTIuNDQuOTc6NTU0L2NoMS9tYWluL2F2X3N0cmVhbSIsIHJlc3BvbnNlPSJiMDQxZWY0Yzk3ZDExZTYyMjUwNmFjZjhiZTBlYmZkNyINClVzZXItQWdlbnQ6IE5LUGxheWVyLVZTUGxheWVyMS4wDQpTZXNzaW9uOiAyMDkwNTQ1NjA1DQoNCg==
    -------------------------------------------------------------------
    TEARDOWN rtsp://10.192.44.97:554/ch1/main/av_stream RTSP/1.0
    CSeq: 8
    Authorization: Digest username="admin", realm="IP Camera(E6990)", nonce="921e0ab66f8f6763ef05ecb06c4c86a0", uri="rtsp://10.192.44.97:554/ch1/main/av_stream", response="b041ef4c97d11e622506acf8be0ebfd7"
    User-Agent: NKPlayer-VSPlayer1.0
    Session: 2090545605
  17. Data Socket, S -> C

    RTSP/1.0 200 OK
    CSeq: 8
    Session:       2090545605
    Date:  Mon, Sep 21 2020 20:08:42 GMT

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

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

相关文章

【Android App】给三维的地球仪贴上动物贴纸实战(附源码和演示 超详细必看)

需要源码和图片集请点赞关注收藏后评论区留言~~~ 一、纹理贴图 给三维物体穿衣服的动作,通常叫做给三维图形贴图,更专业地说叫纹理渲染。 渲染纹理的过程主要由三大项操作组成,分别说明如下: (1)启用纹理…

STL的常用遍历算法(20221128)

STL的常用算法 概述&#xff1a; 算法主要是由头文件<algorithm> <functional> <numeric> 组成。 <algorithm>是所有STL头文件中最大的一个&#xff0c;涉及比较、交换、查找、遍历等等&#xff1b; <functional>定义了一些模板类&#xff0…

2022VR高级研修班总结

本人有幸参加2022VR高级研修班&#xff0c;此次高级研修班由赵沁平院士和丁文华院士领衔&#xff0c;全国知名专家及长期在相关领域从事产业、管理、科研工作的专家参与&#xff0c;带来了18个专题讲座&#xff0c;内容涵盖虚拟现实技术与系统现状与发展、产学研合作与产业协同…

都什么年代了,你居然还连不上GitHub?

前言 众所周知&#xff0c;GitHub是我们程序员在上班或者学习的时候经常会逛的一个地方[手动狗头]&#xff0c;而且如果我们想参与开源项目的话&#xff0c;GitHub也是一个很好的平台。 可问题是&#xff0c;GitHub网页总是进不去&#xff0c;提交代码到GitHub也总是超时&…

在Navicat上如何停止正在运行的MYSQL语句

目录 &#xff08;一&#xff09;前言 &#xff08;二&#xff09;正文 1. 图形化停止SQL 2. 用SQL方式停止运行的SQL &#xff08;1&#xff09;找到运行的SQL的ID &#xff08;2&#xff09;运行kill命令杀掉SQL &#xff08;一&#xff09;前言 众所周知&#xff0c;…

BI数据分析软件有哪些?为什么说奥威BI很特别?

经过十几年的发展&#xff0c;以及近几年国家的大力鼓励发展大数据智能产业等原因&#xff0c;BI数据分析软件开始越来越被大家所熟知&#xff0c;那么BI数据分析软件都有哪些&#xff0c;为什么说奥威BI数据分析软件很特别&#xff1f;它对企业的大数据智能数据可视化分析起到…

什么样的人最适合做软件测试---喜欢找人帮忙办事的人

今天和大家说下什么样类型的人适合做软件测试。 经验干货&#xff0c;可仔细品 很多测试工程师面试中也可能会遇到问题&#xff0c;说怎么做一名优秀合格的测试工程师&#xff0c;需要有哪些品质&#xff0c;很多人会回答说要仔细&#xff0c;要承受压力&#xff0c;要有责任感…

2013-2020年全国31省数字经济数据集

1、时间&#xff1a;2013-2020年 2、来源&#xff1a;整理自国家统计J和统计NJ 3、指标包括&#xff1a; 信息化基础&#xff1a;"光缆线路长度(公里)、移动电话基站&#xff08;万个&#xff09;、信息传输、软件和信息技术服务业城镇单位就业人员(万人)、年末常住人口…

Android-P夜间模式

0 前言 Android-P可通过“Developer options > Night mode”打开夜间模式&#xff0c;本文研究其配置和效果。 验证环境&#xff1a;Pixel 3a、模拟器 1 设置 图1.1 Night mode上图对应XML配置如下&#xff1a; <ListPreferenceandroid:key"dark_ui_mode"and…

【Python】六、程序流程控制综合训练

文章目录实验目的一、列表定义二、元组定义三、列表的常用操作append() -- 向列表的尾部添加元素insert(index&#xff0c;object) -- 向指定的下标处添加元素sort&#xff08;&#xff09;-- 进行排序&#xff08;从下到大 int类型&#xff09;可以对字母进行排序&#xff08;…

多态原理、虚表指针与虚基表的内存布局。

文章目录前言多态虚函数静态类型与动态类型重载、覆盖和隐藏的区别final和override虚函数的默认实参虚析构函数在构造函数和析构函数中调用虚函数多态原理各种形式继承的虚函数内存布局单一继承无覆盖单一继承有覆盖单一虚拟继承有覆盖多继承无覆盖多继承有覆盖菱形继承有覆盖菱…

STC/MLLT--学习笔记

gmm建模方差使用对角矩阵的前提是假设特征之间相互独立&#xff0c;使用full或者block-diagonal矩阵可以对相关性的特征建模&#xff0c;但是参数增多。为了解决使用这个问题&#xff0c;有两种方法&#xff1a; feature-space 使用DCT或者LDA去相关model-space 不同的模型可以…

连续时间系统的时域分析

一.微分方程的求解 1.求微分方程的齐次解 &#xff08;1&#xff09;写出特征方程并求解 2.写出齐次解 2.求微分方程的特解 已知 &#xff08;1&#xff09;根据表2-2&#xff0c;写出特解函数 ​​​​​​​ &#xff08;2&#xff09;带入并求解 3.完全解 二.微分方…

基于GRU与注意力机制实现法语-葡萄牙语的翻译详细教程 数据+代码

本教程通过机器翻译的例子来介绍和实现一个简单的机器翻译方法,机器翻译是指将一段文本从源语言(如语言A)自动翻译到目标语言(如语言B)。本教程通过加载和预处理数据、构造编码器和解码器、训练模型、结果评价得到一个可以应用的机器翻译工具。 1.2 任务描述 神经机器翻译方…

uni-app 介绍及使用

一、什么是uni-app uni-app由dcloud公司开发的多端融合框架&#xff0c;是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;开发者编写一套代码&#xff0c;可发布到iOS、Android、Web&#xff08;响应式&#xff09;、以及各种小程序&#xff08;微信/支付宝/百度/头条/飞…

单文件组件环境配置步骤---vue-cli版

因为浏览器只认识&#xff1a;html、css、js文件&#xff0c;其他一概不认识&#xff1b; 所以要把单文件组件的vue文件转化为上面浏览器能认识的文件&#xff1b; 有两种环境配置途径&#xff1a; 第一种就是&#xff1a;配置webpack环境&#xff0c;要下载很多东西&#x…

灰色预测GM(1.1)模型及matlab程序负荷预测

灰色GM(1.1)预测模型 GM&#xff08;1.1&#xff09;模型由包含单一变量的一阶微分方程构成的模型&#xff0c;是灰色模型中最常用的模型。 设有负荷变量为的原始数据列: (3-1) 生成一阶累加数据列&#xff1a; (3-2) 其中 (3-3) 一阶微分方程的解呈指数增长形式&#xff0c…

URLDNS利用链分析

目录 前言&#xff1a; (一&#xff09;原理 &#xff08;二&#xff09;利用链 再来分析 URLDNS.java 这个文件&#xff0c;并且在入口处设置断点进行调试&#xff1a; &#xff08;三&#xff09; POC 参考资料 前言&#xff1a; URLDNS是Java反序列化中比较简单的一个链…

引擎入门 | Unity UI简介–第2部分(1)

欢迎回来! 在这个三部分教程系列的第二部分中&#xff0c;你将学习如何在用户界面中加入动画。 在上一个部分中你学习并创建了一个带有两个按钮的场景&#xff0c;也学会了如何使用图像、按钮和文本UI控件&#xff0c;并学习了RectTransform、Anchors和Pivots等核心概念&#…

元宇宙的核心技术之我见

14天学习训练营导师课程&#xff1a; 张子良《 元宇宙体系结构、关键技术和实践探索》 前言 提起元宇宙&#xff0c;相比读者都有所耳闻&#xff0c;而且元宇宙最近两年时间里异常的火&#xff0c;堪比之前的人工智能的火爆场景&#xff0c;甚至要超越人工智能的火爆度了。但是…