Qt与FFmpeg实现跨平台移动视频采集与推流方案
1. 项目背景与核心价值在移动互联网和物联网快速发展的今天实时视频采集与传输技术已经成为众多应用场景的基础需求。从智能家居的远程监控到移动直播平台的实时互动再到工业领域的远程巡检都需要稳定高效的视频采集与推流解决方案。这个项目之所以具有独特价值是因为它解决了几个关键痛点跨平台兼容性通过Qt框架实现了一套代码在Android和iOS平台都能运行的解决方案避免了为不同平台分别开发的成本。专业级视频处理结合FFmpeg这一业界标准的音视频处理库实现了高质量的视频采集、编码和传输。灵活配置能力支持动态切换前后摄像头、自定义分辨率和帧率满足了不同场景下的多样化需求。协议兼容性同时支持RTSP和RTMP两种主流流媒体协议可以适配各种流媒体服务器和播放器。2. 技术架构与核心组件2.1 整体架构设计项目的技术架构可以分为四个主要层次设备交互层负责与手机摄像头硬件的交互包括摄像头启停、参数配置和原始帧获取。视频处理层使用FFmpeg进行视频帧的格式转换、编码和封装。网络传输层处理RTSP/RTMP协议的封装和网络传输。控制界面层提供用户交互界面实现参数配置和状态显示。[摄像头硬件] → [Qt多媒体模块] → [FFmpeg编码] → [RTSP/RTMP传输] → [流媒体服务器]2.2 关键组件选型2.2.1 Qt框架的优势选择Qt作为基础框架主要基于以下考虑跨平台能力一套代码可以编译运行在Android和iOS平台显著降低开发维护成本。丰富的多媒体支持Qt Multimedia模块提供了简洁的API访问摄像头设备。成熟的UI系统可以快速构建美观、响应迅速的用户界面。活跃的社区生态遇到问题可以快速找到解决方案和第三方库支持。2.2.2 FFmpeg的核心作用FFmpeg在本项目中承担了关键的视频处理任务视频编码将摄像头采集的原始YUV帧编码为H.264/H.265格式大幅减少数据量。格式封装将编码后的视频流封装为RTSP或RTMP协议要求的格式。参数调整实现分辨率缩放、帧率控制等视频处理功能。2.2.3 流媒体协议选择RTSP和RTMP是当前最主流的两种流媒体协议各有特点特性RTSPRTMP传输方式通常基于TCP通常基于TCP延迟较低(1-3秒)中等(3-5秒)兼容性广泛支持需要Flash或专用播放器适用场景监控系统直播平台服务器支持广泛需要专门服务器3. 开发环境搭建与配置3.1 基础开发环境准备3.1.1 Qt开发环境配置下载并安装Qt Creator建议5.15 LTS版本安装Android/iOS开发套件Android: JDK, Android SDK, NDKiOS: Xcode和命令行工具配置Qt Kit确保能够交叉编译到目标平台注意在Windows下开发Android应用时经常会遇到中文路径问题建议将所有开发工具安装在纯英文路径下。3.1.2 FFmpeg集成方案FFmpeg的集成有两种主要方式静态链接将FFmpeg编译为静态库直接链接到应用中优点部署简单不依赖外部环境缺点应用体积较大动态链接使用系统或预置的FFmpeg动态库优点应用体积小缺点部署复杂需要考虑库的兼容性推荐在移动端使用静态链接方式可以避免设备环境差异导致的问题。3.2 交叉编译FFmpeg为移动平台编译FFmpeg需要特别注意# Android编译示例 ./configure \ --target-osandroid \ --archarm \ --cpuarmv7-a \ --enable-cross-compile \ --cross-prefixarm-linux-androideabi- \ --sysroot$NDK/sysroot \ --enable-shared \ --disable-static \ --enable-gpl \ --enable-version3 \ --disable-doc \ --disable-programs \ --disable-avdevice \ --disable-avfilter \ --disable-postproc \ --disable-swresample \ --disable-swscale \ --disable-encoders \ --disable-muxers \ --disable-devices \ --disable-filters \ --enable-libx264 \ --enable-encoderlibx264 \ --enable-encoderaac \ --enable-muxerrtsp \ --enable-muxerflv \ --enable-protocolrtmp \ --enable-protocolrtp \ --enable-protocoltcp \ --enable-protocoludp \ --enable-protocolfile \ --prefix./android/armeabi-v7a make -j8 make install3.3 项目工程配置在Qt项目文件(.pro)中添加必要的配置# FFmpeg库链接 android { LIBS -L$$PWD/ffmpeg/android/armeabi-v7a/lib -lavcodec -lavformat -lavutil -lswresample -lx264 -lz INCLUDEPATH $$PWD/ffmpeg/android/armeabi-v7a/include } ios { LIBS -L$$PWD/ffmpeg/ios/lib -lavcodec -lavformat -lavutil -lswresample -lx264 -lz INCLUDEPATH $$PWD/ffmpeg/ios/include }4. 核心功能实现详解4.1 摄像头采集模块4.1.1 Qt多媒体框架使用Qt提供了QCamera类来访问摄像头设备基本使用流程如下// 初始化摄像头 QCamera *camera new QCamera(QCameraInfo::availableCameras().at(cameraIndex)); // 设置摄像头参数 QCameraViewfinderSettings settings; settings.setResolution(1280, 720); settings.setPixelFormat(QVideoFrame::Format_NV21); settings.setFrameRate(30.0); camera-setViewfinderSettings(settings); // 设置视频输出 QVideoWidget *viewfinder new QVideoWidget(); camera-setViewfinder(viewfinder); // 启动摄像头 camera-start();4.1.2 摄像头切换实现前后摄像头切换的关键在于正确识别设备索引void switchCamera() { static int currentCameraIndex 0; QListQCameraInfo cameras QCameraInfo::availableCameras(); if(cameras.size() 1) { currentCameraIndex (currentCameraIndex 1) % cameras.size(); camera-stop(); delete camera; camera new QCamera(cameras.at(currentCameraIndex)); // 重新应用参数和视图 // ... camera-start(); } }4.1.3 分辨率与帧率控制通过QCameraViewfinderSettings可以灵活控制采集参数void setCameraResolution(int width, int height) { QCameraViewfinderSettings settings camera-viewfinderSettings(); settings.setResolution(width, height); camera-setViewfinderSettings(settings); } void setCameraFrameRate(double fps) { QCameraViewfinderSettings settings camera-viewfinderSettings(); settings.setFrameRate(fps); camera-setViewfinderSettings(settings); }4.2 视频编码与推流4.2.1 FFmpeg初始化流程FFmpeg的初始化和资源分配需要遵循特定顺序// 初始化FFmpeg库 av_register_all(); avformat_network_init(); // 创建输出上下文 AVFormatContext *oc nullptr; avformat_alloc_output_context2(oc, nullptr, rtsp, outputUrl); // 创建视频流 AVStream *video_st avformat_new_stream(oc, nullptr); video_st-id oc-nb_streams - 1; // 配置编码器 AVCodec *codec avcodec_find_encoder(AV_CODEC_ID_H264); AVCodecContext *c avcodec_alloc_context3(codec); c-codec_id codec-id; c-bit_rate 400000; c-width width; c-height height; c-time_base (AVRational){1, fps}; c-gop_size 12; c-pix_fmt AV_PIX_FMT_YUV420P; // 打开编码器 avcodec_open2(c, codec, nullptr);4.2.2 帧处理与编码从Qt获取的帧需要转换为FFmpeg可处理的格式void processFrame(const QVideoFrame frame) { frame.map(QAbstractVideoBuffer::ReadOnly); // 根据帧格式进行不同处理 if(frame.pixelFormat() QVideoFrame::Format_NV21) { // NV21到YUV420P转换 // ... } // 创建AVFrame并填充数据 AVFrame *avframe av_frame_alloc(); avframe-format AV_PIX_FMT_YUV420P; avframe-width c-width; avframe-height c-height; av_frame_get_buffer(avframe, 32); // 填充YUV数据... // 编码帧 AVPacket pkt; av_init_packet(pkt); pkt.data nullptr; pkt.size 0; int got_packet; avcodec_encode_video2(c, pkt, avframe, got_packet); if(got_packet) { av_packet_rescale_ts(pkt, c-time_base, video_st-time_base); pkt.stream_index video_st-index; av_interleaved_write_frame(oc, pkt); } av_frame_free(avframe); frame.unmap(); }4.2.3 推流控制推流过程需要处理网络异常和重连void startStreaming(const QString url) { // 打开输出 if(avio_open(oc-pb, url.toUtf8().constData(), AVIO_FLAG_WRITE) 0) { // 错误处理 return; } // 写头部信息 avformat_write_header(oc, nullptr); // 启动帧采集定时器 QTimer *timer new QTimer(this); connect(timer, QTimer::timeout, this, [this](){ QVideoFrame frame grabFrame(); if(frame.isValid()) { processFrame(frame); } }); timer-start(1000/fps); } void stopStreaming() { // 写尾部信息 av_write_trailer(oc); // 关闭资源 if(oc !(oc-oformat-flags AVFMT_NOFILE)) avio_closep(oc-pb); avformat_free_context(oc); }5. 性能优化与问题排查5.1 常见性能瓶颈在移动设备上实现高效视频推流面临几个主要挑战CPU占用过高视频编码是计算密集型任务可能导致设备发热和耗电过快。内存使用视频帧缓冲处理不当容易导致内存暴涨。网络波动移动网络环境不稳定容易造成推流中断。5.2 优化策略与实践5.2.1 编码参数调优通过合理设置编码参数可以在质量和性能间取得平衡// 设置更高效的编码预设 av_opt_set(c-priv_data, preset, ultrafast, 0); av_opt_set(c-priv_data, tune, zerolatency, 0); // 使用更合适的GOP结构 c-gop_size fps * 2; // 2秒一个GOP c-max_b_frames 0; // 禁用B帧减少延迟5.2.2 多线程处理利用FFmpeg的多线程编码能力c-thread_count 4; // 根据CPU核心数设置 c-thread_type FF_THREAD_FRAME;5.2.3 自适应码率控制根据网络状况动态调整码率void adjustBitrate(int newBitrate) { c-bit_rate newBitrate; // 需要重新配置编码器 avcodec_flush_buffers(c); }5.3 典型问题排查5.3.1 视频花屏问题可能原因和解决方案时间戳错误确保每帧的pts正确递增关键帧间隔过大适当减小GOP大小编码器参数不匹配检查分辨率、像素格式等是否一致5.3.2 推流延迟高优化方向使用tunezerolatency编码参数减少缓冲帧数量选择更高效的传输协议(TCP优于UDP)5.3.3 内存泄漏排查使用Valgrind或Android Profiler工具检测内存问题特别注意AVFrame/AVPacket的分配与释放必须成对出现Qt资源(QCamera、QVideoFrame)需要正确释放网络资源(avio上下文)需要关闭6. 平台适配与扩展6.1 Android平台特殊处理6.1.1 权限管理Android 6.0需要运行时权限申请// 在AndroidManifest.xml中声明 uses-permission android:nameandroid.permission.CAMERA / uses-permission android:nameandroid.permission.RECORD_AUDIO / uses-permission android:nameandroid.permission.INTERNET / // Qt中通过JNI调用权限检查 QAndroidJniObject::callStaticMethodvoid( org/qtproject/example/PermissionHelper, checkCameraPermission, (Landroid/app/Activity;)V, QtAndroid::androidActivity().object());6.1.2 相机特性适配不同Android设备的摄像头能力差异较大需要动态检测QCameraViewfinderSettings findBestMatch(int desiredWidth, int desiredHeight, float desiredFps) { QListQCameraViewfinderSettings supportedSettings camera-supportedViewfinderSettings(); QCameraViewfinderSettings bestMatch; int minDiff INT_MAX; foreach(const QCameraViewfinderSettings setting, supportedSettings) { int diff abs(setting.resolution().width() - desiredWidth) abs(setting.resolution().height() - desiredHeight); if(diff minDiff) { minDiff diff; bestMatch setting; } } return bestMatch; }6.2 iOS平台注意事项6.2.1 隐私权限配置在Info.plist中添加相机使用描述keyNSCameraUsageDescription/key string需要摄像头权限来进行视频直播/string keyNSMicrophoneUsageDescription/key string需要麦克风权限来进行音频采集/string6.2.2 后台运行支持iOS对后台任务有严格限制需要特别声明keyUIBackgroundModes/key array stringaudio/string stringvoip/string /array6.3 功能扩展方向基于现有核心功能可以考虑以下扩展音频采集与同步增加麦克风音频采集实现音视频同步推流。滤镜与特效集成OpenGL ES实现实时滤镜效果。多路推流同时向多个服务器推流提高可靠性。本地录制在推流的同时保存到本地文件。网络质量检测实现自适应码率调整算法。7. 实际应用案例7.1 家庭监控系统使用本方案实现的家庭监控应用具有以下特点通过手机随时查看家中情况支持移动侦测自动开始录像低功耗模式仅在有动静时推流历史录像云端存储7.2 移动直播应用针对移动直播场景的优化美颜滤镜集成实时弹幕支持观众互动连麦直播回放功能7.3 工业巡检系统工业场景的特殊需求高分辨率采集(1080p/4K)低延迟传输(500ms)设备状态叠加显示远程控制PTZ摄像头8. 开发经验与技巧在实际开发过程中我总结了以下几点重要经验帧率控制要精确使用QElapsedTimer来精确控制帧采集间隔避免简单使用QTimer导致的帧率不稳定。内存管理要谨慎FFmpeg和Qt的资源释放必须成对出现建议使用RAII技术封装。错误处理要全面每个FFmpeg API调用都要检查返回值记录详细的错误信息。日志系统要完善实现多级日志输出方便问题追踪和性能分析。测试要充分在不同设备、不同网络环境下进行全面测试特别是异常情况下的恢复能力。一个实用的调试技巧是保存关键帧到文件void saveFrameToFile(AVFrame *frame, const char *filename) { FILE *f fopen(filename, wb); if(f) { for(int i0; iframe-height; i) { fwrite(frame-data[0] frame-linesize[0]*i, 1, frame-width, f); } for(int i0; iframe-height/2; i) { fwrite(frame-data[1] frame-linesize[1]*i, 1, frame-width/2, f); } for(int i0; iframe-height/2; i) { fwrite(frame-data[2] frame-linesize[2]*i, 1, frame-width/2, f); } fclose(f); } }9. 项目部署与发布9.1 Android应用打包配置应用图标和启动画面设置适当的应用权限生成签名密钥使用Qt Creator构建APK进行Proguard代码混淆9.2 iOS应用发布配置App ID和证书设置应用图标和启动图调整Info.plist配置通过Xcode归档项目提交App Store审核9.3 流媒体服务器选择常见的流媒体服务器选项服务器开源RTMP支持RTSP支持特点Nginx-rtmp是是否配置简单Wowza否是是功能全面Red5是是否Java实现Live555是否是轻量级SRS是是是高性能10. 未来优化方向虽然当前方案已经能够满足基本需求但仍有几个值得深入优化的方向硬件加速编码利用移动设备的硬件编码器(如MediaCodec、VideoToolbox)大幅降低CPU使用率。自适应码率算法根据网络状况动态调整视频质量和帧率提升弱网下的用户体验。WebRTC集成考虑支持WebRTC协议实现更低的传输延迟。AI增强功能集成人脸识别、行为分析等智能算法拓展应用场景。跨平台UI优化使用Qt Quick Controls 2实现更精美的用户界面。在实际项目中我发现移动端视频采集与推流是一个涉及多学科知识的复杂课题需要平衡性能、功耗、延迟和视频质量等多个维度。通过Qt和FFmpeg的结合我们能够构建出既强大又灵活的解决方案适应各种不同的应用场景。

