【编程底层原理】从播放音乐的网页中提取mp3音频文件的两种方式及背后的技术思考【短连接和长连接】

简介: 本文介绍了两种从网页提取音乐文件的方法:一是通过IE临时缓存获取,二是利用开发者模式捕捉网络流量并下载音频URL。同时探讨了网页播放音乐的技术实现,包括短连接和长连接的区别及其适用场景,以及数据传输中的阻塞概念。


关键字:播放音乐, 提取mp3, 网页音频, 技术思考, 短连接, 长连接, 开发者模式, IE临时缓存, 网络流量捕获, URL下载, 三次握手, 数据传输, 阻塞, 实时数据

两种方式可以获取,第一种更为直接,第二种通用一些:

一、从IE临时缓存内容的本地路径获取,具体操作步骤如

打开工具栏(Alt+X)>打开Internet选项(Ctrl+O)>在弹出的常规Tab页点击设置(Alt+S)>(Ctrl+V),找到IE临时缓存内容的本地路径(比如我本地是这个路径是:C:\Users\Administrator\AppData\Local\Microsoft\Windows\Temporary Internet Files,每个人的路径可能不同,请按照上述操作去找路径);
然后开始在网页上播放音乐,播放音乐后,IE就会自动将正在播放的音乐的数据文件下载到该路径下;
在该路径下找到对应播放时间的名称带mp3的.dat格式文件,将此文件复制到本地要保存的其他路径下,然后将文件名及其格式改为"XXX.mp3",即可。

二、通过开发者模式找到音频文件所在URL,再用迅雷或其他下载工具下载

打开音乐播放网页,点击F12进入开发者模式,点击网络Tab页,点击右下角的绿色倒三角以便启用网络流量捕获(F5);
然后开始在网页上播放音乐,播放音乐后,会监控到IE播放音乐时访问的具体URL网址,可以看到mp3的url,一般按照【已接收】大小排序,就可以找到音乐所在的网址。右键包含mp3的那条记录,点击复制URL。
将复制的URL粘贴到迅雷进行下载,即可,具体操作过程截图如下:
image.png
image.png
image.png

三、网页播放音乐技术实现

IE音乐播放网页播放音乐这一过程,其具体的技术实现过程的细节猜想如下:

  1. 用户通过IE音乐播放网页向音乐服务器发起播放音乐的请求,询问是否可以连接;
  2. 音乐服务器受到询问是否可以连接的请求后,给用户做出可以连接的应答反馈;
  3. 用户受到可以连接的通知,开始正式连接音乐服务器,这时用户与音乐服务器直接的网络传输连接建立;
  4. 用户利用经由三次握手后建立起来的连接开始从音乐服务器Download音乐数据文件到用户本地(在这一过程中用户和音乐服务器之间应该是一直保持连接的);
  5. 成功将音乐文件完整的Download到用户本地,连接此时不再需要保持,断开连接
  6. 用户开始在用户端对本地音乐数据文件进行解析播放等用户端数据处理操作(这些处理与音乐服务器已经无关了)
    这个过程说明每次用户发起音乐播放请求,都会与音乐服务器进行一次三次握手及建立连接的过程,以前建立的连接在数据传输完毕后立即会断开,不会被保存下来,后续的请求因此无法复用以前建立的连接,只能再去建立新的连接用完再断开。
    这种方式属于短连接。一次会话一次连接,请求和连接的关系属于一对一。
    因为这种场景下,每个请求间的时间间隔是不固定的,可能间隔很短就进行下一次播放音乐的请求,也可能会很久之后才去进行下一次播放音乐的操作。如果连接建立后一直保持,实际上却没有被利用起来,不觉得很浪费么。
    单向的由服务器端向用户传输数据(数据需要保持完整性一次性传输到位)的场景适合用短连接。
    其实这个过程当中还涉及到阻塞的概念:由于用户一次请求向音乐服务器下载一首歌时,必需要保证下载的是完整的一首歌的全部数据,所以在下载的过程是一个等待的过程即被阻塞的过程,会受到网络带宽和计算机处理速度的影响。

    四、长连接

    既然提到短连接,有必要聊聊长连接。
    长连接中请求和连接的关系是多对一的。即以前的请求建立的连接可以被后续请求继续使用,不会断开。
    比如跑步APP实时显示运动轨迹这一场景:用户通过APP向服务器实时显示运动轨迹的请求,用户需要实时上报自己的最新位置信息给服务器,服务器收到后将绘制好的最新运动轨迹返回给用户,双向的数据传输过程。这个过程应该会一直保持连接在线,不会每上报一次就建立一次连接,太麻烦。假设用户每上报一次就建立一次连接,建立连接之前还要经过三次握手,过程太复杂。不如用户第一次与服务器建立建立后,就一直保持连接在线,后续的每次用户上报及服务器返回都复用这个连接。
    因为这个场景下的用户请求是实时的,每个请求之间的间隔几乎可以被忽略,没必要去频繁的重复断开旧连接再去建立新的连接的过程。双向的用户与服务器实时传递数据(数据分段传输,最后汇总整合后形成最终数据)的场景适合用长连接。
目录
相关文章
|
2天前
|
编解码 Java 程序员
写代码还有专业的编程显示器?
写代码已经十个年头了, 一直都是习惯直接用一台Mac电脑写代码 偶尔接一个显示器, 但是可能因为公司配的显示器不怎么样, 还要接转接头 搞得桌面杂乱无章,分辨率也低,感觉屏幕还是Mac自带的看着舒服
|
4天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1540 5
|
1月前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
7天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
583 22
|
4天前
|
存储 SQL 关系型数据库
彻底搞懂InnoDB的MVCC多版本并发控制
本文详细介绍了InnoDB存储引擎中的两种并发控制方法:MVCC(多版本并发控制)和LBCC(基于锁的并发控制)。MVCC通过记录版本信息和使用快照读取机制,实现了高并发下的读写操作,而LBCC则通过加锁机制控制并发访问。文章深入探讨了MVCC的工作原理,包括插入、删除、修改流程及查询过程中的快照读取机制。通过多个案例演示了不同隔离级别下MVCC的具体表现,并解释了事务ID的分配和管理方式。最后,对比了四种隔离级别的性能特点,帮助读者理解如何根据具体需求选择合适的隔离级别以优化数据库性能。
201 3
|
10天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
11天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
581 5
|
23天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
7天前
|
XML 安全 Java
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
235 3
|
9天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
327 2