-
Notifications
You must be signed in to change notification settings - Fork 9
ByteStream
このエントリでは、 ITU-T H.264 の Annex B にある ByteStream について説明します。
ByteStream は 00 00 01 ...
から始まるバイト列を1区切りとしています。この 00 00 01
をスタートコードと呼びます。
スタートコードの前に複数の余計な 00
が存在する場合もありますが、これらも正常なデータです。00
は適切に読み飛ばす必要があります。
00 00 00 00 00 01 nn nn
といったバイト列は余計な00
を読み飛ばし、00 00 01 nn nn
として解釈する必要があります
MPEG-2 TS から取得できるバイナリデータは ByteStream format です
ByteStream 化された NALUnit は以下のようになっており、 スタートコードから次のスタートコードまでが1つのNALUnitに相当します。
+---------------+----------++---------------+----------+------
| 00 00 01 | NAL Unit || 00 00 01 | NAL Unit | ...
+---------------+----------++---------------+----------+------
MPEG4ByteStream.convertByteStreamToNALUnitObjectArray の引数 stream に指定できるデータはこのフォーマットです。
MP4 に埋め込んで使用するバイナリデータは NAL file format (H.264 Raw Stream) です。 それぞれの NALUnit の前に 4byte の NALUnitSize が存在します
+--------------------+----------++--------------------+----------+------
| NALUnitSize(4byte) | NAL Unit || NALUnitSize(4byte) | NAL Unit | ...
+--------------------+----------++--------------------+----------+------
ffmpeg で 拡張子を.264
にすると、H.264 Raw Stream を出力できます。
ffmpeg が生成する H.264 Raw Stream には AUD, SPS, PPS は含まれず、IDR などのピクチャ情報と SEI のみが含まれます。
SPS と PPS は、MPEG-4 part 15 AVCDecoderConfigurationRecord に格納されます。
aligned(8) class AVCDecoderConfigurationRecord {
unsigned int(8) configurationVersion = 1;
unsigned int(8) AVCProfileIndication;
unsigned int(8) profile_compatibility;
unsigned int(8) AVCLevelIndication;
bit(6) reserved = ‘111111’b;
unsigned int(2) lengthSizeMinusOne;
bit(3) reserved = ‘111’b;
unsigned int(5) numOfSequenceParameterSets;
for (i=0; i< numOfSequenceParameterSets; i++) {
unsigned int(16) sequenceParameterSetLength ;
bit(8*sequenceParameterSetLength) sequenceParameterSetNALUnit;
}
unsigned int(8) numOfPictureParameterSets;
for (i=0; i< numOfPictureParameterSets; i++) {
unsigned int(16) pictureParameterSetLength;
bit(8*pictureParameterSetLength) pictureParameterSetNALUnit;
}
}
ADDR 0 1 2 3 4 5 6 7 8 9 A B C D E F
------ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ---- ASCII ----- --- RULE ---
000000 00 00 00 01 09 f0 00 00 00 01 67 64 00 0a ac b8 ..........gd....
~~~~~~~~~~~ ~~~~~ AUD
~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ SPS
000010 40 8d 08 00 00 03 00 08 00 00 03 00 10 20 00 00 @............ ..
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SPS
~~~~~
000020 00 01 68 ee 0f 2c 8b 00 00 01 06 05 ff ff 5b dc ..h..,........[.
~~~~~ ~~~~~~~~~~~~~~ PPS
~~~~~~~~ ~~~~~~~~~~~~~~~~~ SEI
:
:
000280 3d 31 3a 31 2e 30 30 00 80 00 00 01 65 88 84 37 =1:1.00.....e..7
~~~~~~~~~~~~~~~~~~~~~~~~~~ SEI
~~~~~~~~ ~~~~~~~~~~~ IDR
000290 7c ff ff e1 16 c4 4a e9 16 66 9e 80 a8 3f ad eb |.....J..f...?..
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IDR
0002a0 19 17 6f 2e ed 71 93 90 da 5f b0 f2 00 33 18 d4 ..o..q..._...3..
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IDR
0002b0 b1 56 27 f9 e4 fb a4 ae fa 52 0a 8e 05 e4 e4 ae .V'......R......
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IDR
0002c0 07 a8 ee 0e 0e 77 f3 e2 03 5d 00 ee 2a 25 31 0a .....w...]..*%1.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IDR
0002d0 ff 9d 5e af 17 01 66 1e 2c 9b 30 00 24 c0 65 95 ..^...f.,.0.$.e.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IDR
0002e0 29 37 33 7e 9c 46 ab c7 71 aa 90 f0 7d 2a 20 db )73~.F..q...}* .
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IDR
0002f0 fb 9a 31 ba bc e7 15 0c 11 96 98 9f df a2 06 bf ..1.............
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IDR
000300 71 af b9 ac a9 61 00 00 00 01 09 f0 00 00 00 01 q....a..........
~~~~~~~~~~~~~~~~~ IDR
~~~~~~~~~~~ ~~~~~ AUD
~~~~~~~~~~~ SPS