相关新闻

Alacritty-Themes开发者指南:如何贡献新主题

Alacritty-Themes开发者指南:如何贡献新主题

Alacritty-Themes开发者指南:如何贡献新主题 【免费下载链接】alacritty-themes :rainbow: :lollipop: Themes :candy: :heart_eyes: for Alacritty: A cross-platform GPU-accelerated Terminal emulator 项目地址: https://gitcode.com/gh_mirrors/al/alacritty…

2026/8/1 1:48:04 阅读更多 →
Ionic开发五大痛点与性能优化实战

Ionic开发五大痛点与性能优化实战

1. Ionic开发中的高频痛点解析 作为跨平台移动应用开发的主流框架,Ionic在实际项目中常会遇到一些典型问题。以下是开发者反馈最集中的五大类问题: 1.1 性能优化瓶颈 移动端应用对性能敏感,而基于Web技术的Ionic应用容易遇到以下性能问题&a…

2026/7/27 4:22:09 阅读更多 →
3步掌握B站视频下载神器:BiliDownloader完整使用指南

3步掌握B站视频下载神器:BiliDownloader完整使用指南

3步掌握B站视频下载神器:BiliDownloader完整使用指南 【免费下载链接】BiliDownloader BiliDownloader是一款界面精简,操作简单且高速下载的b站下载器 项目地址: https://gitcode.com/gh_mirrors/bi/BiliDownloader 你是否经常在B站发现精彩的学习…

