|
| 1 | +""" |
| 2 | +示例 05: VPU (视频处理单元) 监控 |
| 3 | +演示如何查询 VPU 时钟、编解码利用率和容量信息。 |
| 4 | +""" |
| 5 | + |
| 6 | +from pymtml import * |
| 7 | + |
| 8 | +print("=" * 60) |
| 9 | +print(" 示例 05: VPU 监控") |
| 10 | +print("=" * 60) |
| 11 | + |
| 12 | +mtmlLibraryInit() |
| 13 | + |
| 14 | +for i in range(mtmlLibraryCountDevice()): |
| 15 | + device = mtmlLibraryInitDeviceByIndex(i) |
| 16 | + name = mtmlDeviceGetName(device) |
| 17 | + print(f"\n--- 设备 {i}: {name} ---") |
| 18 | + |
| 19 | + try: |
| 20 | + with mtmlVpuContext(device) as vpu: |
| 21 | + # 时钟 |
| 22 | + clock = mtmlVpuGetClock(vpu) |
| 23 | + max_clock = mtmlVpuGetMaxClock(vpu) |
| 24 | + print(f" VPU 时钟: {clock} / {max_clock} MHz") |
| 25 | + |
| 26 | + # 编解码利用率 |
| 27 | + util = mtmlVpuGetUtilization(vpu) |
| 28 | + print(f" 编码利用率: {util.encodeUtil}%") |
| 29 | + print(f" 解码利用率: {util.decodeUtil}%") |
| 30 | + |
| 31 | + # 编解码容量 |
| 32 | + enc_cap, dec_cap = mtmlVpuGetCodecCapacity(vpu) |
| 33 | + print(f" 编码容量: {enc_cap}") |
| 34 | + print(f" 解码容量: {dec_cap}") |
| 35 | + |
| 36 | + # 编码器会话状态 |
| 37 | + try: |
| 38 | + enc_states = mtmlVpuGetEncoderSessionStates(vpu, 8) |
| 39 | + active_enc = sum(1 for s in enc_states if s.state == MTML_CODEC_SESSION_STATE_ACTIVE) |
| 40 | + print(f" 活跃编码会话: {active_enc}") |
| 41 | + for s in enc_states: |
| 42 | + if s.state == MTML_CODEC_SESSION_STATE_ACTIVE: |
| 43 | + metrics = mtmlVpuGetEncoderSessionMetrics(vpu, s.sessionId) |
| 44 | + print(f" 编码会话 {s.sessionId}: {metrics.width}x{metrics.height}, " |
| 45 | + f"codec={metrics.codecType}, fps={metrics.fps}") |
| 46 | + break |
| 47 | + except MTMLError: |
| 48 | + print(f" 活跃编码会话: [不可用]") |
| 49 | + |
| 50 | + # 解码器会话状态 |
| 51 | + try: |
| 52 | + dec_states = mtmlVpuGetDecoderSessionStates(vpu, 8) |
| 53 | + active_dec = sum(1 for s in dec_states if s.state == MTML_CODEC_SESSION_STATE_ACTIVE) |
| 54 | + print(f" 活跃解码会话: {active_dec}") |
| 55 | + for s in dec_states: |
| 56 | + if s.state == MTML_CODEC_SESSION_STATE_ACTIVE: |
| 57 | + metrics = mtmlVpuGetDecoderSessionMetrics(vpu, s.sessionId) |
| 58 | + print(f" 解码会话 {s.sessionId}: {metrics.width}x{metrics.height}, " |
| 59 | + f"codec={metrics.codecType}, fps={metrics.fps}") |
| 60 | + break |
| 61 | + except MTMLError: |
| 62 | + print(f" 活跃解码会话: [不可用]") |
| 63 | + |
| 64 | + except MTMLError as e: |
| 65 | + print(f" VPU 不可用: {e}") |
| 66 | + |
| 67 | +mtmlLibraryShutDown() |
| 68 | +print("\n完成!") |
0 commit comments