无人机柜

大疆

Posted by LXG on August 13, 2025

航拍之旅-共享无人机柜

硬件部分

模块 功能 典型部件/建议
机柜结构 支撑和保护无人机 金属机柜或高强度塑料,带防雨防尘设计
存放仓位 无人机存放、锁定 可控电子锁或电磁锁;仓位托盘设计,适配不同型号无人机
充电系统 对无人机电池充电 充电模块(智能锂电池充电器),电源管理板
控制板/主控 管理柜子各模块 MCU 或嵌入式Linux主控(如Raspberry Pi, STM32, RK芯片)
通信模块 与服务器和用户APP交互 4G/5G模块、Wi-Fi、蓝牙,或NB-IoT
传感器 安全和状态监控 门磁传感器、红外/光电检测、重量传感器(判断无人机是否在位)
显示与交互 用户操作界面 LCD/触摸屏、LED指示灯、按钮或扫码器
安全防护 防盗、防火 防撬传感器、防火材料、报警器
电源 系统供电 交流电输入、UPS/备用电池,必要时支持太阳能板
环境监控 温湿度控制 温湿度传感器、风扇或小型空调

断路器

power_switch

特性 / 属性 CHINT NXB-63 C20 CHINT NXU-II G 40/275
核心功能 过载与短路保护、断电隔离 防雷击和瞬态过电压保护
典型用途 配电系统及电气设备电流保护 电涌保护,保护系统设备免受过电压损害
额定参数 20A 电流、约 400V 额定电压 40 kA 冲击电流、275 V 持续电压
符合标准 GB/T 10963.1, IEC 60898-1 IEC/EN 61643-11, GB/T 18802.11
保护机制 断电切断保护 吸收或旁路电涌,保护设备
结构特点 传统断路器结构 模块化设计,可在线更换模块

使用建议

  1. 若你的需求是针对电路中的过载或短路事件进行保护——比如当电流过大或发生短路时希望自动断开电路——则应选择 NXB-63 C20 小型断路器。
  2. 若你需要防护来自电网的瞬态高压冲击(如雷击或电压浪涌)——保护后级设备不被高电压损坏——则应选择 NXU-II G 40/275 电涌保护器。
  3. 实际应用中,这两种产品常常可以配套使用:断路器负责常规保护,电涌保护器负责突发高压冲击保护,形成前后协同机制,提高整体电气安全性。

单相电子式导轨智能电能表

用于测量和记录电力消耗。该电能表符合国家标准GB/T 17215.321-2008,并且带有二维码,可能用于远程读取数据或设备信息

微电脑时控开关

ZYT16G微电脑时控开关

ZYT16G

它是一种用于自动控制电器设备在特定时间开启或关闭的电子设备。通过设定时间参数,它可以按照预设的时间表自动控制电路的通断,适用于需要定时控制的场合,如路灯、水泵、空调等

无人机供电和锁控板

power_lock_board

主控芯片STM32F103C8T6

这是 STMicroelectronics(意法半导体) 的一颗 STM32F1 系列 ARM Cortex-M3 内核 MCU,常见于工业控制、物联网和智能设备

  • 通过 RS-485 或 UART 与上位机通讯
  • 控制 MOSFET 驱动锁(LK1~LK5)
  • 读取锁的反馈信号(FB1~FB5)
  • 控制 DC-DC 输出状态
  • 监测电压、电流状态
  • 管理 USB 口的供电控制

电池充电板

battery_board

这块电路板是一个多通道的电源管理板,很可能用于电池充电或平衡应用。它通过六个独立的降压/升压模块,由一个中央控制器进行管理。

主控芯片STM32F103C8T6

USB-A口可能的作用: CDC (Communication Device Class): 模拟一个串口(Serial Port)。这是最简单也最常用的方法。电路板向安卓屏幕“报告”自己是一个虚拟串口,然后就可以像传统的串口通信一样,通过收发字符串或二进制数据来交换信息

读卡器控制板

rfid