2026/7/30 0:39:57 阅读更多 →

最新新闻

告别“中看不中用”的立体模型:三维重构迈向“可操作、可仿真”的新纪元研发课题方案

告别“中看不中用”的立体模型:三维重构迈向“可操作、可仿真”的新纪元研发课题方案

告别“中看不中用”的立体模型:三维重构迈向“可操作、可仿真”的新纪元研发课题方案研发单位:镜像视界(浙江)科技有限公司核心研发负责人:耿文海(创始人、首席技术官)学术支撑单位:…

2026/8/1 2:30:43 阅读更多 →
Pandoc架构揭秘:统一文档转换引擎的深度解析

Pandoc架构揭秘:统一文档转换引擎的深度解析

Pandoc架构揭秘:统一文档转换引擎的深度解析 【免费下载链接】pandoc Universal markup converter 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc 在技术演进的长河中,文档格式的多样性一直是信息交换的痛点。当传统方案遇到瓶颈时&#x…

2026/8/1 2:30:43 阅读更多 →
MES与ERP集成:工单/物料/成本的数据打通

MES与ERP集成:工单/物料/成本的数据打通

一、背景故事:一次月结对账引发的集成项目故事发生在一家年产能约二十亿颗芯片的封测厂。这家工厂的ERP用的是SAP ECC,MES是某国产商用系统,两套系统各自运行了五年,中间的数据交换方式非常原始:计划员每天早上从ERP导…

