MPS:用Go语言打造轻量级媒体服务器,让旧安卓设备变身家庭流媒体中心

news2026/4/27 7:35:24
1. 项目概述一个为移动设备量身定制的媒体播放服务器如果你和我一样手头有几台旧手机、平板电脑或者干脆就是一台性能不那么强劲的安卓电视盒子想把它们变成家庭媒体中心那你大概率遇到过和我一样的困境。主流的媒体服务器软件比如大名鼎鼎的 Plex、Jellyfin 或者 Emby功能确实强大但它们的“胃口”也大对硬件资源特别是 CPU 和内存的占用相当可观。在 x86 架构的 NAS 或高性能迷你主机上运行当然没问题但一旦放到 ARM 架构的移动设备上那种卡顿和转码时的力不从心实在让人头疼。这就是我最初发现并决定深入研究telanflow/mps这个项目的契机。MPS全称是Media Playback Server从名字就能看出它的核心定位一个专注于媒体播放的服务器。它不是另一个试图包揽媒体库管理、刮削、转码、直播等所有功能的“巨无霸”而是精准地瞄准了“在资源受限的设备上流畅播放本地媒体”这一核心场景。它的设计哲学非常明确极致的轻量、高效以及对 ARM 平台的原生友好。简单来说MPS 就像一个为你设备上的视频、音乐、图片文件提供了一个极其简洁、高效的 Web 访问接口。你通过浏览器或者支持 DLNA/UPnP 的客户端比如电视上的 Kodi、手机上的 VLC就能直接浏览和播放存储在这些设备里的媒体文件。它不做过多的预处理不运行复杂的后台分析其核心价值就在于用最小的资源开销打通从存储到播放的链路。对于手头有闲置安卓设备想搭建一个纯粹用于局域网内流媒体播放的轻量级方案的朋友来说MPS 提供了一个非常优雅的答案。2. 核心架构与设计哲学解析2.1 为什么是 Go 语言轻量与并发的基因打开 MPS 的 GitHub 仓库你会发现它的核心是用Go 语言Golang编写的。这个选择绝非偶然而是深刻契合了项目目标的精髓。Go 语言以其出色的并发模型goroutine、高效的垃圾回收机制以及编译后生成单一静态可执行文件的特性而闻名。对于 MPS 这样的服务端程序这意味着极低的内存占用一个典型的 MPS 服务进程在空闲时内存占用可能只有十几 MB即使在处理多个并发流媒体请求时也能保持非常克制的资源消耗。这与基于 Java如 Emby 的某些组件或 Python 的解决方案形成了鲜明对比后者通常需要更大的运行时环境。高效的并发处理Go 的 goroutine 让 MPS 能够以极低的成本同时处理多个客户端的浏览请求和流传输这对于一个媒体服务器至关重要确保了在多用户同时访问时的响应速度。跨平台部署简便Go 可以轻松地交叉编译为各种架构和操作系统包括 Android/ARM的可执行文件。开发者只需要提供对应平台的二进制文件用户下载后几乎无需配置复杂的运行时环境就能直接运行极大地降低了在移动设备上部署的门槛。启动速度快编译后的二进制文件启动几乎是瞬时的这对于希望在设备启动后快速启用服务的场景非常友好。注意虽然 MPS 主要提供 Go 编译的二进制文件但其仓库也包含了完整的源代码。这意味着如果你有特定的定制需求比如修改默认端口、增加简单的认证并且具备 Go 开发环境你可以自行编译灵活性很高。2.2 功能边界它做什么不做什么清晰地定义边界是 MPS 保持轻量的关键。理解这一点能帮助你判断它是否是你的“菜”。MPS 核心做好的事情文件浏览与索引快速扫描指定目录可配置多个并通过一个清晰、响应式的 Web 界面展示媒体文件列表。支持按文件夹、文件类型浏览。直接流媒体传输这是它的看家本领。当客户端请求播放一个视频或音频文件时MPS 会以HTTP 渐进式下载或HTTP Live Streaming (HLS)的方式将文件数据流式传输给客户端。对于大多数现代客户端和主流格式如 MP4, MKV, MP3这种方式无需转码效率最高。基础格式兼容与“伪转码”对于某些客户端不直接支持的编码格式例如某些 MKV 内的 HEVC 编码MPS 可以进行一种“轻量级转码”——更准确地说是转封装Remux。它不会对视频流进行耗时的重编码而是将原始的视频/音频流从 MKV 容器中“抽取”出来重新封装进 MP4 或 TS 这类更通用的容器中然后传输给客户端。这个过程对 CPU 的消耗极低非常适合 ARM 设备。DLNA/UPnP 服务器MPS 内置了 DLNA/UPnP 媒体服务器功能。这意味着你的智能电视、游戏机如 PlayStation、音响等设备只要支持 DLNA就能在它们的媒体播放器列表中直接发现 MPS 服务器并浏览播放其中的内容无需任何额外配置。字幕与简单元数据支持外挂字幕文件的自动加载与内嵌字幕流的识别并在 Web 播放器中提供切换选项。能读取媒体文件的基础元数据如分辨率、时长、编码格式并展示。MPS 明确不做的事情完整的媒体库管理与刮削它没有类似 Plex 或 Jellyfin 那样的海报墙、演员信息、剧情简介自动刮削功能。你的媒体文件列表就是你的文件夹结构。这对于追求极致简洁或已有自己文件管理习惯的用户是优点但对于希望拥有精美海报墙的用户则是缺点。高强度视频转码MPS不提供真正的视频转码功能如将 4K H.265 实时转码成 1080p H.264。它的“转码”仅限于上述的转封装。如果你的客户端设备无法解码原始视频格式例如旧电视不支持 HEVC那么播放将会失败。它的设计前提是客户端应具备解码主流格式的能力。用户管理与权限控制MPS 本身不提供多用户、角色和精细的权限控制。它通常以单一服务运行所有能访问到该服务网络地址的人都能看到全部媒体内容。安全性依赖于家庭网络环境或通过反向代理等方式额外添加。远程访问与高级流媒体协议它专注于局域网LAN内的流媒体播放。虽然你可以通过配置路由器端口转发实现外网访问但这并非其设计强项且缺乏原生的安全加固。它也不支持像 RTSP、RTMP 这样的专业流媒体协议。2.3 与主流方案的对比找准自己的位置为了更直观地理解 MPS我们可以将其与几个主流方案放在一起对比特性MPS (telanflow/mps)JellyfinPlex简单的 SMB/NFS 共享核心定位极简、轻量的局域网流媒体服务器开源的完整媒体库解决方案商业化的全能媒体中心操作系统级文件共享资源占用极低(内存 50MB)中等至高 (内存 500MB)中等至高 (内存 500MB)极低 (取决于OS)硬件要求极低ARM安卓设备可流畅运行需要x86或高性能ARM转码需强CPU需要x86或高性能ARM转码需强CPU/GPU极低媒体库管理无纯文件浏览强大自动刮削海报墙强大自动刮削海报墙无依赖文件管理器转码能力仅限转封装(Remux)强大支持实时音视频转码强大支持实时音视频转码(需Plex Pass)无客户端支持Web浏览器DLNA/UPnP客户端丰富(Web, 移动端App, TV端等)极其丰富(全平台官方App)系统文件管理器部署复杂度非常简单下载运行即可中等需要配置库、刮削器中等需要配置库、登录账户简单适合场景闲置移动设备变播放器纯局域网播放对硬件要求苛刻家庭媒体中心需要海报墙和跨平台追剧追求体验和全家桶服务愿意付费获得便利仅需文件传输不要求流媒体从这个对比可以看出MPS 在功能丰富度上做出了妥协换来了无与伦比的轻量化。它不是一个“全能冠军”而是一个在特定赛道低功耗设备、局域网直播上的“单项尖子”。3. 实战部署在安卓设备上搭建你的轻量媒体库理论说得再多不如亲手搭一个。下面我就以一台闲置的安卓手机已获取 root 权限为例带你完整走一遍 MPS 的部署和配置流程。这个过程在安卓平板、电视盒子上大同小异。3.1 前期准备与环境检查在开始之前我们需要确保环境就绪安卓设备一台闲置的安卓手机/平板/电视盒子。建议系统版本在 Android 7.0 以上。Root 权限不是必须的但拥有 root 权限可以获得更好的体验如开机自启、绑定低端口。本文会分别说明有无 root 的配置差异。存储空间设备需要有足够的存储空间存放你的媒体文件。可以是内置存储也可以是插入的 TF 卡。建议将媒体文件集中放在一个单独的文件夹例如/sdcard/Media。网络环境设备需要连接到你的家庭局域网 Wi-Fi并获取一个固定的 IP 地址建议在路由器中为设备设置静态 IP 分配这样每次 IP 不变方便访问。工具软件Termux一个强大的安卓终端模拟器我们将在其中运行 MPS。从 F-Droid 或 Google Play 安装。Solid Explorer 或 MiXplorer功能强大的文件管理器用于管理文件和检查权限。VLC 播放器测试用用于测试 DLNA 功能。3.2 下载与安装 MPS 二进制文件MPS 的作者通常在 GitHub Releases 页面提供编译好的二进制文件。我们需要下载对应安卓 ARM 架构的版本。打开 Termux首先更新包管理器并安装一些必要工具pkg update pkg upgrade -y pkg install wget tar -y访问 MPS 的 GitHub Releases 页面例如https://github.com/telanflow/mps/releases找到最新的版本。通常文件名会包含linux-arm或android-arm。我们可以直接在 Termux 里用wget下载。假设最新版本是v0.8.0文件是mps-v0.8.0-linux-arm.tar.gz。wget https://github.com/telanflow/mps/releases/download/v0.8.0/mps-v0.8.0-linux-arm.tar.gz解压下载的文件tar -xzvf mps-v0.8.0-linux-arm.tar.gz解压后你会得到一个名为mps的可执行文件。为了方便我们将可执行文件移动到 Termux 的$PREFIX/bin目录该目录通常在环境变量PATH中并赋予执行权限mv mps $PREFIX/bin/ chmod x $PREFIX/bin/mps现在在 Termux 的任何路径下直接输入mps就可以运行了。实操心得如果 GitHub 下载速度慢可以先用电脑下载然后通过数据线或局域网共享如用python -m http.server在电脑上开个临时 HTTP 服务传到安卓设备的/sdcard/Download目录再用 Termux 的cp命令拷贝到当前目录。Termux 访问/sdcard需要先运行termux-setup-storage授权。3.3 基础配置与首次运行MPS 可以通过命令行参数或配置文件进行配置。我们先从最简单的命令行启动开始。在 Termux 中切换到你的媒体文件所在目录的上一级。例如你的视频都在/sdcard/Media/Movies音乐在/sdcard/Media/Music。cd /storage/emulated/0 # 这通常对应内部存储的根目录注意Termux 中访问安卓存储的路径是/storage/emulated/0它等同于/sdcard。使用以下命令启动 MPS并指定媒体目录mps --path ./Media这里--path参数指定了媒体库的根路径。你可以指定多个--path参数来添加多个目录。如果一切正常你会看到类似下面的输出[INFO] 2024/05/20 10:30:00 MPS version 0.8.0 [INFO] 2024/05/20 10:30:00 Server started on :8080 [INFO] 2024/05/20 10:30:00 DLNA server started on :1900这表示 MPS 的 HTTP 服务器已经在8080端口启动DLNA 服务器在1900端口启动。关键参数解析--host绑定到指定的 IP 地址默认是0.0.0.0监听所有网络接口。在家庭局域网内保持默认即可。--portHTTP 服务端口默认8080。如果端口冲突可以改为其他如--port 8090。--dlna-portDLNA 服务端口默认1900。通常无需修改。--cache启用缓存推荐可以加速重复文件的浏览和流传输开始速度。--log指定日志级别如--log debug可以输出更详细的日志用于排错。一个更完整的启动命令示例mps --path ./Media/Movies --path ./Media/TVShows --port 8090 --cache3.4 访问与使用你的媒体服务器现在服务已经跑起来了。我们来看看如何访问它。Web 界面在同一局域网下的任何设备电脑、手机、平板的浏览器中输入你的安卓设备的 IP 地址和端口号。例如http://192.168.1.100:8080。你会看到一个简洁的文件浏览界面可以点击文件夹进入点击视频文件即可在线播放。Web 播放器基于 HTML5支持大部分现代浏览器。DLNA/UPnP 访问打开你的智能电视或安装了 VLC 的手机。在电视的“媒体”或“输入源”中找到“DLNA”或“媒体服务器”选项通常会自动搜索并列出名为 “MPS” 的服务器。在 VLC 中进入“浏览” - “本地网络” - “通用即插即用UPnP”也能看到并浏览 MPS 的媒体库。首次运行的效果验证在 Web 界面播放一个 MP4 视频应该可以立即开始播放进度条可拖拽。在电视上通过 DLNA 播放同一个视频观察是否流畅音画是否同步。尝试播放一个 MKV 格式的 HEVC 视频。如果电视支持 HEVC 硬解它会通过 DLNA 直接播放如果不支持Web 端可能会尝试转封装而 DLNA 端可能会报错或无法播放。这验证了 MPS 的“伪转码”边界。4. 进阶配置与优化指南基础运行起来后我们可以通过一些进阶配置让 MPS 更贴合个人使用习惯并解决一些常见问题。4.1 使用配置文件进行持久化配置每次都输入一长串命令行参数很麻烦。MPS 支持通过配置文件来管理设置。在 Termux 的~/.config/mps/目录下如果没有就创建创建一个名为config.toml的文件。TOML 是一种易于阅读的配置文件格式。mkdir -p ~/.config/mps nano ~/.config/mps/config.toml在nano编辑器中输入以下内容根据你的情况修改# MPS 配置文件示例 host 0.0.0.0 port 8080 dlna_port 1900 cache true log_level info # 媒体库路径可以配置多个 [[libraries]] path /storage/emulated/0/Media # 你可以添加更多库 # [[libraries]] # path /storage/XXXX-XXXX/ExternalMedia # TF卡路径示例保存并退出在 nano 中按CtrlX然后按Y再按回车。现在你只需要运行mps命令它会自动加载~/.config/mps/config.toml中的配置。如果需要指定其他位置的配置文件可以使用--config /path/to/config.toml参数。4.2 实现后台运行与开机自启我们希望 MPS 能在 Termux 后台持续运行即使关闭 Termux 的会话也不会停止并且在设备重启后能自动启动。方案一使用 Termux 的tmux或nohup无需 roottmuxTermux 默认安装了tmux它是一个终端复用器。# 启动一个新的 tmux 会话 tmux new-session -d -s mps_server mps # 此时 mps 已在后台运行。要查看输出可以连接回这个会话 # tmux attach-session -t mps_server # 要断开连接但保持运行按 CtrlB然后按 D。nohup更简单的方法。nohup mps ~/mps.log 21 这会将 MPS 的输出重定向到~/mps.log文件并在后台运行。要停止它需要找到进程 ID (ps aux | grep mps) 然后kill。方案二使用 Android 的 init 系统需要 root对于追求稳定和集成度的用户如果设备已 root可以将 MPS 注册为一个系统服务。将mps二进制文件复制到系统目录例如/system/bin/并设置可执行权限。这需要在 root 环境下操作可以使用adb shell或在 Termux 中su后操作。创建一个启动脚本。在安卓系统中一种常见的方法是在/data/local/userinit.sh或/system/etc/init.d/目录下如果支持创建脚本。这里以userinit.sh为例部分定制 ROM 支持#!/system/bin/sh # 等待系统启动完成 sleep 30 # 设置环境变量如果需要 export PATH/system/bin:$PATH # 启动 MPS使用配置文件 /system/bin/mps --config /data/local/mps-config.toml 记得给脚本执行权限 (chmod x /data/local/userinit.sh)。将你的配置文件config.toml也放到/data/local/目录下。重启设备MPS 应该会自动启动。你可以通过ps | grep mps或浏览器访问来验证。重要提示修改系统文件有风险请确保你知道自己在做什么并提前备份。不同设备、不同 ROM 的开机自启方法可能不同上述userinit.sh方法并非通用请根据你的设备环境寻找合适的方法如使用 Magisk 模块或init.d支持的应用。4.3 性能调优与网络考虑缓存大小MPS 的--cache参数会缓存文件列表和部分元数据。对于媒体文件数量巨大的库这能显著提升二次访问的速度。缓存默认存储在内存中对于内存极小的设备如果遇到问题可以尝试禁用缓存--cachefalse但会牺牲一些浏览速度。网络与唤醒锁安卓系统为了省电可能会在屏幕关闭后限制后台应用的网络活动或进入休眠。这可能导致 DLNA 服务被发现或播放中断。有两个建议在安卓系统的“电池优化”设置中将 Termux 设置为“不优化”。在 Termux 内部可以尝试安装termux-wake-lock工具来获取唤醒锁防止 CPU 深度休眠。pkg install termux-api termux-wake-lock端口冲突如果8080或1900端口被其他应用占用MPS 会启动失败。修改config.toml中的port和dlna_port即可。注意DLNA 标准通常使用1900/udp端口非标准端口可能某些 DLNA 客户端无法发现。5. 常见问题排查与解决实录在实际使用中你可能会遇到一些问题。下面是我在部署和测试过程中遇到的一些典型情况及其解决方法。5.1 服务无法启动或访问不到现象在 Termux 中运行mps后没有看到成功的启动日志或者浏览器无法访问IP:端口。排查步骤检查命令和路径确认启动命令中--path指定的目录是否存在且可读。在 Termux 中用ls -la /storage/emulated/0/Media检查。检查端口占用MPS 默认使用 8080 端口。使用netstat -tulpn | grep :8080检查该端口是否已被其他程序占用。如果占用修改config.toml中的port为其他值如8090。检查防火墙安卓设备自身的防火墙或安全软件可能阻止了端口访问。尝试在设备的防火墙设置中为 Termux 添加例外或者暂时关闭防火墙测试。检查 IP 地址确保你访问的 IP 地址是安卓设备在Wi-Fi 局域网内的 IP而不是蜂窝网络 IP。在 Termux 中运行ifconfig wlan0或ip addr show wlan0查看。查看详细日志以调试模式启动 MPS获取更多信息。mps --path ./Media --log debug观察输出中是否有明显的错误信息如“permission denied”权限不足或“address already in use”端口占用。5.2 视频无法播放或只有声音没有画面现象在 Web 界面点击视频后播放器显示加载但无法开始或者只有音频没有视频画面。原因与解决浏览器兼容性与编码格式这是最常见的原因。Web 播放器依赖浏览器的 HTML5 视频解码能力。检查视频格式尝试在电脑上用 VLC 或ffprobepkg install ffmpeg后使用检查视频的编码格式。如果视频是 HEVC (H.265)、VP9 或 AV1 编码而你的浏览器特别是某些手机浏览器不支持硬解则无法播放。解决方案换用支持更好的浏览器在安卓设备上Chrome、Firefox 通常有较好的格式支持。在电脑上新版 Edge、Chrome 支持很全面。启用 MPS 的转封装对于 MKV 封装但编码是浏览器支持的格式如 H.264MPS 的自动转封装可能因为某些元数据问题未触发。可以尝试在播放时查看浏览器开发者工具F12的网络Network标签看视频请求的 URL 和响应类型。MPS 会对不直接支持的文件尝试提供video/mp4流。终极方案如果客户端设备普遍较旧考虑在电脑上预先将视频转码为通用的 H.264 AAC 编码的 MP4 格式。这是 MPS 设计哲学下的妥协——服务器不转码那就预处理片源。网络速度问题播放高码率如 4K Remux视频时如果 Wi-Fi 信号不稳定或速度不够会导致缓冲。尝试播放一个低码率的视频测试。确保设备连接的 Wi-Fi 是 5GHz 频段并且信号良好。DLNA 播放问题如果在电视上通过 DLNA 播放出现卡顿或无法播放而 Web 端正常。检查电视支持的格式查阅电视说明书确认其 DLNA 客户端支持的视频和音频编码格式。很多老电视的 DLNA 只支持 MP4/H.264 和 MP3。MPS 的 DLNA 配置文件MPS 的 DLNA 实现可能对某些设备的兼容性不佳。这是一个较深层次的问题通常需要修改 MPS 源码中关于 DLNA 媒体格式声明的部分这超出了基础使用的范围。一个变通方法是使用电视的 Web 浏览器直接访问 MPS 的 Web 界面进行播放绕过 DLNA 协议。5.3 文件列表不更新或出现乱码现象新增或删除了媒体文件但 Web 界面没有实时刷新或者文件名中的中文等非 ASCII 字符显示为乱码。解决缓存问题MPS 启用了缓存以提升性能。文件系统的变化不会立即反映在 Web 界面上。你可以等待缓存过期默认有一定时间。重启 MPS 服务。在启动参数中加入--cachefalse禁用缓存不推荐影响性能或者寻找是否有清除缓存的 API 或方法当前版本 MPS 可能未提供。文件系统监控较新版本的 MPS 可能支持文件系统监控inotify可以实时更新。请查阅项目文档确认。如果支持确保你的 Termux 环境有相应的权限。乱码问题这通常是 Web 界面的字符编码问题。确保你的媒体文件名使用 UTF-8 编码。MPS 的服务端日志可能能正常显示但 Web 前端渲染出错。可以尝试在浏览器中强制指定编码通常无效或者检查 MPS 的 Web 资源文件是否设置了正确的meta charsetUTF-8。如果问题普遍存在可能需要向项目提 Issue。5.4 如何相对安全地外网访问强烈不建议直接将 MPS 的端口暴露在公网上因为它缺乏用户认证和 HTTPS 加密。如果你确实需要从外网访问请务必通过以下安全方式虚拟专用网络在家庭路由器上搭建虚拟专用网络服务让你的手机或电脑在外网时先连接到家庭网络再像在局域网内一样访问 MPS。这是最安全、最推荐的方式。反向代理 认证在家庭网络中一台更安全的设备如树莓派、NAS上运行 Nginx 或 Caddy 作为反向代理。将 MPS 运行在本地然后通过反向代理对外暴露并在反向代理上配置 HTTPS 和基础身份认证如用户名密码。优点安全性高可以配置 SSL 加密。缺点配置复杂需要你有另一台常开设备运行反向代理并且需要域名和 SSL 证书可以使用 Let‘s Encrypt 免费证书。安全警告任何将家庭内部服务暴露到公网的行为都会增加安全风险。请确保你了解潜在风险并采取了足够的安全措施如使用强密码、定期更新软件、限制访问 IP 等。对于 MPS 这种无认证的服务通过反向代理添加认证是必须的。通过以上五个部分的拆解我们从项目定位、架构设计、实战部署、进阶配置到问题排查完整地覆盖了telanflow/mps这个轻量级媒体播放服务器的核心使用场景。它就像一把精准的瑞士军刀在“老旧安卓设备变废为宝提供局域网内零负担流媒体服务”这个特定任务上表现得非常出色。它的价值不在于功能的多寡而在于在资源受限的环境下将“播放”这件事做到了简单、高效、可靠。如果你正被老旧设备上的媒体服务器方案所困扰不妨试试 MPS它可能会给你带来意想不到的清爽体验。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…