这块小板子是一个RFID读卡器模块。它的作用是:

  • 射频收发: 通过板子内部的PCB天线(图片中没有明显的天线线圈,但天线可能集成在板子内层,或通过旁边的电感L1/L2进行匹配),它能产生13.56 MHz的射频场。
  • 卡片感应: 当兼容的RFID标签(如MIFARE卡)靠近时,它会感应到卡片的信号。
  • 数据读写: 通过感应到的信号,它能读取或写入卡片中的数据。
  • 通信接口: 通过底部的4针连接器,它与主控板(例如你之前上传的电池板或控制板)进行通信,通常采用SPI或I2C协议,将读到的数据发送给主控芯片,或者接收主控芯片的指令去写入数据。

uart_24

主控芯片Geehy APM32 F072RBT6

  • 用户将RFID卡靠近读卡器模块(ANT522-M2)。
  • 读卡器模块读取卡片上的唯一ID或数据。
  • 读卡器模块通过SPI或I2C接口将数据发送给24路板子上的主控芯片。
  • 主控芯片(APM32)根据卡片ID,在程序中进行身份验证。
  • 如果验证通过,主控芯片会控制相应的输出通道(例如,开启第5路和第12路),并点亮相应的LED指示灯。

软件逻辑

  • android_serialport_api: 用于通过串口与外部硬件设备进行通信。
  • com.alibaba.android.arouter: 一个Android路由框架。
  • com.bumptech.glide: 一个流行的图片加载和缓存库。
  • com.google.zxing: 用于处理条形码和二维码的库。
  • com.tendcloud.tenddata: 移动应用数据分析平台。
  • com.youth.banner: 一个用于创建横幅视图的库。
  • com.zhy.view.flowlayout: 一个用于实现流式布局的库。
  • io.reactivex: 用于实现响应式编程的库。

软件需求-1

android app 产品需求:

  1. app启动后先全屏播放一个本地准备好的mp4视频(循环播放)
  2. 视频界面的底部显示当前设备的无线信号和设备序列号,内容悬浮在视频上方显示
  3. app启动的同时请求接口,如果接口返回有新的视频文件需要下载,则下载新的视频文件
  4. 新的视频文件下载到本地后替换掉初始的视频文件播放显示
  5. app启动后连接到后台的MQTT服务
  6. app启动后打开RS485串口ttyS3, 读取串口设备信息并通过mqtt上报
  7. app启动后打开TTL串口ttyS7, 读取串口信息并通过mqtt上报
  8. 服务器下发指令,然后通过串口发送指令到串口设备,串口设备反馈结果更新到UI
  9. 串口设备主动上报信息也需要更新UI

帮我设计个实现上述需求的架构

架构设计


+----------------------------------------------------------------------------------------------+
|                                      Android App                                             |
+----------------------+----------------------+----------------------+-----------------------+
|       UI 层          |     视频播放层       |      后台服务层       |   串口 & MQTT层       |
+----------------------+----------------------+----------------------+-----------------------+
| SplashVideoActivity  | VideoManager         | ApiService            | MqttManager           |
| - 全屏播放视频       | - 播放本地视频       | - 请求视频更新接口    | - 连接 MQTT Broker    |
| - 底部悬浮UI显示    | - 循环播放           | DownloadService       | - 上报串口数据        |
|   WiFi & 设备序列号 | - 切换新视频源       | - 校验文件完整性      | - 接收服务器指令      |
| - 更新UI显示串口数据 |                      | - 替换本地视频        | - 将指令下发到串口    |
|                      |                      |                      | - 串口反馈更新UI       |
+----------------------+----------------------+----------------------+-----------------------+
| 数据存储层           |
+----------------------+
| FileStorage          |
| - /files/video.mp4   |
| - /cache/new_video.mp4|
+----------------------+


时序图


┌─────────────────┐       ┌───────────────┐       ┌──────────────────┐       ┌──────────────────────┐
 SplashVideoActivity         ExoPlayer 播放器         ApiService 接口层         DownloadService 下载器 