2026/8/1 2:30:43 阅读更多 →
嵌入式开发避坑指南:低成本“CCS小金人”板卡硬件排查与软件适配实战

嵌入式开发避坑指南:低成本“CCS小金人”板卡硬件排查与软件适配实战

最近在嵌入式开发圈里,不少朋友都在讨论一个让人哭笑不得的现象:从某知名电商平台购买的“CCS小金人”开发板,到手后问题频发。所谓“CCS小金人”,通常指的是那些价格低廉、仿制德州仪器(TI)官方Code Compo…

2026/8/1 2:30:43 阅读更多 →
x86描述符详解:从内存管理到特权级切换的核心机制

x86描述符详解:从内存管理到特权级切换的核心机制

1. 项目概述:从“段”到“门”的x86内存与特权级基石如果你写过x86汇编,或者稍微深入一点研究过操作系统内核,那么“描述符”这个词对你来说一定不陌生。它就像隐藏在繁华都市地下的庞大管线系统,应用程序在“地面”上自由奔跑&am…

2026/8/1 2:30:43 阅读更多 →
5步掌握百度文库免费下载:终极免费文档获取指南

5步掌握百度文库免费下载:终极免费文档获取指南

5步掌握百度文库免费下载:终极免费文档获取指南 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 还在为百度文库的下载限制而烦恼吗?想要轻松保存那些宝贵的学习资料和工作文…

2026/8/1 2:29:43 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →