当前位置:首页>鸿蒙APP>【鸿蒙】HarmonyOS 媒体能力深度实战:Camera/Audio/Video 开发全解析

【鸿蒙】HarmonyOS 媒体能力深度实战:Camera/Audio/Video 开发全解析

  • 2026-06-24 00:45:21
【鸿蒙】HarmonyOS 媒体能力深度实战:Camera/Audio/Video 开发全解析

HarmonyOS 媒体能力深度实战:Camera/Audio/Video 开发全解析

封面信息图

一文掌握 HarmonyOS NEXT 媒体三件套,避开 90% 开发者踩过的坑,从采集到播放全流程跑通。

适用版本:HarmonyOS NEXT / API 12+ 阅读时长:约 18 分钟


场景切入:为什么媒体开发这么难?

你写了一个拍照功能,真机跑起来黑屏;录音权限申请通过了但 AudioCapturer 始终报 -1;视频播放器在部分设备上卡顿、首帧慢——这些问题不是你代码写错了,而是 HarmonyOS 媒体 API 有严格的状态机约束,顺序错一步就全盘崩。

本文从实际开发场景出发,拆解 Camera Kit、Audio Kit 和 AVPlayer 的核心机制,给出可直接运行的 ArkTS 代码示例,并系统整理高频坑点。


一、Camera Kit:拍照与录像

1.1 架构总览

CameraManager    ├── getSupportedCameras()        → Array<CameraDevice>    ├── createCameraInput(device)    → CameraInput    └── createSession(sessionType)  → PhotoSession / VideoSessionPhotoSession    ├── addInput(cameraInput)    ├── addOutput(photoOutput)    ├── commitConfig()              ← 必须调用,否则配置不生效    └── start()PhotoOutput    └── capture(settings)           → 触发拍照

整体流程遵循严格状态机:IDLE → CONFIGURING → COMMITTED → STARTED → STOPPED,任何跨状态调用都会抛出 CameraError

1.2 最简拍照实现

