为什么在写入流数据之前需要先将u8NAL写入.h264文件
Why we need to write u8NAL first to .h264 file before writing stream data
我正在从服务器读取 h264 格式的数据,当我们包含 UINT8 u8NAL[4] = {0x00, 0x00, 0x00, 0x01};
时,它成功写入了 .h264 文件。
但是当我们注释 //UINT8 u8NAL[4] = {0x00, 0x00, 0x00, 0x01};
.h264 文件存储数据时,我们在 Vlc 或 Qt 上看不到数据。
UINT8 u8NAL[4] = {0x00, 0x00, 0x00, 0x01};
char name1[100], name2[100];
_snprintf(name1, 99, "D:\sizeH264_%p.txt", threadArgs->clientHandle);
_snprintf(name2, 99, "D:\dataH264_%p.h264", threadArgs->clientHandle);
fp = fopen(name1, "w");
fpFrames = fopen(name2, "wb");
fwrite(u8NAL, 4, 1, fpFrames);
fwrite(threadArgs->tmpStreamParams->spsData, threadArgs->tmpStreamParams->spsDataSize, 1, fpFrames);
0 0 0 1 它是 h264 帧的 header 部分,所以简而言之,播放器可以知道我必须从哪里开始和从哪里停止,这就是我们必须将此十六进制数据提供给每个开始的方式框架点。
只有在存储数据时才需要,否则你可以直接给播放器帧。
我正在从服务器读取 h264 格式的数据,当我们包含 UINT8 u8NAL[4] = {0x00, 0x00, 0x00, 0x01};
时,它成功写入了 .h264 文件。
但是当我们注释 //UINT8 u8NAL[4] = {0x00, 0x00, 0x00, 0x01};
.h264 文件存储数据时,我们在 Vlc 或 Qt 上看不到数据。
UINT8 u8NAL[4] = {0x00, 0x00, 0x00, 0x01};
char name1[100], name2[100];
_snprintf(name1, 99, "D:\sizeH264_%p.txt", threadArgs->clientHandle);
_snprintf(name2, 99, "D:\dataH264_%p.h264", threadArgs->clientHandle);
fp = fopen(name1, "w");
fpFrames = fopen(name2, "wb");
fwrite(u8NAL, 4, 1, fpFrames);
fwrite(threadArgs->tmpStreamParams->spsData, threadArgs->tmpStreamParams->spsDataSize, 1, fpFrames);
0 0 0 1 它是 h264 帧的 header 部分,所以简而言之,播放器可以知道我必须从哪里开始和从哪里停止,这就是我们必须将此十六进制数据提供给每个开始的方式框架点。
只有在存储数据时才需要,否则你可以直接给播放器帧。