H264 NAL 单元 header - 检测类型并引入此格式的自定义视频
H264 NAL unit header - detect type and bring custom videos in this format
在我设备的一个特殊界面上,我可以看到经过的NAL单元。下面显示了两个示例文件:
P-Frames:
00 00 00 01 41 FC 0F 90 86 DE F9 E1 4D 37 AE D3
24 A9 F2 F7 E8 A0 9A 9E B3 FD FE 3A D2 77 3E 79
8C 93 2D 75 61 60 A0 FA BF CB 46 B6 67 A6 C2 81
2B 47 A5 A2 71 5D 4F 90 32 14 EE D5 DE 58 3B 6E
...
I-Frames / Key-Frames:
00 00 00 01 65 B8 20 67 FF FE 1E 8A 00 02 05 BE
4D 49 85 EB FC 9E 44 F7 D0 CE A0 77 25 CD 80 D4
4A A4 E5 66 EE E7 F9 17 E5 81 DC 94 9C 2B 3C DF
DE D2 63 CC 89 98 82 4D AF C6 BF E8 3F 0D 3C BE
...
我的目标是能够覆盖此数据以便注入/播放我自己的视频。这么好,似乎工作,但它看起来还不太好。虽然之前从同一接口存储的重放 NAL 单元看起来不错,但注入的视频却不然。我想我还没有得到正确的视频格式。
我使用了 ffmpeg 等不同的工具将视频转换为 h264 格式。但是视频仍然看起来不正常。我认为问题在于 key-frames。虽然我在转换后的视频中看到很多 00 00 00 01 41 部分,但我找不到 00 00 00 01 65.
这是什么视频格式?以及如何将我自己的视频转换成这种格式?通过使用 ffmpeg 或其他工具。
提前致谢
首先简单介绍一下H264 NAL header。 NAL header 的大小为 1 个字节,它跟在起始代码之后。起始码可以是 00 00 01 或 00 00 00 01。一些编码器使用短起始码,即 00 00 01,而其他编码器使用长起始码,即 00 00 00 01。
见下文 NAL header 格式
对于关键帧,nal_ref_idc 应该是 non-zero。 nal_unit_type 对于 key-frames 是“5”。理想情况下,您应该寻找关键帧的位模式是“00 00 00 01 25”。但是,nal_ref_idc 的大小为 2 位,因此它为关键帧创建了更多 bit-pattern 组合。您应该搜索的模式是“00 00 01 25”、“00 00 01 45”和“00 00 01 65”。最好搜索短起始码,反正能解决你的问题
在我设备的一个特殊界面上,我可以看到经过的NAL单元。下面显示了两个示例文件:
P-Frames:
00 00 00 01 41 FC 0F 90 86 DE F9 E1 4D 37 AE D3
24 A9 F2 F7 E8 A0 9A 9E B3 FD FE 3A D2 77 3E 79
8C 93 2D 75 61 60 A0 FA BF CB 46 B6 67 A6 C2 81
2B 47 A5 A2 71 5D 4F 90 32 14 EE D5 DE 58 3B 6E
...
I-Frames / Key-Frames:
00 00 00 01 65 B8 20 67 FF FE 1E 8A 00 02 05 BE
4D 49 85 EB FC 9E 44 F7 D0 CE A0 77 25 CD 80 D4
4A A4 E5 66 EE E7 F9 17 E5 81 DC 94 9C 2B 3C DF
DE D2 63 CC 89 98 82 4D AF C6 BF E8 3F 0D 3C BE
...
我的目标是能够覆盖此数据以便注入/播放我自己的视频。这么好,似乎工作,但它看起来还不太好。虽然之前从同一接口存储的重放 NAL 单元看起来不错,但注入的视频却不然。我想我还没有得到正确的视频格式。 我使用了 ffmpeg 等不同的工具将视频转换为 h264 格式。但是视频仍然看起来不正常。我认为问题在于 key-frames。虽然我在转换后的视频中看到很多 00 00 00 01 41 部分,但我找不到 00 00 00 01 65.
这是什么视频格式?以及如何将我自己的视频转换成这种格式?通过使用 ffmpeg 或其他工具。
提前致谢
首先简单介绍一下H264 NAL header。 NAL header 的大小为 1 个字节,它跟在起始代码之后。起始码可以是 00 00 01 或 00 00 00 01。一些编码器使用短起始码,即 00 00 01,而其他编码器使用长起始码,即 00 00 00 01。
见下文 NAL header 格式
对于关键帧,nal_ref_idc 应该是 non-zero。 nal_unit_type 对于 key-frames 是“5”。理想情况下,您应该寻找关键帧的位模式是“00 00 00 01 25”。但是,nal_ref_idc 的大小为 2 位,因此它为关键帧创建了更多 bit-pattern 组合。您应该搜索的模式是“00 00 01 25”、“00 00 01 45”和“00 00 01 65”。最好搜索短起始码,反正能解决你的问题