└─────────┬─────────┘       └──────┬────────┘       └─────────┬────────┘       └──────────┬─────────┘
                                                                                      
           1. 启动 Activity                                                           
          │────────────────────────>                                                   
                                                                                      
           2. 加载本地 video.mp4                                                      
          │────────────────────────>                                                   
                                                                                      
                                    3. 循环播放(REPEAT_ALL)                           
                                   │────────────────────────>                          
                                                                                      
           4. 并发发起接口请求                                                        
          │──────────────────────────────────────────────────>                          
                                                                                      
                                                             5. 返回新视频下载地址    
                                                            │─────────────────────────>
                                                                                      
                                                                                       6. 下载新视频到缓存
                                                                                      │──────────────────▶
                                                                                      
                                                                                       7. 校验 MD5 通过
                                                                                      
                                                                                       8. 替换本地 video.mp4
                                                                                      
                                    9. 切换播放源 setMediaItem(new.mp4)                
          <────────────────────────│                                                   
                                                                                      
           10. 循环播放新视频                                                          
          │────────────────────────>                                                   


泳道图

drone_cabinet

用到的库

功能模块 库/组件 说明
视频播放 ExoPlayer 循环播放本地视频,可动态切换视频源
网络请求 Retrofit + OkHttp 请求视频更新接口
后台下载 WorkManager / ForegroundService 下载新视频到缓存并替换
JSON解析 Gson / Moshi 解析接口返回信息
UI布局 ConstraintLayout / FrameLayout 视频上方悬浮显示 WiFi & 序列号和串口数据
WiFi/设备信息 Android 原生 API 获取信号强度和设备序列号
MQTT通信 Eclipse Paho / HiveMQ MQTT Client 上报串口数据,接收服务器指令
串口操作 jSerialComm / Android NDK 打开 ttyS3 / ttyS7,读写数据
UI数据绑定 LiveData / StateFlow / Flow 实时更新 UI 显示串口数据和反馈结果

时序图

drone_cabinet_2

drone_cabinet_3

A133 视频编解码

a133_soc_diagram

A133支持的硬件编解码能力:

  • 视频编码能力: H.264 的最大编码性能为 1080p@60fps。
  • 视频解码能力: HEVC (H.265) 和 H.264 的最大解码性能为 4K@30fps。

查看视频源信息

sudo snap install mediainfo

mediainfo test_30fps.mp4

报错-1

player_video_error

修改视频帧率命令

ffmpeg -i test_60fps.mp4 -vf “fps=30” -c:a copy test_30fps.mp4

修改后的视频源信息

mediainfo test_30fps.mp4


General
Complete name                            : test_30fps.mp4       # 文件完整路径和文件名
Format                                   : MPEG-4               # 容器格式
Format profile                           : Base Media           # 容器类型的详细子类型
Codec ID                                 : isom (isom/iso2/avc1/mp41)  # 容器标识及兼容性
File size                                : 13.8 MiB             # 文件大小
Duration                                 : 36 s 270 ms          # 视频总时长
Overall bit rate                         : 3 202 kb/s           # 平均码率,包括音视频
Frame rate                               : 30.000 FPS           # 容器标识的帧率
Writing application                      : Lavf58.76.100        # 生成文件所用的程序/库版本

Video
ID                                       : 1                     # 视频流ID
Format                                   : AVC                   # 视频编码格式(H.264)
Format/Info                              : Advanced Video Codec  # 编码格式说明
Format profile                           : High@L4               # H.264编码Profile和Level
Format settings                          : CABAC / 4 Ref Frames  # 编码设置:CABAC开启、参考帧数4
Format settings, CABAC                   : Yes                   # 是否使用CABAC熵编码
Format settings, Reference frames        : 4 frames              # 使用的参考帧数量
Codec ID                                 : avc1                  # 编码器标识
Codec ID/Info                            : Advanced Video Coding  # 编码器说明
Duration                                 : 36 s 267 ms           # 视频流时长
Bit rate                                 : 3 000 kb/s            # 视频流码率
Width                                    : 1 080 pixels          # 视频宽度
Height                                   : 1 920 pixels          # 视频高度(竖屏)
Display aspect ratio                     : 9:16                  # 显示宽高比
Frame rate mode                          : Constant              # 帧率模式(恒定/可变)
Frame rate                               : 30.000 FPS            # 帧率
Color space                              : YUV                   # 色彩空间
Chroma subsampling                       : 4:2:0                 # 色度采样格式
Bit depth                                : 8 bits                # 每个通道的位深
Scan type                                : Progressive           # 扫描方式(逐行扫描)
Bits/(Pixel*Frame)                       : 0.048                 # 每像素每帧平均比特数
Stream size                              : 13.0 MiB (94%)        # 视频流在文件中占比
Writing library                          : x264 core 163 r3060 5db6aa6  # 使用的编码库版本
Encoding settings                        : ...                    # 编码器详细参数
Color range                              : Limited               # 色彩范围(有限/全量)
Color primaries                          : BT.709                # 色彩基准
Transfer characteristics                 : BT.709                # 传输特性
Matrix coefficients                      : BT.709                # 色彩矩阵
Codec configuration box                  : avcC                  # H.264 codec box 配置