import { camera } from'@kit.CameraKit';import { fileIo } from'@kit.CoreFileKit';asyncfunctiontakeSinglePhoto(context: Context): Promise<string{const cameraManager = camera.getCameraManager(context);const cameras = cameraManager.getSupportedCameras();// 选择后置摄像头const backCamera = cameras.find(c => c.cameraPosition === camera.CameraPosition.CAMERA_POSITION_BACK  ) ?? cameras[0];// ❌ 错误写法:直接 start() 而不 commitConfig()// session.start(); // 报错:状态机不在 COMMITTED 状态// ✅ 正确写法:严格按顺序执行const cameraInput = cameraManager.createCameraInput(backCamera);await cameraInput.open();const photoProfile = cameraManager.getSupportedOutputCapability(    backCamera, camera.SceneMode.NORMAL_PHOTO  ).photoProfiles[0];const photoOutput = cameraManager.createPhotoOutput(photoProfile);const session = cameraManager.createSession<camera.PhotoSession>(    camera.SceneMode.NORMAL_PHOTO  );  session.beginConfig();  session.addInput(cameraInput);  session.addOutput(photoOutput);await session.commitConfig(); // 必须 await,提交配置await session.start();        // 启动预览// 拍照并保存const savePath = context.filesDir + `/photo_${Date.now()}.jpg`;const file = fileIo.openSync(savePath, fileIo.OpenMode.CREATE | fileIo.OpenMode.WRITE_ONLY);  photoOutput.on('photoAvailable'(err, photo) => {const buffer = photo.main.getComponent(camera.Component.JPEG)!.byteBuffer;    fileIo.writeSync(file.fd, buffer);    fileIo.closeSync(file.fd);  });await photoOutput.capture(); // 触发拍摄return savePath;}

1.3 录像会话差异

录像使用 VideoSession,需要额外传入 VideoOutput 和 AVRecorder

import { media } from'@kit.MediaKit';asyncfunctionstartVideoRecording(context: Context, savePath: string{const avRecorder = await media.createAVRecorder();// AVRecorder 必须先 prepare,再绑定到 VideoOutputawait avRecorder.prepare({    videoSourceType: media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,    profile: {      fileFormat: media.ContainerFormatType.CFT_MPEG_4,      videoBitrate: 2000000,      videoCodec: media.CodecMimeType.VIDEO_AVC,      videoFrameWidth: 1280,      videoFrameHeight: 720,      videoFrameRate: 30    },    url: `fd://${fileIo.openSync(savePath, fileIo.OpenMode.CREATE | fileIo.OpenMode.WRITE_ONLY).fd}`  });const videoSurface = await avRecorder.getInputSurface();// 后续 addOutput(videoOutput) 时需传入 videoSurface 创建的 VideoOutput}

关键差异对比:

能力
PhotoSession
VideoSession
输出类型
PhotoOutput
VideoOutput + AVRecorder
触发采集
photoOutput.capture()
avRecorder.start()
停止
无需额外操作
avRecorder.stop() → avRecorder.reset()
Surface 绑定
不需要
必须在 addOutput 前获取 Surface

二、Audio Kit:录音与播放

2.1 核心类职责划分

AudioCapturer   → 麦克风采集 PCM 原始数据(实时处理场景)AudioRenderer   → 播放 PCM/AAC 原始数据(自定义播放场景)AVRecorder      → 高层封装,采集+编码+写文件(推荐录音场景)AVPlayer        → 高层封装,解码+渲染(推荐播放场景)

选型原则:

  • 需要对原始 PCM 做实时处理(如波形图、变声)→ AudioCapturer / AudioRenderer
  • 只需录音到文件 → AVRecorder
  • 只需播放音视频文件 → AVPlayer

2.2 AudioCapturer 采集实践

import { audio } from'@kit.AudioKit';asyncfunctionstartAudioCapture(): Promise<audio.AudioCapturer{const streamInfo: audio.AudioStreamInfo = {    samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100,    channels: audio.AudioChannel.CHANNEL_2,    sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE,    encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW  };const capturerInfo: audio.AudioCapturerInfo = {    source: audio.SourceType.SOURCE_TYPE_MIC,    capturerFlags: 0  };const capturer = await audio.createAudioCapturer({ streamInfo, capturerInfo });// ❌ 错误写法:不等待 start() 完成就读取数据// capturer.read(bufferSize, true, callback); // 状态未就绪,返回空数据// ✅ 正确写法:等待 start 完成后再注册 readData 回调await capturer.start();  capturer.on('readData'(buffer: ArrayBuffer) => {// buffer 即为 PCM 原始数据,可直接写文件或实时处理console.log(`采集到 ${buffer.byteLength} 字节 PCM 数据`);  });return capturer;}asyncfunctionstopAudioCapture(capturer: audio.AudioCapturer{await capturer.stop();await capturer.release(); // 必须 release,否则持续占用麦克风}

2.3 权限申请(常见漏项)

媒体开发必须在 module.json5 中声明权限,**API 12+ 还需填写 usedScene**,否则动态申请时权限无法弹窗:

// module.json5 中的 requestPermissions{  "name": "ohos.permission.MICROPHONE",  "reason": "$string:reason_microphone",  "usedScene": {    "abilities": ["EntryAbility"],    "when": "inuse"   // ← API 12 起必填,填 always 或 inuse  }}
import { abilityAccessCtrl, Permissions } from'@kit.AbilityKit';asyncfunctionrequestMediaPermissions(context: Context): Promise<boolean{const permissions: Permissions[] = ['ohos.permission.MICROPHONE','ohos.permission.CAMERA'  ];const atManager = abilityAccessCtrl.createAtManager();const result = await atManager.requestPermissionsFromUser(context, permissions);return result.authResults.every(r => r === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED);}

三、AVPlayer:视频播放深度解析

3.1 状态机全景

idle  ↓ url = '...'(赋值触发)initialized  ↓ prepare()prepared  ←─────────────────────┐  ↓ play()                      │ reset()playing                          │  ↓ pause()                     │paused ──→ play() ──→ playing   │  ↓ stop()                      │stopped ─────────────────────────┘  ↓ reset()idle

跨状态调用是最高频的崩溃来源。 在 initialized 状态调用 play() 直接报状态机错误。

3.2 完整播放器实现

import { media } from'@kit.MediaKit';@Componentstruct VideoPlayer {private avPlayer: media.AVPlayer | null = null;@State isPlaying: boolean = false;private surfaceId: string = '';async initPlayer(url: string) {this.avPlayer = await media.createAVPlayer();// 注册 stateChange 回调(必须在 url 赋值前注册)this.avPlayer.on('stateChange'async (state: string) => {switch (state) {case'initialized':// ✅ initialized 后才能调用 prepare,不能直接 playawaitthis.avPlayer!.prepare();break;case'prepared':// prepared 后设置 surfaceId,再 playthis.avPlayer!.surfaceId = this.surfaceId;awaitthis.avPlayer!.play();this.isPlaying = true;break;case'completed':awaitthis.avPlayer!.seek(0, media.SeekMode.SEEK_PREV_SYNC);break;case'error':awaitthis.avPlayer!.reset();break;      }    });this.avPlayer.on('error'(err) => {console.error(`AVPlayer error: ${err.code} - ${err.message}`);    });// url 赋值触发状态 idle → initializedthis.avPlayer.url = url;  }async releasePlayer() {if (this.avPlayer) {awaitthis.avPlayer.stop();awaitthis.avPlayer.reset();awaitthis.avPlayer.release(); // 释放解码器等系统资源this.avPlayer = null;    }  }  build() {    Column() {      XComponent({        id: 'videoSurface',type: XComponentType.SURFACE,  // ← 必须是 SURFACE,不能是 COMPONENT        controller: new XComponentController()      })        .onLoad((controller) => {// surfaceId 在 onLoad 回调后才可用this.surfaceId = controller.getXComponentSurfaceId();        })        .width('100%')        .aspectRatio(16 / 9)      Button(this.isPlaying ? '暂停' : '播放')        .onClick(async () => {if (!this.avPlayer) return;if (this.isPlaying) {awaitthis.avPlayer.pause();this.isPlaying = false;          } else {awaitthis.avPlayer.play();this.isPlaying = true;          }        })    }  }}

3.3 seek 精度控制

// ❌ 错误写法:单参数 seek,默认 SEEK_PREV_SYNC,可能与期望位置偏差数秒await avPlayer.seek(30000);// ✅ 正确写法:明确传入精度模式await avPlayer.seek(30000, media.SeekMode.SEEK_CLOSEST);     // 帧精确,适合编辑场景await avPlayer.seek(30000, media.SeekMode.SEEK_NEXT_SYNC);   // 关键帧对齐,适合快进场景

四、最佳实践

4.1 及时释放媒体资源

做法: 在 aboutToDisappear 或 onPageHide 中主动调用 release()

原因: 摄像头、麦克风、硬件解码器是独占型系统资源,页面切走后若不释放,其他应用无法获取,同时自身下次打开也会冲突。

不这样做: 退出页面后摄像头指示灯常亮,再次进入拍照页 cameraInput.open() 报 CONFLICT_CAMERA(错误码 7400101)。

4.2 在 stateChange 回调中驱动 AVPlayer

做法: 所有状态迁移操作(prepare()play()seek())放在对应的 stateChange 回调里,而非在赋值 url 后直接链式调用。

原因: AVPlayer 是异步状态机,url 赋值返回不代表状态已切换到 initialized,直接调用下一步会触发非法状态错误。

不这样做: 随机出现 state machine error,仅在低端设备(异步切换慢)上复现,难以稳定复现和排查。

4.3 录音前申请焦点并监听焦点变化

做法: 使用 AudioSessionManager 申请音频焦点,并注册 audioInterrupt 事件监听,失去焦点时暂停采集。

原因: 来电、系统通知等会抢占音频焦点,继续采集会导致录音内容混入系统声音,或采集到静音数据。

不这样做: 用户接打电话期间录音文件包含通话内容,存在隐私合规风险。


五、常见坑点

坑 1:预览画面黑屏

  • 现象: Camera 所有 API 返回成功,XComponent 上无画面显示。
  • 原因:session.start() 在 XComponent.onLoad 之前调用,surfaceId 尚未绑定到 PreviewOutput。
  • 复现: 在 aboutToAppear 中初始化 Camera,而不是在 XComponent.onLoad 回调中。
  • 解决: 将整个 Camera 初始化链路(createCameraInput → addOutput → commitConfig → start)移入 XComponent.onLoad 回调,确保 surfaceId 已就绪。

坑 2:AudioCapturer.start() 报 -1(SYSTEM_ERROR)

  • 现象: 动态权限弹窗已授权,但 capturer.start() 抛出错误码 -1。
  • 原因:module.json5 中 requestPermissions 缺少 usedScene.when 字段,API 12 起该字段必填,缺失时权限实际未生效。
  • 复现: 旧工程迁移到 API 12 后直接运行,未更新权限配置。
  • 解决: 在 module.json5 中补全 "usedScene": {"abilities": ["EntryAbility"], "when": "inuse"}

坑 3:AVPlayer 有声音无画面

  • 现象: 音频正常播放,视频区域黑屏。
  • 原因: XComponent 的 type 设置为 COMPONENT 而非 SURFACE,或 surfaceId 在 prepared 状态前未赋值给 avPlayer.surfaceId
  • 复现: XComponent 类型写错,或在 Button 点击后才赋值 surfaceId。
  • 解决: 确认 type: XComponentType.SURFACE,并在 stateChange === 'prepared' 回调中、play() 调用前赋值 avPlayer.surfaceId

六、总结

  1. Camera、Audio、AVPlayer 均为严格状态机,调用顺序错一步即报错。
  2. CameraSession.commitConfig() 是 Camera 配置生效的关键节点,不可省略。
  3. AVPlayer 所有状态迁移操作必须在 stateChange 回调中触发,禁止赋值后直接链式调用。
  4. 媒体资源独占,页面退出必须显式调用 release(),否则导致资源冲突。
  5. API 12+ 权限申请必须填写 usedScene.when,旧工程迁移需重点检查。

核心结论:HarmonyOS 媒体开发的本质是状态机驱动的资源管理,调用顺序和及时释放比业务逻辑本身更重要。


参考资料

  • Camera Kit 开发指南
  • AVPlayer 开发指南
  • Audio Kit 录音开发
  • OpenHarmony 源码路径:foundation/multimedia/camera_framework/ 、foundation/multimedia/av_session/

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-06 06:02:35 HTTP/2.0 GET : https://c.mffb.com.cn/a/496254.html
  2. 运行时间 : 0.201344s [ 吞吐率:4.97req/s ] 内存消耗:4,410.70kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=8d23ad4b8d68d9fc007cdb7486384bbf
  1. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/runtime/temp/cefbf809ba1a84190cb04b0cb7abcf79.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000825s ] mysql:host=127.0.0.1;port=3306;dbname=c_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001549s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000600s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.002502s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001363s ]
  6. SELECT * FROM `set` [ RunTime:0.000607s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001205s ]
  8. SELECT * FROM `article` WHERE `id` = 496254 LIMIT 1 [ RunTime:0.001822s ]
  9. UPDATE `article` SET `lasttime` = 1783288955 WHERE `id` = 496254 [ RunTime:0.002203s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.003935s ]
  11. SELECT * FROM `article` WHERE `id` < 496254 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001155s ]
  12. SELECT * FROM `article` WHERE `id` > 496254 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002934s ]
  13. SELECT * FROM `article` WHERE `id` < 496254 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.012444s ]
  14. SELECT * FROM `article` WHERE `id` < 496254 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.008473s ]
  15. SELECT * FROM `article` WHERE `id` < 496254 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.021769s ]
0.204551s