编辑 | blame | 历史 | 原始文档

H264文件检查工具使用说明

快速检查

方法1: 直接从设备路径检查(如果文件在本地)

python check_h264.py test.h264

方法2: 从Android设备下载文件后检查

  1. 连接Android设备并启用USB调试

  2. 查找文件路径

Android设备上的文件路径通常是:
/storage/emulated/0/Android/data/com.anyun.h264/files/test.h264

或者使用adb查找:
bash adb shell "find /sdcard -name test.h264 2>/dev/null"

  1. 下载文件到本地
    bash adb pull /storage/emulated/0/Android/data/com.anyun.h264/files/test.h264 ./test.h264

  2. 运行检查工具
    bash python check_h264.py test.h264

检查内容

工具会检查以下内容:

  1. 文件是否存在
  2. 文件大小(应该大于100字节)
  3. NALU单元数量(至少应该有SPS/PPS + 1个关键帧)
  4. 是否包含SPS(序列参数集,必需)
  5. 是否包含PPS(图像参数集,必需)
  6. 是否包含IDR关键帧(必需)
  7. 是否有多个帧

预期结果

一个可以播放的H264文件应该包含:

  • ✅ 至少1个SPS (类型7)
  • ✅ 至少1个PPS (类型8)
  • ✅ 至少1个IDR关键帧 (类型5)
  • ✅ 多个NALU单元(建议>10个)

常见问题

Q: 文件只有1帧怎么办?

A: 这是之前的问题。现在的代码已经修复:
- ✅ 正确处理SPS/PPS配置
- ✅ 在关键帧时合并SPS/PPS
- ✅ 改进编码循环,确保处理所有输出
- ✅ 添加清空编码器功能

建议:
1. 重新编译并运行应用
2. 录制至少3-5秒视频
3. 停止编码后检查文件

Q: 文件无法播放怎么办?

可能原因:
1. ❌ 缺少SPS/PPS - 检查是否输出了配置数据
2. ❌ 文件格式错误 - 检查是否是Annex-B格式
3. ❌ 只有1帧 - 检查编码循环是否正常工作

解决方案:
1. 查看Logcat日志,搜索 "H264Encoder"
2. 检查是否有 "SPS/PPS included" 日志
3. 检查是否有 "Frame encoded" 日志
4. 使用此工具检查文件结构

Q: 如何播放H264文件?

可以使用以下播放器:
- VLC Media Player(推荐)
- ffplay (FFmpeg自带)
- MPC-HC
- PotPlayer

直接双击 .h264 文件或拖放到播放器窗口即可。

调试建议

如果文件无法播放,请检查:

  1. 查看Logcat日志
    bash adb logcat -s H264Encoder:D MainActivity:D

  2. 检查关键日志

  • "SPS/PPS included in key frame data" - 说明SPS/PPS已合并
  • "Frame encoded: ..." - 说明有帧输出
  • "Encoder output EOS" - 说明正常结束
  1. 验证文件结构
    bash python check_h264.py test.h264

  2. 使用hexdump查看文件头
    bash hexdump -C test.h264 | head -20
    应该看到:00 00 00 0100 00 01(Annex-B起始码)