Audio
ID                                       : 2                     # 音频流ID
Format                                   : AAC LC                # 音频编码格式(AAC Low Complexity)
Format/Info                              : Advanced Audio Codec Low Complexity  # 编码说明
Codec ID                                 : mp4a-40-2             # 编码器标识
Duration                                 : 36 s 270 ms           # 音频流时长
Source duration                          : 36 s 292 ms           # 原始音频流时长
Bit rate mode                            : Constant              # 码率模式(CBR/恒定码率)
Bit rate                                 : 192 kb/s              # 音频码率
Channel(s)                               : 2 channels            # 声道数
Channel layout                           : L R                   # 声道布局
Sampling rate                            : 44.1 kHz              # 采样率
Frame rate                               : 43.066 FPS (1024 SPF) # 每帧采样数/帧率
Compression mode                         : Lossy                  # 压缩方式(有损/无损)
Stream size                              : 858 KiB (6%)           # 音频流在文件中占比
Source stream size                       : 858 KiB (6%)           # 原始音频流大小
Default                                  : Yes                     # 默认流
Alternate group                          : 1                       # 流组ID
mdhd_Duration                            : 36269                   # 媒体header里的时长(单位ms)

报错-2


ACodec                  E  signalError(omxError 0x80001001, internalError -62)
MediaCodec              E  Codec reported err 0xffffffc2, actionCode 0, while in state 6
ACodec                  W  not dequeuing from native window due to fatal error
ACodec                  W  not dequeuing from native window due to fatal error
SurfaceUtils            D  disconnecting from surface 0xc5137808, reason disconnectFromSurface
ACodec                  W  not dequeuing from native window due to fatal error
MediaCodecVideoRenderer E  Video codec error (Ask Gemini)
                java.lang.IllegalStateException
		at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
		at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:2789)
		at androidx.media3.exoplayer.mediacodec.SynchronousMediaCodecAdapter.dequeueOutputBufferIndex(SynchronousMediaCodecAdapter.java:112)
		at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:2104)
		at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:896)
		at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.render(MediaCodecVideoRenderer.java:1314)
		at androidx.media3.exoplayer.RendererHolder.render(RendererHolder.java:391)
		at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1367)
		at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:697)
		at android.os.Handler.dispatchMessage(Handler.java:103)
		at android.os.Looper.loop(Looper.java:214)
		at android.os.HandlerThread.run(HandlerThread.java:67)

