2013-02-26 113 views
0

有人可以指向我的文档,这将有助于我为iPhone获得正确的SPS和PPS值。iPhone中的H 264流的SPS值为

+0

你说的H264视频流正在编码的iPhone? – Aki 2013-02-26 20:50:29

+0

是的。这是正确的。 – 2013-02-26 21:25:02

回答

2

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

Picture Parameter Set在7.3.2.1章节描述了在标准的最新ITU-T release在章节7.3.2.2

Sequence Parameter Set描述。

1

我确定您知道,但您只能将H264编码的视频保存到iOS上的文件(.mp4,.mov)中。目前尚无法从代码中获取已编码的视频帧。所以如果你想创建一个具有编码视频的mp4文件,你需要使用AVAssetWriter。关于如何做到这一点,Apple有一个很好的example code

我不知道任何发布不同SPS/PPS的地方;因为它们根据压缩设置,图像大小以及是否以纵向或横向模式编码视频而有所不同。您可以使用上面的示例代码(RosyWriter)来生成一些带有编码预设的小型.mp4文件;然后我会使用十六进制编辑器手动查找SPS/PPS。请注意,SPS/PPS将作为更大的mp4信息结构的一部分在您的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}; 
+0

你在哪里找到这些? – 2013-02-27 06:58:52

+0

就像我在我的回答中所描述的那样,SPS/PPS只在视频中显示,我通过avfoundation/avassetwriter类生成了mp4文件 – Aki 2013-02-27 13:03:40

1

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

+0

您是我的救星@Geraint!我一直在寻找一个关于这个问题的适当帖子,而且你的代码甚至有很好的示例代码和一个非常简洁的项目列表! – 2013-03-24 18:28:24

+0

3年后,iOs 9仍然如此?这似乎令人难以置信。我可以通过udp套接字接收h264数据并轻松在硬件中对其进行解码,但是如果我想从相机发送h264数据,我需要先将它写入文件,然后从文件中读取数据? 那么,如何在没有所有延迟的情况下结束摄像机数据的唯一方法是使用FFMpeg将其编码为软件? – asendra 2016-05-19 09:56:57

+0

不,从ios 8开始不再需要。您可以直接使用VideoToolbox编码器和解码器apis。 – 2016-05-19 19:09:54