我将使用 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/

10-13 04:08