ExoPlayerImplInternal   E  Playback error (Ask Gemini)
		androidx.media3.exoplayer.ExoPlaybackException: MediaCodecVideoRenderer error, index=0, format=Format(1, null, video/mp4, video/avc, avc1.640028, 2999664, und, [1080, 1920, 30.000004, ColorInfo(BT709, Limited range, SDR SMPTE 170M, false, 8bit Luma, 8bit Chroma)], [-1, -1]), format_supported=YES
		at androidx.media3.exoplayer.BaseRenderer.createRendererException(BaseRenderer.java:545)
		at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:926)
		at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.render(MediaCodecVideoRenderer.java:1314)
		at androidx.media3.exoplayer.RendererHolder.render(RendererHolder.java:391)
		at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1367)
		at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:697)
		at android.os.Handler.dispatchMessage(Handler.java:103)
		at android.os.Looper.loop(Looper.java:214)
		at android.os.HandlerThread.run(HandlerThread.java:67)
		Caused by: androidx.media3.exoplayer.video.MediaCodecVideoDecoderException: Decoder failed: OMX.allwinner.video.decoder.avc
		at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.createDecoderException(MediaCodecVideoRenderer.java:2468)
		at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:920)
		at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.render(MediaCodecVideoRenderer.java:1314) 
		at androidx.media3.exoplayer.RendererHolder.render(RendererHolder.java:391) 
		at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1367) 
		at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:697) 
		at android.os.Handler.dispatchMessage(Handler.java:103) 
		at android.os.Looper.loop(Looper.java:214) 
		at android.os.HandlerThread.run(HandlerThread.java:67) 
		Caused by: java.lang.IllegalStateException
		at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
		at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:2789)
		at androidx.media3.exoplayer.mediacodec.SynchronousMediaCodecAdapter.dequeueOutputBufferIndex(SynchronousMediaCodecAdapter.java:112)
		at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:2104)
		at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:896)
		at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.render(MediaCodecVideoRenderer.java:1314) 
		at androidx.media3.exoplayer.RendererHolder.render(RendererHolder.java:391) 
		at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1367) 
		at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:697) 
		at android.os.Handler.dispatchMessage(Handler.java:103) 
		at android.os.Looper.loop(Looper.java:214) 
		at android.os.HandlerThread.run(HandlerThread.java:67) 
ExoPlayerImplInternal   E  Disable failed. (Ask Gemini)
		java.lang.IllegalStateException
		at android.media.MediaCodec.native_flush(Native Method)
		at android.media.MediaCodec.flush(MediaCodec.java:2194)
		at androidx.media3.exoplayer.mediacodec.SynchronousMediaCodecAdapter.flush(SynchronousMediaCodecAdapter.java:160)
		at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushCodec(MediaCodecRenderer.java:1033)
		at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushOrReleaseCodec(MediaCodecRenderer.java:964)
		at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.onDisabled(MediaCodecRenderer.java:797)
		at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.onDisabled(MediaCodecVideoRenderer.java:1081)
		at androidx.media3.exoplayer.BaseRenderer.disable(BaseRenderer.java:247)
		at androidx.media3.exoplayer.RendererHolder.disableRenderer(RendererHolder.java:673)
		at androidx.media3.exoplayer.RendererHolder.disable(RendererHolder.java:567)
		at androidx.media3.exoplayer.ExoPlayerImplInternal.disableRenderer(ExoPlayerImplInternal.java:2164)
		at androidx.media3.exoplayer.ExoPlayerImplInternal.disableRenderers(ExoPlayerImplInternal.java:2157)
		at androidx.media3.exoplayer.ExoPlayerImplInternal.resetInternal(ExoPlayerImplInternal.java:1890)
		at androidx.media3.exoplayer.ExoPlayerImplInternal.stopInternal(ExoPlayerImplInternal.java:1847)
		at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:876)
		at android.os.Handler.dispatchMessage(Handler.java:103)
		at android.os.Looper.loop(Looper.java:214)
		at android.os.HandlerThread.run(HandlerThread.java:67)
Surface                 E  getSlotFromBufferLocked: unknown buffer: 0xc4ea98c0
ACodec                  W  [OMX.allwinner.video.decoder.avc] can not return buffer 22 to native window
Surface                 E  getSlotFromBufferLocked: unknown buffer: 0xc4ea91c0
ACodec                  W  [OMX.allwinner.video.decoder.avc] can not return buffer 17 to native window
Surface                 E  getSlotFromBufferLocked: unknown buffer: 0xeefe9900
ACodec                  W  [OMX.allwinner.video.decoder.avc] can not return buffer 16 to native window

当前修改方案

定时重建exoplayer

报错-3


