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

如何检查test.h264文件能否播放

快速判断方法

方法1: 直接用播放器测试(最简单)

  1. 从Android设备下载文件
    bash adb pull /storage/emulated/0/Android/data/com.anyun.h264/files/test.h264 ./test.h264

  2. 用VLC播放器打开

  1. 如果能播放
  • 说明文件格式正确
  • 可以看到视频内容
  1. 如果不能播放
  • 可能缺少SPS/PPS
  • 可能只有1帧
  • 可能格式错误

方法2: 使用Python工具检查(详细分析)

  1. 确保安装了Python (Python 3.6+)

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

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

  4. 查看检查结果

可以播放的标志:
- ✓ 包含SPS (序列参数集)
- ✓ 包含PPS (图像参数集)
- ✓ 包含IDR关键帧
- ✓ 有多个NALU单元(建议>10个)

不能播放的标志:
- 缺少SPS或PPS
- 只有1-2个NALU单元
- 文件太小(<100字节)

方法3: 使用ffprobe检查(如果安装了FFmpeg)

ffprobe test.h264

如果能正确显示视频信息(分辨率、帧率等),说明文件可以播放。

方法4: 查看文件大小(粗略判断)

# 在Android设备上
adb shell "ls -lh /storage/emulated/0/Android/data/com.anyun.h264/files/test.h264"

参考标准:
- ✅ 可以播放:通常 > 10KB(640x480@25fps,3秒约30-50KB)
- ⚠️ 可能只有1帧:< 5KB
- ❌ 文件异常:= 0KB

检查文件内容(高级)

使用hexdump查看文件头

hexdump -C test.h264 | head -20

正常文件应该看到:
00000000 00 00 00 01 67 64 00 1f ac 72 84 44 26 84 00 00 |....gd...r.D&...| 00000010 00 01 00 00 00 01 68 ee 3c b0 44 00 00 00 01 06 |......h.<.D.....|

  • 00 00 00 01 = Annex-B起始码(4字节)
  • 67 = SPS的NALU类型(0x67 & 0x1F = 7)
  • 68 = PPS的NALU类型(0x68 & 0x1F = 8)

使用adb在设备上直接检查

# 检查文件大小
adb shell "stat -c '%s' /storage/emulated/0/Android/data/com.anyun.h264/files/test.h264"

# 查看文件前50字节
adb shell "hexdump -C /storage/emulated/0/Android/data/com.anyun.h264/files/test.h264 | head -5"

常见问题诊断

❌ 问题1: 文件只有1帧、0秒

原因:
- 编码器输出处理不完整
- SPS/PPS没有正确写入
- 编码循环提前退出

解决方案:
✅ 已经修复!新代码包含:
- 正确处理SPS/PPS配置数据
- 在关键帧时合并SPS/PPS
- 改进编码循环,处理所有输出
- 添加清空编码器功能

建议:
1. 重新编译运行应用
2. 录制至少3-5秒
3. 正常停止编码(不要强制退出)

❌ 问题2: VLC无法播放

检查步骤:

  1. 查看文件大小
    bash adb shell "ls -lh /storage/emulated/0/Android/data/com.anyun.h264/files/test.h264"
    如果太小(<1KB),说明可能只有配置数据

  2. 查看Logcat日志
    bash adb logcat -s H264Encoder:D | grep -E "Frame encoded|SPS/PPS|NALU"
    应该看到:

  • "SPS/PPS included in key frame data"
  • "Frame encoded: ..." (多次)
  1. 检查文件格式
    bash adb shell "hexdump -C /storage/emulated/0/Android/data/com.anyun.h264/files/test.h264 | head -3"
    应该看到 00 00 00 0100 00 01

❌ 问题3: 文件存在但播放器报错

可能原因:
1. 文件格式不是纯Annex-B
2. 缺少SPS/PPS
3. 数据损坏

解决方法:
1. 使用 check_h264.py 详细检查
2. 查看Logcat确认编码过程正常
3. 尝试用ffmpeg转换:
bash ffmpeg -i test.h264 -c copy test_fixed.h264

验证修复效果

修复后的代码应该能够:

生成可播放的H264文件
- 包含完整的SPS/PPS
- 包含多个帧(IDR + 非IDR)
- 正确的Annex-B格式

文件特征:
- 文件大小 > 10KB(3秒录制)
- NALU单元数量 > 10个
- 包含SPS (类型7)
- 包含PPS (类型8)
- 包含IDR关键帧 (类型5)
- 包含非IDR帧 (类型1)

下一步

  1. 重新运行应用,录制3-5秒视频
  2. 下载文件到本地
  3. 用VLC播放验证
  4. 如果还有问题,运行检查工具获取详细诊断