# 如何检查test.h264文件能否播放 ## 快速判断方法 ### 方法1: 直接用播放器测试(最简单) 1. **从Android设备下载文件** ```bash adb pull /storage/emulated/0/Android/data/com.anyun.h264/files/test.h264 ./test.h264 ``` 2. **用VLC播放器打开** - 下载VLC: https://www.videolan.org/vlc/ - 直接双击 `test.h264` 文件 - 或者拖放到VLC窗口 3. **如果能播放** ✅ - 说明文件格式正确 - 可以看到视频内容 4. **如果不能播放** ❌ - 可能缺少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) ```bash ffprobe test.h264 ``` 如果能正确显示视频信息(分辨率、帧率等),说明文件可以播放。 ### 方法4: 查看文件大小(粗略判断) ```bash # 在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查看文件头 ```bash 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在设备上直接检查 ```bash # 检查文件大小 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: ..." (多次) 3. **检查文件格式** ```bash adb shell "hexdump -C /storage/emulated/0/Android/data/com.anyun.h264/files/test.h264 | head -3" ``` 应该看到 `00 00 00 01` 或 `00 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. **如果还有问题**,运行检查工具获取详细诊断