09-02 14:02:04.080 2055 10373 W cedarc : <RequestVideoStreamBuffer:1318>: request stream buffer fail, 8310743 bytes valid data in SBM[0], total buffer size is 8388608 bytes.
09-02 14:02:04.080 2055 10373 E omx_vdec_aw: <__anSubmit:2865>: req vbs fail! maybe vbs buffer is full!

报错的视频源信息

mediainfo test-2802.mp4


General
Complete name                            : test-2802.mp4      # 文件名
Format                                   : MPEG-4             # 容器格式
Format profile                           : Base Media         # 容器子类型
Codec ID                                 : isom (isom/iso2/avc1/mp41)  # 容器标识
File size                                : 31.6 MiB           # 文件大小
Duration                                 : 39 s 851 ms        # 总时长
Overall bit rate mode                    : Variable           # 码率模式
Overall bit rate                         : 6 643 kb/s         # 平均码率
Frame rate                               : 30.000 FPS         # 帧率
Encoded date                             : 2025-09-01 07:08:04 UTC  # 编码时间
Tagged date                              : 2025-09-01 07:08:16 UTC  # 标签时间
Hw                                       : 1                  # 硬件加速标记
bitrate                                  : 8000000            # 视频目标码率
encoder                                  : Lavf61.1.100       # 编码器

Video
ID                                       : 1                  # 视频流ID
Format                                   : AVC                # 视频编码(H.264)
Format/Info                              : Advanced Video Codec  # 编码说明
Format profile                           : Main@L4            # H.264 Profile/Level
Format settings                          : CABAC / 4 Ref Frames  # CABAC及参考帧
Format settings, CABAC                   : Yes                # 是否开启CABAC
Format settings, Reference frames        : 4 frames           # 参考帧数量
Codec ID                                 : avc1               # 编码标识
Codec ID/Info                            : Advanced Video Coding  # 编码说明
Duration                                 : 39 s 834 ms        # 视频流时长
Bit rate mode                            : Variable           # 视频码率模式
Bit rate                                 : 6 440 kb/s         # 视频平均码率
Maximum bit rate                         : 16.0 Mb/s          # 最大码率
Width                                    : 1 080 pixels       # 宽度
Height                                   : 1 920 pixels       # 高度
Display aspect ratio                     : 9:16               # 宽高比
Frame rate mode                          : Constant           # 帧率模式
Frame rate                               : 30.000 FPS         # 视频帧率
Color space                              : YUV                # 色彩空间
Chroma subsampling                       : 4:2:0              # 色度采样
Bit depth                                : 8 bits             # 位深
Scan type                                : Progressive        # 扫描方式
Bits/(Pixel*Frame)                       : 0.104              # 每像素每帧比特
Stream size                              : 30.6 MiB (97%)     # 视频占文件比例
Color range                              : Limited            # 色彩范围
Color primaries                          : BT.709             # 色彩基准
Transfer characteristics                 : BT.709             # 传输特性
Matrix coefficients                      : BT.709             # 色彩矩阵
Codec configuration box                  : avcC               # H.264 codec box

Audio
ID                                       : 2                  # 音频流ID
Format                                   : AAC LC             # 音频编码
Format/Info                              : Advanced Audio Codec Low Complexity  # 编码说明
Codec ID                                 : mp4a-40-2          # 编码标识
Duration                                 : 39 s 851 ms        # 音频时长
Source duration                          : 39 s 871 ms        # 原始音频时长
Bit rate mode                            : Constant           # 码率模式
Bit rate                                 : 199 kb/s           # 音频码率
Channel(s)                               : 2 channels         # 声道数
Channel layout                           : L R                 # 声道布局
Sampling rate                            : 48.0 kHz           # 采样率
Frame rate                               : 46.875 FPS (1024 SPF) # 音频帧率
Compression mode                         : Lossy              # 压缩方式
Stream size                              : 970 KiB (3%)       # 音频占文件比例
Source stream size                       : 970 KiB (3%)       # 原始音频大小
Default                                  : Yes                # 默认播放流
Alternate group                          : 1                  # 流组ID
Encoded date                             : 2025-09-01 07:08:04 UTC  # 编码时间
Tagged date                              : 2025-09-01 07:08:16 UTC  # 标签时间


