1、问题现象:
能接收到设备传送过来的视频数据(bps>0),但硬解和软解均解码失败,无法出图。
2、问题分析:
从日志打印中看:
硬解码时,无法正确解析出SPS和PPS的长度;
[0] 00 00 00 01 65 B8 00 00 05 32 A0 47 BA 12 E0 6F FE F2 A3 3C 04 F0 8F 3B 72 B3 6F BD CB F1 4E CC 42 15 E6 66 13 03 C4 78 D2 C9 8E FF 98 27 5E 57 A3 ...
2018-02-07 10:32:02.974884+0800 Kalay[4296:2279899] readsize --> 75059
2018-02-07 10:32:02.974920+0800 Kalay[4296:2279899] startCodeSPSIndex --> 3
2018-02-07 10:32:02.974954+0800 Kalay[4296:2279899] startCodePPSIndex --> 0
2018-02-07 10:32:02.974987+0800 Kalay[4296:2279899] startCodeIFRAMEIndex --> 0
2018-02-07 10:32:02.975020+0800 Kalay[4296:2279899] spsLength --> -3
2018-02-07 10:32:02.975109+0800 Kalay[4296:2279899] ppsLength --> 0
软解码时,I Frame 解码失败,日志打印为:
[h264 @ 0x1079cbe00] non-existing PPS 0 referenced
[h264 @ 0x1079cbe00] decode_slice_header error
[h264 @ 0x1079cbe00] no frame!
3、问题解决:
需要查看设备端H264编码的方式,数据中需要包含I Sliect(00 00 00 01 65 开头)+ PPS (00 00 00 01 68 开头) + SPS (00 00 00 01 67 开头)
另附参考文章:http://www.spirithy.com/2016/11/15/ffmpeg_fifth/