我将使用 ffmpeg 将 h.264 流数据转换为 .mp4
SPS NALU:67 64 00 1F AC 56 50 20 06 1A 6E 04 04 04 0D A0 88 46 58
PPS 纳鲁:28 EE 37 27
我使用上述 NALU 制作了原始文件,如下所示:
|0x 00 00 00 01 | SPS | 0x 00 00 01 |缴费灵 |帧数据| 0x 00 00 01|
我的原始文件在这里:https://www.dropbox.com/s/gc9s9mll6ev9aoq/sps_pps_payload?dl=0
并自行构建数据帧:https://www.dropbox.com/s/ibs7io0aprpo66e/packet1?dl=0
在 ffmpeg 使用以下命令:
ffmpeg.exe -f h264 -i RawInputFile -vcodec copy -r 25 OutPutFilename.mp4
但它总是给出:
大小为 XXXXX 的存取单元中缺少图片
无框!
流 0 的解码失败
找不到流 0 的编解码器参数:未指定大小
我哪里错了?
最佳答案
你是如何生成“RawInputFile”的?查看 SPS,PPS 缓冲区有不同的帧头,SPS 情况下为 0x00 0x00 0x00 0x01 PPS 情况下为 0x00 0x00 0x01。虽然这应该不是问题。
但是也有不同的 NAL header ,在 SPS 的情况下是 0x67 ,在 PPS 的情况下是 0x28 。 NAL 的低五位代表帧类型
例如
0x67 & 0x1f = 0x07 这是 SPS
0x28 & 0x1f = 0x08 这是 PPS
但是为什么高三位会发生变化呢?需要检查这 3 位代表什么。
关于您的问题,FFMPEG 或任何其他多路复用器需要以下格式的输入流,
0x00 0x00 0x00 0x01 0x67 <>
0x00 0x00 0x00 0x01 0x68 <>
0x00 0x00 0x00 0x01 0x65 <>
0x00 0x00 0x00 0x01 0x61 <>
.
.
0x00 0x00 0x00 0x01 0x67 <>
0x00 0x00 0x00 0x01 0x68 <>
注意:
此处 0x67、0x68 等仅用作示例,高 3 位可以更改。
关于video - 我的数据包格式是否正确,可以使用 ffmpeg 将 h.264 数据转换为 .mp4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25624719/