对比差异

参数 test-30fps.mp4 test-2802.mp4 说明 / 影响
文件大小 13.8 MiB 31.6 MiB 文件大约是 2.3 倍,内存/存储占用更高
时长 36 s 39 s 851 ms test-2802.mp4 略长
整体码率 3 202 kb/s 6 643 kb/s 平均码率高约 2 倍,对解码压力大
视频编码Profile High\@L4 Main\@L4 High Profile 对旧硬件要求更高(A133支持High L4)
视频码率 3 000 kb/s 6 440 kb/s test-2802.mp4 解码负载更大,SBM压力高
最大码率 16.0 Mb/s 高峰值可能导致缓冲不足或播放失败
视频流占比 94% 97% 视频占比更高,音频占比更小
音频采样率 44.1 kHz 48 kHz 对播放影响小
音频码率 192 kb/s 199 kb/s 对播放影响小

安全参数范围


SBM 使用率 (%)
100 |                                ███████  <- 危险区 (>90%)
 90 |                               ██████   <- 黄色边缘区
 80 |                            █████
 70 |                         ████        <- 接近上限
 60 |                      ███           <- 安全上限
 50 |                   ███
 40 |                ███
 30 |             ███
 20 |          ███
 10 |       ███
  0 |____███______________________________
       0     4     6     8     12     16
           平均码率 (Mbps)


  • 绿色区(0–6 Mbps):播放完全安全,SBM 使用率 50–70%
  • 黄色区(6–8 Mbps):播放边缘,SBM 接近满
  • 红色区(>8–16 Mbps):播放风险大,峰值码率高容易触发 SBM 满报错

修改视频码率


ffmpeg -i test-2802.mp4 -c:v libx264 -b:v 5M -maxrate 8M -bufsize 8M -c:a copy output_2802_5mbps.mp4

修改前后对比

参数 修改前 test-2802.mp4 修改后 output_2802_5mbps.mp4 差异说明
文件大小 31.6 MiB 23.1 MiB 文件减小,码率降低
Overall bit rate 6,643 kb/s 4,863 kb/s 平均码率降低到 4.86 Mbps,更适合 A133 SBM
视频 Bit rate 6,440 kb/s 4,656 kb/s 视频流码率降低
视频 Nominal bit rate 16,000 kb/s (峰值) 5,000 kb/s 平均码率控制为 5 Mbps
视频 Maximum bit rate 16,000 kb/s 8,000 kb/s 峰值码率降低一半,减少 SBM 瞬时满风险
编码设置 RC 模式 VBR (rc=crf) ABR (rc=abr) 控制码率改为平均码率模式,稳定播放
Stream size 30.6 MiB 22.1 MiB 视频占用空间减少
Audio bit rate 199 kb/s → 未变化 音频未重新编码
Overall 文件大小占比 97% 视频 96% 视频 视频比例略降低

码率控制模式

RC 模式 含义 特点
CRF(Constant Rate Factor) 恒定质量模式 编码器尽量保持视觉质量恒定,但码率会波动,峰值可能很高。适合文件大小不固定的视频。
ABR(Average Bit Rate) 平均码率模式 编码器控制平均码率达到指定值,同时允许短时间波动,但峰值受限。适合流媒体或设备播放,对缓存压力可控。
CBR(Constant Bit Rate) 恒定码率模式 每帧输出码率几乎固定,播放非常稳定,但文件可能大或画质不均。

每帧码率 (Mbps)
20 |           ──╮
18 |        ╭─╯ ╰─╮   <- CRF 高峰
16 |     ╭─╯      ╰─╮
14 |  ╭─╯            ╰─╮
12 |╭─╯                ╰─╮
10 |╯                      <- CRF 波动大,峰值可能填满 SBM
 8 |─────┬─────────────────────────  <- SBM 上限
 6 |     │
 4 |     │───────────────╮ <- ABR 平均码率 5 Mbps
 2 |     │               │
 0 |─────┴───────────────┴─────────
       时间 →