iPhone の正しい SPS 値と PPS 値を取得するのに役立つドキュメントを教えてください。
4 に答える
質問が少しわかりにくい...
Picture Parameter Set
7.3.2.2章の標準の最新のITU-Tリリースで説明されています
Sequence Parameter Set
7.3.2.1章で説明されています。
ご存知だと思いますが、iOS では H264 でエンコードされたビデオをファイル (.mp4、.mov) にしか保存できません。コードからエンコードされたビデオ フレームへのアクセスはまだありません。したがって、ビデオをエンコードした mp4 ファイルを作成する場合は、AVAssetWriter を使用する必要があります。Apple には、これを行う方法に関する良いサンプル コードがあります。
さまざまな SPS/PPS が公開されている場所を知りません。圧縮設定、画像サイズ、およびビデオを縦向きまたは横向きモードでエンコードしているかどうかによって異なるためです。上記のサンプル コード (RosyWriter) を使用して、エンコード プリセットを使用していくつかの小さな .mp4 ファイルを生成できます。次に、16 進エディタを使用して 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};
単一のフレームをファイルにエンコードし、そのファイルから sps と pps を抽出できます。http://www.gdcl.co.uk/2013/02/20/iOS-Video-Encoding.htmlで正確にそれを行う方法を示す例があります