iPhone中H 264流的SPS值

时间:2013-02-26 19:27:57

标签: iphone ios ffmpeg avfoundation h.264

有人可以向我指出有助于我获取iPhone正确的SPS和PPS值的文档。

3 个答案:

答案 0 :(得分:2)

问题有点不清楚......

Picture Parameter Set在7.3.2.2章的最新ITU-T release标准中进行了描述

Sequence Parameter Set在第7.3.2.1章中描述。

答案 1 :(得分:1)

我相信您知道,但您只能将H264编码的视频保存到iOS上的文件(.mp4,.mov)中。目前还无法从代码访问编码视频帧。因此,如果要创建具有编码视频的mp4文件,则需要使用AVAssetWriter。关于如何做到这一点,Apple有一个很好的example code

我不知道发布不同SPS / PPS的地方;因为它们会根据您的压缩设置,图像大小以及您是以纵向还是横向模式编码视频而有所不同。您可以使用上面的示例代码(RosyWriter)生成一些带有编码预设的小.mp4文件;然后我会使用十六进制编辑器手动查找SPS / PPS。请注意,作为更大的mp4信息结构的一部分,SPS / PPS将在H264流之后的文件末尾。您可以在线找到有关其结构的更多信息。

这是我发现对我的项目有用的一些SPS / PPS。其中一些可能适合您,但如果没有,您可以使用H264编码预设生成mp4并找到必要的SPS / PPS。我的视频是使用AVVideoProfileLevelH264Baseline30编码的,这里是我需要的不同视频尺寸的SPS / PPS:

SPS:

// For AVCaptureSessionPresetLow(144x192) AVCaptureSessionLandscape on Iphone4S, Iphone5
char iphone_sps[] = {0x67, 0x4D, 0x00, 0x0C, 0xAB, 0x41, 0x82, 0x74, 0xD4, 0x04, 0x04, 0x18, 0x08};

// For AVCaptureSessionPresetLow(144x192), AVCaptureVideoOrientationPortrait on all Ipads
char ipad_sps[] = {0x67, 0x4D, 0x00, 0x0C, 0xAB, 0x41, 0x23, 0x34, 0xD4, 0x04, 0x04, 0x18, 0x08};

// Iphone 4G AVCaptureSessionPresetLow (144x192), AVCaptureVideoOrientationPortrait
char iphone4g_sps[] = {0x67, 0x42, 0x00, 0x1E, 0x8D, 0x68, 0x24, 0x66, 0x9A, 0x83, 0x00, 0x83, 0x01};

// For AVCaptureSessionPreset352x288 (352x288), AVCaptureVideoOrientationLandscape 
char iphone_sps[] = {0x67, 0x42, 0x00, 0x1E, 0xAB, 0x40, 0xB0, 0x4B, 0x4D, 0x40, 0x40, 0x41, 0x80, 0x80};

// For AVCaptureSessionPreset352x288 (352x288), AVCaptureVideoOrientationPortrait
char ipad_sps[] = {0x67, 0x42, 0x00, 0x1E, 0xAB, 0x40, 0xB0, 0x4B, 0x4D, 0x40, 0x40, 0x41, 0x80, 0x80};

PPS:

char pps[] =  {0x28, 0xCE, 0x3C, 0x80};
char iphone4g_pps[] = {0x68, 0xCE, 0x09, 0xC8};

答案 2 :(得分:1)

您可以将单个帧编码为文件,然后从该文件中提取sps和pps。我有一个示例,说明如何在http://www.gdcl.co.uk/2013/02/20/iOS-Video-Encoding.html

处完成此操作