我将使用 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 缓冲区有不同的帧头,0x00 0x00 0x00 0x01 在 SPS 的情况下 0x00 0x00 0x01 在 PPS 的情况下。虽然这不应该是问题。
但也有不同的 NAL header ,在 SPS 的情况下是 0x67,在 PPS 的情况下是 0x28。 NAL的低五位代表帧类型
例如
0x67 & 0x1f = 0x07 这是 SPS
0x28 & 0x1f = 0x08 即 PPS
但是为什么高三位在变呢?需要检查这 3 位代表什么。
关于您的问题,FFMPEG 或任何其他混合器需要以下格式的输入流,
0x00 0x00 0x00 0x01 0x67 <<......SPS 帧......>>
0x00 0x00 0x00 0x01 0x68 <<......PPS 帧......>>
0x00 0x00 0x00 0x01 0x65 <<......我帧.......>>
0x00 0x00 0x00 0x01 0x61 <<......P 帧......>>
.
.
0x00 0x00 0x00 0x01 0x67 <<......SPS 帧......>>
0x00 0x00 0x00 0x01 0x68 <<......PPS 帧......>>
注意: 这里 0x67、0x68 等仅供引用,高 3 位可以更改。
关于video - 对于使用 ffmpeg 将 h.264 数据转换为 .mp4,我的数据包格式是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25624719/