TechnicalTerm - uupaa/H264.js GitHub Wiki
MPEG-1
ES (Elementary Stream)
ãšã³ã³ãŒãããã Video ã Audio ããŒã¿
PTS (Presentation Time Stamp)
- ã³ã³ãã³ãããã€åºåããããæå®ããã¿ã€ã ã¹ã¿ã³ãæ å ±ãæ åãšé³å£°ã®åæã®ããã«å¿ èŠãšãªã
- STC ã PTS ã®ç€ºãæå»ã«ãªããšãã³ãŒãçµæãæ åãé³å£°ãšããŠåºåãã
- 33bits
SCR (System Clock Reference)
- ã¹ããªãŒã äžã§ã®ã·ã¹ãã ã¯ããã¯æ å ±
- 33bits
DeMUX (Demultiplexer)
- æ åããŒã¿ãšé³å£°ããŒã¿ãåé¢ãã
STC (System Time Clock)
- ã·ã¹ãã åºæºæå»ãå
éšã¯ããã¯
- 90kHz
- MPEG-1ã®ã¯ããã¯ã¯ãã¹ãŠ90kHzåäœãSTC,SCR,PTS ã90KHzãåºç€åäœãšããæå»æ å ±
- 90kHz
STD (System Target Decoder)
- MPEG-1ã®ä»®æ³çãªãã³ãŒãã¢ãã«
+----+----+
Audio ES | A1 | A2 |
+----+----+
+----+----+
Video ES | V1 | V2 |
+----+----+
+-----+----+ +-----+----+ +-----+----+ +-----+----+ +-----
Packet | PH1 | A1 | | PH2 | V1 | | PH3 | A2 | | PH4 | V2 | | ....
+-----+----+ +-----+----+ +-----+----+ +-----+----+ +-----
â â
+-----+------+-----------------------+------+------+----------
Pack | SH1 | PKH1 | Some Packets | PKH2 | .... | ...
+-----+------+-----------------------+------+------+----------
- Pack
- PKH ãš 1ã€ä»¥äžã® Packet ããæ§æãããŠããŸããSH ãå«ãäºãã§ããŸã
- Packet
- PH ãš ES ããæ§æãããŠããŸããPH ã«ã¯ PTS ã DTS ãå«ãŸããå ŽåããããŸã
- PH (Packet Header)
- Packet ã®æ å ±ãæ ŒçŽãããããã§ã
- PKH (Pack Header)
- SCR ãå«ã¿ãŸã
- 0x000001 ã§éå§ããŸã
- SH (System Header)
- å¶åŸ¡ãã©ã°, äŒéã¬ãŒã, ãããã¡å¶åŸ¡æ å ±ãªã©ãå«ãŸããŸããå¯å€é·ã§ã
- 0x000001BB ã§éå§ããŸããå³3-10åç §
LipSync
- MPEG-1 ã«ãããŠã¯ãé³å£°ãšæ åã«ãããçºçããå Žåã¯ãé³å£°ãåºæºã«ãããä¿®æ£ããŸã
- ããã¯äººéãé³ã®ããã«å¯ŸããŠããææãªããã§ã
MPEG2-TS
MPEG-2 PS
MPEG-2 PS ã¯ããŒã¿ãèªç±ã«é«éã«èªã¿èŸŒã¿ãã§ããã¡ãã£ã¢(DVD, HDD)çšã®èŠæ Œã§ãã äžæ¹ MPEG-2 TS ã¯ãå°äžæ³¢ãéä¿¡çµè·¯ãªã©ãšã©ãŒã®æ€åºãå¿ èŠãªç°å¢ãæ³å®ããŠããŸãã
MPEG-2 TS
MPEG 2-TS ã«ã¯æ å/é³å£°ä»¥å€ã®äœèšãªæ å ±ãå«ãŸãããããä¿åã«ã¯åããŸããã MPEG 2-TS ã¯æ§ã ãªãã©ãŒãããã®æ åãå å ã§ãã仿§ã§ããMPEG2 以å€ã«ãã H.264ãAACãªã©ããã€ããŒãã«æ ŒçŽããããšãã§ããŸãã
-
MPEG-2 TS 㯠13818-1:2000 (ISO/IEC) ãŸã㯠H.222.0 (ITU-T Rec) ãšããŠèŠæ ŒåãããŠããŸã
-
H.264 ãæ±ãããã«æ¡åŒµããã MPEG-2 TS 㯠13818-1:2000 (E) ãšããŠèŠæ ŒåãããŠããŸã
-
MPEG2-TS packet image
-
TH: Transport stream Header
-
PES: Packetized Elementary Stream (MPEG2 term)
+----+---------------+----+---------------+---- | TH | PES | TH | PES | ... +----+---------------+----+---------------+---- ~~~~~~~~~~~~~~~~~~~~ = MPEG-2 TS Packet
-
-
MPEG-2 TS Packet (
Packet
)- èŠæ Œã§ã¯ 188 bytes ( 4 bytes header + 184 bytes payload ) ã§ããã 192 bytes ã 204 bytes ã«æ¡åŒµããå©çšãããŠããäºããããŸãã å€ãã®å®è£ ã 188 bytes 以å€ãèªã¿èŸŒããããã«ãªã£ãŠããŸãã å°ããžã«ãããåãæ±ºã㯠http://www.arib.or.jp/english/html/overview/doc/2-STD-B31v1_7.pdf (P107)ãåç §ã®ããšã
payload_unit_start_indicator = 1
+-----------+------------------+--------------+
| HEADER(4) | pointer_field(1) | PAYLOAD(183) |
+-----------+------------------+--------------+
payload_unit_start_indicator = 0
+-----------+--------------+
| HEADER(4) | PAYLOAD(184) |
+-----------+--------------+
PSI/SI (13 bits)
Program Specific Information / Service Information.
PID === 0x0000 -> `PAT` Program Association Table
PID === 0x0001 -> `CAT` Conditional Access Table
PID === 0x0002 -> Transport Stream Description Table
PID === 0x0003 -> IPMP Control Information Table
PID === 0x0004 -> Reserved
:
PID === 0x000F -> Reserved
PID === 0x0010 -> Network_PID or Program_map_PID or elementary_PID. PSI/SI ã§ã¯ `NIT` ãšããŠäœ¿çš
PID === 0x0011 -> Network_PID or Program_map_PID or elementary_PID. PSI/SI ã§ã¯ `SDT` ãšããŠäœ¿çš
PID === 0x0012 -> Network_PID or Program_map_PID or elementary_PID. PSI/SI ã§ã¯ `EIT` ãšããŠäœ¿çš
PID === 0x0014 -> Network_PID or Program_map_PID or elementary_PID. PSI/SI ã§ã¯ `TOT` ãšããŠäœ¿çš
PID === 0x0024 -> Network_PID or Program_map_PID or elementary_PID. PSI/SI ã§ã¯ `BIT` ãšããŠäœ¿çš
:
PID === 0x1FFE -> Network_PID or Program_map_PID or elementary_PID.
PID === 0x1FFF -> Null packet
Channel
- MPEG2 ã§ã¯ Channel (çªçµ) ã¯Program ãšåŒã°ããŸã
payload_unit_start_indicator
The payload_unit_start_indicator is a 1-bit flag which has normative meaning for Transport Stream packets that carry PES packets (refer to 2.4.3.6) or PSI data (refer to 2.4.4).
When the payload of the Transport Stream packet contains PES packet data, the payload_unit_start_indicator has the following significance: a '1' indicates that the payload of this Transport Stream packet will commence with the first byte of a PES packet and a '0' indicates no PES packet shall start in this Transport Stream packet.
Payload ã PES ãã±ããããŒã¿ãå«ãã§ããå Žåã¯ã payload_unit_start_indicator ã¯ä»¥äžã®ããã«è§£éãããŸãã - 1ãªãããã€ããŒãã« PES ãã±ããã®å é ãå«ãŸããŠããŸãã - 0ãªãããã€ããŒãã« PES ãã±ããã®å é ã¯å«ãŸããŠããŸããã
If the payload_unit_start_indicator is set to '1', then one and only one PES packet starts in this Transport Stream packet. This also applies to private streams of stream_type 6 (refer to Table 2-34).
When the payload of the Transport Stream packet contains PSI data, the payload_unit_start_indicator has the following significance:
Payload ã PSI ããŒã¿ãå«ãã§ããå Žåã¯ã payload_unit_start_indicator ã¯ä»¥äžã®ããã«è§£éãããŸãã - PSIã»ã¯ã·ã§ã³ã®æåã®1ãã€ããå«ãã§ããå Žåã¯ã1ã«ãªããŸãã ãã®å Žåã¯ããã±ããã®ããããšãã€ããŒãã®éã« pointer_field (1byte)ãæ¿å ¥ãããŸã ``` | header(4byte) | pointer_field(1byte) | payload (183byte) | ``` - PSIã»ã¯ã·ã§ã³ã®æåã®1ãã€ããå«ãã§ããªãå Žåã¯ã0ã«ãªããŸãã ãã®å Žåã¯ããã±ããã®ããããšãã€ããŒãã®éã« pointer_field (1byte)ãæ¿å ¥ãããŸãã ``` | header(4byte) | payload (184byte) | ```
if the Transport Stream packet carries the first byte of a PSI section, the payload_unit_start_indicator value shall be '1', indicating that the first byte of the payload of this Transport Stream packet carries the pointer_field. If the Transport Stream packet does not carry the first byte of a PSI section, the payload_unit_start_indicator value shall be '0', indicating that there is no pointer_field in the payload. Refer to 2.4.4.1 and 2.4.4.2. This also applies to private streams of stream_type 5 (refer to Table 2-34).
H.264/AVC
H.264/AVC ã® Spec ã¯ãITU-T ãã pdf ãç¡æã§ããŠã³ããŒãã§ããã
ISO/IEC ã§ã¯åããã®ãææã§è²©å£²ããŠããã
VCL (Video Coding Layer)
ãããªç¬Šå·åã¬ã€ã€, åç»ç¬Šå·åãæ±ããåæ®µã®ã·ã¹ãã
NAL (Network Abstraction Layer)
笊å·åããæ å ±ãäŒé/èç©ãè¡ã次段ã®ã·ã¹ãã
Source | â æ åãœãŒã¹
---------|--------------------
VCL | â 笊å·åããŒã¿
---------|--------------------
NAL | â ã¹ã¿ãŒãã³ãŒãã®ä»äž, ãã¹ãã¹ããªãŒã ãžã®å€æ
---------|--------------------
MPEG2-TS | â
RBSP
Raw Byte Sequence Payload
- å§çž®æžã¿ã®åç»ã®çããŒã¿
- é·ã㯠byte ã¢ã©ã€ã¡ã³ã
- é·ãã 8ã®åæ°ä»¥å€ã ã£ãããRBSP ã®æ«å°Ÿã« RBSP_trailng_bits ãä»äžã byte ã¢ã©ã€ã³ãè¡ã
RBSP_trailng_bits
RBSP ã®æ«å°Ÿã«é 眮ããè©°ãç©ã§ãã
- å
é ã 1 ã§ããã以é㯠0 ã®ãããå
- 7bit ã®ééãããå Žåã¯ã0b1000000 ã§åãã
- 4bit ã®ééãããå Žåã¯ã0b1000 ã§åãã
- 2bit ã®ééãããå Žåã¯ã0b10 ã§åãã
- 1bit ã®ééãããå Žåã¯ã0b1 ã§åãã
NAL Unit
- NAL Header + RBSP
NAL Header
-
é·ã㯠1 byte, å é ã 0 ã§ã
-
nal_ref_idc (åç §ãã¯ãã£ãšãªãã¹ã©ã€ã¹ãå«ãŸããŠãããã©ãã)
-
nal_unit_type (NAL Unit ã® type ã瀺ãèå¥å)
nal_unit_type Subject 0 æªå®çŸ© 1 IDR 以å€ã®ãã¯ãã£ã®äžéš(ã¹ã©ã€ã¹) 2 ããŒã¿ããŒãã£ã·ã§ãã³ã°Aã§ç¬Šå·åãããã¹ã©ã€ã¹ 3 ããŒã¿ããŒãã£ã·ã§ãã³ã°Bã§ç¬Šå·åãããã¹ã©ã€ã¹ 4 ããŒã¿ããŒãã£ã·ã§ãã³ã°Cã§ç¬Šå·åãããã¹ã©ã€ã¹ 5 IDR ãã¯ã㣠6 SEI 7 SPS 8 PPS 9 AU ããªãã¿ 10 End of Sequence 11 End of Stream 12 Filler Data (ãã©ãŒããããæŽããããã«æ¿å ¥ãããè©°ãç©ããããŒããŒã¿) 13 SPSæ¡åŒµ, FRExt ã§äœ¿çš 14 .. 18 Reserved 19 è£å©ã¹ã©ã€ã¹, FRExt ã§äœ¿çš 20 .. 23 Reserved 24 .. 31 æªå®çŸ©
IDR Picture
Instantaneous Decoding Refresh
- å é ã®ç»åãã¢ãã¡ãŒã·ã§ã³ã§èšããšããã® Key Frame ãšãªãç»åãããåäœã§æç«ããç»åãæå³ããŸã
SPS
Sequence Parameter set
- ã·ãŒã±ã³ã¹å šäœã®ãã©ã¡ã¿ã§ãããããæ å ±ã§ã
- çç¥ãå¯èœã§ããçç¥ãããŠããå Žåã¯ããããŸã§ã«çŸããæåŸ(latest)ã® SPS ãæµçšããŸã
PPS
Picture Parameter set
- ãã¯ãã£å šäœã®ãã©ã¡ã¿ã§ã
- çç¥ãå¯èœã§ããçç¥ãããŠããå Žåã¯ããããŸã§ã«çŸããæåŸ(latest)ã® PPS ãæµçšããŸã
SEI
Supplemental Enhancement Information
- VCL ã®ç¬Šå·åã«ã¯å¿ èŠããªãä»å æ å ±ã§ã
- ãŠãŒã¶ããŒã¿ãªã©ã SEI ã«æ ŒçŽããããšãã§ããŸã
AU ããªãã¿
Access Unit Delimiter
- ã¢ã¯ã»ã¹ãŠãããã®å é ã瀺ããŸã
- ã¢ã¯ã»ã¹ãŠãããã«å«ãŸããã¹ã©ã€ã¹ã®çš®é¡ãæ ŒçŽãããŠããŸã
End of Sequence
ã·ãŒã±ã³ã¹ã®çµç«¯ã瀺ããŸã
End of Stream
æ å/é³å£°ã¹ããªãŒã å šäœã®çµç«¯ã瀺ããŸã
Filler Data
ããŒã¿éãå°ãªãããŠèŠæ Œã®ä»æ§ãæºãããªãå Žåã«æ¿å ¥ãããç¡æå³ãªããŒã¿ã§ã
VCL NAL ãŠããããš éVCL NAL ãŠããã
- VCL NAL ãŠããããšã¯ãnal_unit_type ã 1 ã 5 ã®ãã®ã§ãVCL ã§çæããã NAL ãŠããããæå³ããŸã
- éVCL NAL ãŠããããšã¯ãSPS ã PPS ã®äºã§ãnal_unit_type ã 6以äžã®ãã®ãæå³ããŸã
ã·ãŒã±ã³ã¹
NAL Unit
nal_unit( NumBytesInNALunit ) { Categories Descriptor
forbidden_zero_bit All f(1) 1 bit, åžžã« 0
nal_ref_idc All u(2) 2 bit, 0 以å€ãªãåç
§ãã¹ã idc ããããŸã
nal_unit_type All u(5) 5 bit,
NumBytesInRBSP = 0
nalUnitHeaderBytes = 1
if ( nal_unit_type == 14 || nal_unit_type == 20 ) {
svc_extension_flag All u(1)
if( svc_extension_flag ) {
nal_unit_header_svc_extension( ) All // specified in Annex G
} else {
nal_unit_header_mvc_extension( ) All // specified in Annex H
}
nalUnitHeaderBytes += 3
}
for( i = nalUnitHeaderBytes; i < NumBytesInNALunit; i++ ) {
if( i + 2 < NumBytesInNALunit && next_bits( 24 ) == 0x000003 ) {
rbsp_byte[ NumBytesInRBSP++ ] All b(8)
rbsp_byte[ NumBytesInRBSP++ ] All b(8)
i += 2
emulation_prevention_three_byte All f(8) // equal to 0x03
} else {
rbsp_byte[ NumBytesInRBSP++ ] All b(8)
}
}
}
å§çž®ããŒã¿ã®éå±€æ§é
-
ã·ãŒã±ã³ã¹ã¬ã€ã€
-
ã·ãŒã±ã³ã¹ããŒã¿ãå§çž®ãããç»åããŒã¿
+-------+----+ +-------+----+ +------- | GOP | SH | + | GOP | SH | + | .... +-------+----+ +-------+----+ +-------
-
-
GOP ã¬ã€ã€
-
15æçšåºŠã® Bãã¯ãã£, Pãã¯ãã£, Iãã¯ã㣠ããŸãšãããã®
+-------+ +---++---++---++---++---++---++---++---+ +---+ | GOP | = | B || P || B || P || B || P || B || P | ... | I | +-------+ +---++---++---++---++---++---++---++---+ +---+
-
-
ãã¯ãã£ã¬ã€ã€
-
1ã€ã®ãã¯ãã£(B or P or I)ã 16 line ã§ã¹ã©ã€ã¹ãããã®ã 1 line = 1px ãšèããŠãè¯ã
+-------------------------+ | slice#1 | 16 line +-------------------------+ | slice#2 | +-------------------------+ | : | +-------------------------+ | slice#n | +-------------------------+
-
-
ã¹ã©ã€ã¹ã¬ã€ã€
-
1ã€ã®ã¹ã©ã€ã¹ã 16 ç»çŽ ã§ããã«ã¹ã©ã€ã¹ãããã®ã1ç»çŽ = 1px ãšèããŠãè¯ã
+-------------------------+ +----+----+----+----+----+-----+----+ | slice#n | = | MB | MB | MB | MB | MB | ... | MB | +-------------------------+ +----+----+----+----+----+-----+----+
-
-
ãã¯ããããã¯ã¬ã€ã€
-
1ã€ã®ãã¯ããããã¯ã¯4ã€ã®YãšCb,Crã§æ§æãããŠãã
+-----+-----+ +----+ +----+ +----+ | Y | Y | + | Cb | + | Cr | 8 | MB | = |-----+-----+ +----+ +----+ +----+ | Y | Y | 8 +-----+-----+ 16
-
-
ãããã¯ã¬ã€ã€
- ç¥
- GOP (Group of Picture), 15æçšåºŠã®ç»å矀
- SH (Sequence Header), ç»åã®éå§ç¹
- MB (Macro Block), 4ã€ã® Y(èŒåºŠ), 1ã€ã® Cb, 1ã€ã® Cr ã§æ§æãããç»çŽ æ å ±
CRC32/MPEG2
MPEG2 ã® CRC32 ã¯ãCRC32/MPEG2 ãšåŒã°ããéåžžã® CRC32 ãšã¯èšç®åŒãšåæå€ãç°ãªãã
-
http://reveng.sourceforge.net/crc-catalogue/all.htm#crc.cat.crc-32-mpeg-2
-
ffmpeg ã®å®è£
crc = av_bswap32(av_crc(av_crc_get_table(AV_CRC_32_IEEE), -1, buf, len - 4));
- https://github.com/FFmpeg/FFmpeg/blob/7206b94fb893c63b187bcdfe26422b4e026a3ea0/libavutil/crc.h#L41
- CRC32 ããŒãã« https://github.com/FFmpeg/FFmpeg/blob/7206b94fb893c63b187bcdfe26422b4e026a3ea0/libavutil/crc.c#L206
- https://github.com/FFmpeg/FFmpeg/blob/7206b94fb893c63b187bcdfe26422b4e026a3ea0/libavutil/crc.c#L297
-
åèãªã³ã¯
AAC
- MPEG-2 AAC (ISO/IEC 13818-7)
- æ¥æ¬ã®å°ããžã§æ¡çšãããŠããAACã¯ãã¡ãã®æ¹åŒã§ã
- MPEG-4 AAC (ISO/IEC 14496-3)(JIS X 4332-3)
- MPEG-2 AAC ã®åŸç¶èŠæ Œã§ããäžèº«ã¯ã»ãŒåãç©ãªã®ã§ããã©ã€ã»ã³ã¹æéã«å·®ããããšã®äºã§ã
- ADTS
- MPEG-2 AAC ã MPEG-4 AAC ã§å©çšãããã³ã³ãããã©ãŒãããã®1ã€ã§ã
| ADTS ããã + AAC Data |
ãã©ãŒãããã§æ§æãããŸã- ADTD ããã㯠7 byte ã® CRC ç¡ãçãšã 9 byte ã® CRC æãçããããŸã
- in MPEG-TS System
- MPEG-2 TS ã·ã¹ãã (PES packet)ã«AACãå«ããå Žåã¯ãAACããŒã¿ã«ã¯ADTSããããä»äžããå¿ èŠããããŸã
- AAC ããŒã¿ã« ADTS ãä»äžãããããã PES Packet ã«å€æããããã« Mux ã㊠TS ãã±ããã«å€æããŸã
| AAAAAAAA | AAAABCCD | EEFFFFGH | HHIJKLMM | MMMMMMMM | MMMOOOOO | OOOOOOPP |
CRCç¡ã| QQQQQQQQ | QQQQQQQQ |
CRCæã +2byte- A (12 bit) åæã¯ãŒã, åžžã« 0xfff
- B ( 1 bit) MPEGããŒãžã§ã³, 0 = MPEG-4, 1 = MPEG-2
- C ( 2 bit) åžžã«
00
- D ( 1 bit) CRCã®æç¡, 0 = CRCæã, 1 = CRCç¡ã
- E ( 2 bit) Profile value (MPEG-2 Audio Object type - 1)
00
= Main,01
= LC,10
= SSR- é垞㯠LC ãå©çšãããŸã
- F ( 4 bit) MPEG-4 AAC ãµã³ããªã³ã°åšæ³¢æ°
- G ( 1 bit) ãã©ã€ããŒãã¹ããªãŒã (0=ãšã³ã³ãŒãã£ã³ã°ã1=ãã³ãŒãã£ã³ã°)
- H ( 3 bit) MPEG-4 AAC ãã£ã³ãã«æ§æ (åŸè¿°ã0ã®æã¯ããã£ã³ãã«æ§æã¯åž¯åå ã®PCEã§éä¿¡ããã)
- I ( 1 bit) ãªãªãžãã« (0=ãšã³ã³ãŒãã£ã³ã°ã1=ãã³ãŒãã£ã³ã°)
- J ( 1 bit) ããŒã (0=ãšã³ã³ãŒãã£ã³ã°ã1=ãã³ãŒãã£ã³ã°)
- K ( 1 bit) èäœæš©ã§ä¿è·ãããã¹ããªãŒã (0=ãšã³ã³ãŒãã£ã³ã°ã1=ãã³ãŒãã£ã³ã°)
- L ( 1 bit) èäœæš©ã®éå§ (0=ãšã³ã³ãŒãã£ã³ã°ã1=ãã³ãŒãã£ã³ã°)
- M (13 bit) ãã¬ãŒã å šäœã®é·ããADTSããããŒã®é·ã(7byteãŸãã¯9byte)ãå«ã¿ãŸã
- O (11 bit) ãããã¡ãŒå æé
- P ( 2 bit) ADTSãã¬ãŒã å ã®AACãã¬ãŒã (RDB)ã®æ°ãADTSãã¬ãŒã - 1ã®å€ã«ãªããŸã
- Q (16 bit) CRC (ãããã¯ã·ã§ã³ã®æç¡=0ã®å Žåã®ã¿)
- Link: http://wiki.multimedia.cx/index.php?title=ADTS
- MPEG-4 AAC ãµã³ããªã³ã°åšæ³¢æ° (F)
0000
- 96000 Hz0001
- 88200 Hz0010
- 64000 Hz0011
- 48000 Hz0100
- 44100 Hz0101
- 32000 Hz0110
- 24000 Hz0111
- 22050 Hz1000
- 16000 Hz1001
- 12000 Hz1010
- 11025 Hz1011
- 8000 Hz1100
- 7350 Hz1101
- Reserved1110
- Reserved1111
- ãã以å€(åšæ³¢æ°ãæç€ºçã«æžãããŠããå Žåã¯ãã®å€ã«ãªããŸã)
- MPEG-4 AAC ãã£ã³ãã«æ§æ (H)
000
垯åå ã®PCEã§éä¿¡ããã001
1 ch - (Front: center)010
2 ch - (Front: left, right)011
3 ch - (Front: left, center, right)100
4 ch - (Front: left, center, right)(Rear: center)101
5 ch - (Front: left, center, right)(Rear: left, right)110
5.1 ch - (Front: left, center, right)(Rear: left, right, subwoofer)111
7.1 ch - (Front: left, center, right)(Side: left, right)(Rear: left, right, subwoofer)
- ATDS AAC
- ATDS ããããä»äžãã AAC ããŒã¿ã®äºã§ã
- RAW AAC
- ADTS ãããã®ä»ããŠããªã çã®AAC ããŒã¿ã®äºã§ã
- MPEG-2 AAC ã MPEG-4 AAC ã®çããŒã¿éšåã«çžåœããŸã
- æ¡åŒµåã¯
.aac
ã§ã - äžè¬çãªåç»ãã¬ã€ã€ãŒã§ã¯åçã§ããªããããéåžžã¯
mp4
ãm4a
ãã¡ã€ã«åœ¢åŒã«å€æããŸã
- HE-AAC (MPEG-4 AAC Version 3)
- SBR ã远å ããäœãããã¬ãŒãã«ãããé³è³ªãæ¹åãã AAC ã®äžäœèŠæ Œã§ã
- HE-AAC v1 ãš HE-AAC v2 ããããŸã
- åŸæ¥ã® MPEG-4 AAC ã¯å¯Ÿæ¯äž AAC-LC(Low Complexity) ãšåŒã°ããŸã
- ãããååã»ã©ã®ãããã¬ãŒãã§ AAC-LC ãšåçã®é³è³ªãå®çŸããŠããŸã
- AAC-LC ãã察å¿ããŠããªãåŸæ¥ã®ãã¬ã€ã€ãŒã¯ SBR éšåãç¡èŠããŠåçã§ãããããåŸæ¹äºææ§ããããŸã
- SBR ã远å ããäœãããã¬ãŒãã«ãããé³è³ªãæ¹åãã AAC ã®äžäœèŠæ Œã§ã
MPEG-2
- MPEG-2 CRC32/MPEG2
- MPEG-2 ã® CRC32 ã¯ãCRC32/MPEG2 ãšåŒã°ããéåžžã® CRC32 ãšã¯èšç®åŒãšåæå€ãç°ãªããŸãã
-
http://reveng.sourceforge.net/crc-catalogue/all.htm#crc.cat.crc-32-mpeg-2
-
ffmpeg ã®å®è£
crc = av_bswap32(av_crc(av_crc_get_table(AV_CRC_32_IEEE), -1, buf, len - 4));
- https://github.com/FFmpeg/FFmpeg/blob/7206b94fb893c63b187bcdfe26422b4e026a3ea0/libavutil/crc.h#L41
- CRC32 ããŒãã« https://github.com/FFmpeg/FFmpeg/blob/7206b94fb893c63b187bcdfe26422b4e026a3ea0/libavutil/crc.c#L206
- https://github.com/FFmpeg/FFmpeg/blob/7206b94fb893c63b187bcdfe26422b4e026a3ea0/libavutil/crc.c#L297
-
åèãªã³ã¯
-
- MPEG-2 ã® CRC32 ã¯ãCRC32/MPEG2 ãšåŒã°ããéåžžã® CRC32 ãšã¯èšç®åŒãšåæå€ãç°ãªããŸãã
- MPEG-2 Channel
- MPEG-2 ã§ã¯çªçµ(Program) ã®äºã Channel ãšåŒã³ãŸã
- MPEG-2 System, System (å€éåæ¹åŒ)
- ãã«ãã¡ãã£ã¢ããŒã¿ããã¡ã€ã«ãèšé²ã¡ãã£ã¢ã«ä¿åãããããããã¯ãŒã¯äžã§äŒéããã«ã¯ã æ åãšé³å£°ãå¥ã ã«ç¬Šå·åãã笊å·åããŒã¿ã®å€éåãšåæã®ããã®ä»çµã¿ãå¿ èŠãšãªããŸãã ãã®å€éåæ¹åŒ(Multiplexing)ã System ãšåŒã³ãŸã
- MPEG-2 ã®å€éåæ¹åŒã¯ MPEG-2 System, MPEG-4 ãªã MPEG-4 System ãšåŒã°ããŸã
- MPEG-4 ã«ãããŠã¯ãé³å£°ããŒã¿ãšåç»ããŒã¿ã¯ 1ã€ã® Object(Object Descriptor)ãšããŠæ±ããã ããããå€éåã»åæããã®ã MPEG-4 System ã®åœ¹å²ã«ãªããŸã
- MPEG-2 PS
- MPEG-2 PS ã¯ããŒã¿ãèªç±ã«é«éã«èªã¿èŸŒã¿ãã§ããã¡ãã£ã¢(DVD, HDD)çšã®èŠæ Œã§ãã
- äžæ¹ MPEG-2 TS ã¯ãå°äžæ³¢ãéä¿¡çµè·¯ãªã©ãšã©ãŒã®æ€åºãå¿ èŠãªç°å¢ãæ³å®ããŠããŸãã
- MPEG-2 TS
- MPEG 2-TS ã«ã¯æ å/é³å£°ä»¥å€ã®äœèšãªæ å ±ãå«ãŸãããããä¿åã«ã¯åããŸããã
- MPEG 2-TS ã¯æ§ã ãªãã©ãŒãããã®æ åãå å ã§ãã仿§ã§ãã
- MPEG2 以å€ã«ã H.264ãAACããã€ããŒãã«æ ŒçŽããããšãã§ããŸãã
- MPEG-2 TS 㯠13818-1:2000 (ISO/IEC) ãŸã㯠H.222.0 (ITU-T Rec) ãšããŠèŠæ ŒåãããŠããŸã
- H.264 ãæ±ãããã«æ¡åŒµããã MPEG-2 TS 㯠13818-1:2000 (E) ãšããŠèŠæ ŒåãããŠããŸã
- MPEG-2 TS Packet
- 188 bytes ( 4 bytes header + 184 bytes payload ) ã®ãã±ããã§ã(å°ããžã§ã¯ 192 bytes ã 204 bytes ã«æ¡åŒµãããŠãããããããã§ã)
- å°ããžã«ããã仿§ã¯ http://www.arib.or.jp/english/html/overview/doc/2-STD-B31v1_7.pdf (P107)ãåç §ããŠãã ãã
- MPEG-2 PES Packet
- ãã±ããåããã ES ã§ãã TS ãã±ããããäœããŸããPES Packet ãæŽã«å å·¥ãããš ByteStream ãåŸãããŸãã
- Packetized elementary stream
MPEG2-TS packet image
TH: Transport stream Header
PES: Packetized Elementary Stream (MPEG-2 term)
+----+---------------+----+---------------+----
| TH | PES | TH | PES | ...
+----+---------------+----+---------------+----
~~~~~~~~~~~~~~~~~~~~~~ -> MPEG-2 TS Packet (188 byte)
-
payload_unit_start_indicator
- PES ãã±ããã®ãã€ããŒãéšåã«äœèšãª1byteãå«ãŸããŠãããã©ããã瀺ããã©ã°ã§ãã
The payload_unit_start_indicator is a 1-bit flag which has normative meaning for Transport Stream packets that carry PES packets (refer to 2.4.3.6) or PSI data (refer to 2.4.4).
When the payload of the Transport Stream packet contains PES packet data, the payload_unit_start_indicator has the following significance: a '1' indicates that the payload of this Transport Stream packet will commence with the first byte of a PES packet and a '0' indicates no PES packet shall start in this Transport Stream packet.
Payload ã PES ãã±ããããŒã¿ãå«ãã§ããå Žåã¯ã payload_unit_start_indicator ã¯ä»¥äžã®ããã«è§£éãããŸãã - 1ãªãããã€ããŒãã« PES ãã±ããã®å é ãå«ãŸããŠããŸãã - 0ãªãããã€ããŒãã« PES ãã±ããã®å é ã¯å«ãŸããŠããŸããã
If the payload_unit_start_indicator is set to '1', then one and only one PES packet starts in this Transport Stream packet. This also applies to private streams of stream_type 6 (refer to Table 2-34).
When the payload of the Transport Stream packet contains PSI data, the payload_unit_start_indicator has the following significance:
Payload ã PSI ããŒã¿ãå«ãã§ããå Žåã¯ã payload_unit_start_indicator ã¯ä»¥äžã®ããã«è§£éãããŸãã - PSIã»ã¯ã·ã§ã³ã®æåã®1ãã€ããå«ãã§ããå Žåã¯ã1ã«ãªããŸãã ãã®å Žåã¯ããã±ããã®ããããšãã€ããŒãã®éã« pointer_field (1byte)ãæ¿å ¥ãããŸã ``` | header(4byte) | pointer_field(1byte) | payload (183byte) | ``` - PSIã»ã¯ã·ã§ã³ã®æåã®1ãã€ããå«ãã§ããªãå Žåã¯ã0ã«ãªããŸãã ãã®å Žåã¯ããã±ããã®ããããšãã€ããŒãã®éã« pointer_field (1byte)ãæ¿å ¥ãããŸãã ``` | header(4byte) | payload (184byte) | ```
if the Transport Stream packet carries the first byte of a PSI section, the payload_unit_start_indicator value shall be '1', indicating that the first byte of the payload of this Transport Stream packet carries the pointer_field. If the Transport Stream packet does not carry the first byte of a PSI section, the payload_unit_start_indicator value shall be '0', indicating that there is no pointer_field in the payload. Refer to 2.4.4.1 and 2.4.4.2. This also applies to private streams of stream_type 5 (refer to Table 2-34).
payload_unit_start_indicator = 1
ã®ãã±ããæ§é
+-----------+------------------+--------------+
| HEADER(4) | pointer_field(1) | PAYLOAD(183) |
+-----------+------------------+--------------+
payload_unit_start_indicator = 0
ã®ãã±ããæ§é
+-----------+--------------+
| HEADER(4) | PAYLOAD(184) |
+-----------+--------------+
MPEG-4 part 10 (MPEG-4 AVC/H264)
MPEG-4 part 10 ã®èŠæ Œæžã¯ãITU-T ããç¡æã§ããŠã³ããŒãã§ããŸã( ISO/IEC ã§ã¯åããã®ãææã§è²©å£²ããŠããŸã )ã
MPEG-4
-
GOP (Group of Picture), 15æçšåºŠã®ç»å矀
-
SH (Sequence Header), ç»åã®éå§ç¹
-
MB (Macro Block), 4ã€ã® Y(èŒåºŠ), 1ã€ã® Cb, 1ã€ã® Cr ã§æ§æãããç»çŽ æ å ±
-
Byte stream format (ByteStream format)
- MPEG-4 part 10 AVC/H264 ã®èŠæ Œæžã® Annex B ã§å®çŸ©ãããŠãããã€ãããŒã¿ã®ãã©ãŒãããã§ãé£ç¶ãã StartCode + EBSP ã§æ§æããããã€ãããŒã¿ã§ã
- MPEG-2 TS ã«æèŒãããH.264ããŒã¿ãå
ã«MP4ãã¡ã€ã«ãçæããã«ã¯ã以äžã®æé ã§ããŒã¿å€æãè¡ãå¿
èŠããããŸã
- fetch M3U8 file
- parse M3U8 file
- fetch *.ts file
- parse TSPacket
- parse PESPacket
- parse ByteStream
- parse NAL file format
- parse AUD, SPS, PPS, SEI, IDR, ...
- build AccessUnit
- Mux
- build mp4 file
-
VCL (Video Coding Layer)
- ãããªç¬Šå·åã¬ã€ã€, åç»ç¬Šå·åãæ±ããåæ®µã®ã·ã¹ãã ã®äºãVCLãšåŒã³ãŸã
-
VCL-NALUnit
- å§çž®ãããã¹ã©ã€ã¹ããŒã¿(æ åããŒã¿)ãã®ãã®ãæããŸã
-
Non-VCL-NALUnit
- æ åããŒã¿ã§ã¯ãªãã¡ã¿ããŒã¿(è£å©çãªæ å ±)ã§ããAUD, SPS, PPS, SEI ãªã©ã Non-VCL-NALUnit ã«è©²åœããŸã
-
NAL (Network Abstraction Layer)
- 笊å·åããæ å ±ãäŒé/èç©ãè¡ãVCLã®æ¬¡æ®µã®ã·ã¹ãã ã§ã
- 1å以äžã® NAL Unit ãé£ç¶ããŠãã Stream ã§ãã
| NALUnit | NALUnit | ...
-
NALUnit (Network Abstraction Layer Unit)
- NALUnit = NALUnitHeader + EBSP
- AVC ã®äžçã«ãããããŒã¿ã®åºæ¬çãªåäœã NALUnit ã§ã
- NALUnit ã¯ãã€ãåäœã§ã¢ã©ã€ã¡ã³ããããŠããŸã
- VideoãAudioæ
å ±ãä¿æããŠããNAL Unit㯠VCL NALãŠããããšåŒã³ãã¡ã¿ããŒã¿ããã£ãNAL Unitã¯éVCAL NALãŠããããšãåŒã°ããŸã
- VCL NALãŠããããã©ããã¯ãnal_unit_type ã§å€å¥ã§ããŸã
- NALUnit ã«ã¯2ã€ã® Stream(ãã€ããªããŒã¿ãã©ãŒããã) ããããŸã
- ByteStream (NAL Uints in Byte-stream Format)(
StartCode + NALUnitHeader + EBSP
)- ãã®ãã©ãŒãããã§ã¯ NALUnit ã®é·ãã¯æç¢ºã«æ ŒçŽãããŠããŸãããå é ããStartCode(00 00 01)ãæ¢ãããšã§NALUnitã®åºåããšãã€ããµã€ãºãç¥ãããšãã§ããŸã
- StartCode ã¯
00 00 01
ã§ããå é ã«è€æ°ã®äœèšãª00
ãå«ãŸããŠããŠãOKã§ã00 00 01
ã®ä»ã«00 00 00 01
ã00 00 00 00 01
ãªã©ãåæ³ã§ã- ä»ã® Stream ã«å€æããå Žåã¯ãEP3B(
00 00 03 0x
) ã00 00 0x
ã«ãã³ãŒãããå¿ èŠããããŸã
- MPEG-2 TS ã«æ ŒçŽãããŠãããã€ãããŒã¿ã¯ãã®ãã©ãŒãããã§ã
- ffmpeg -o ã§æ¡åŒµåã
.264
ã«ããå Žåã«çæãããçããŒã¿ããã®ãã©ãŒãããã§ã
- NAL file format (
NALUnitSize + NALUnitHeader + EBSP
)- mp4 ã®
mdat
box ã«æ ŒçŽãããŠãããã€ãããŒã¿ã¯ãã¡ãã®ãã©ãŒãããã§ã - NALUnitSize ã«ã¯ NALUnit ã®ãã€ãæ°ãããã¯ãšã³ãã£ã¢ã³ã§æ ŒçŽãããŠããŸã
- mp4 ã®
- ByteStream (NAL Uints in Byte-stream Format)(
- NALUnit ã¯ãã¯ãã£æ å ±ãå«ã VCL-NALUnit ãšããã¯ãã£æ å ±ãå«ãŸãªã Non-VCL-NALUnit ã®2ã€ã«å€§ããåé¡ã§ããŸã
- MPEG-4 part 10 AVC ã®èŠæ Œæžã§ã¯ãNALUnitãã -> NALUnitHeader ãš RBSP ãåãåºãæ¬äŒŒã³ãŒãã
nal_unit
颿°ãšããŠèª¬æãããŠããŸãemulation_prevention_three_byte
ã nal_unit 颿°ã®äžã§ãã³ãŒãããŠããŸã
-
StartCode
- StartCode =
00
(0å以äž) +00 00 01
00 00 01
ããæ§æããããã€ãåã§ããå é ã«äœèšãª00
ãè€æ°ååšããå ŽåããããŸã
- StartCode =
-
NALUnitSize, NumBytesInNALunit
- NALUnit ã®ãµã€ãºãç€ºãæ å ±ã§ã
- NALUnit ã®ãµã€ãºã 4 byte ãªã
| 00 00 00 04 | NALUnit |
ã«ãªããŸã - éåžž 4 byte ã§ãã 1 byte ãŸã㯠2 byte ã®ã±ãŒã¹ãããããŸã
- AVCDecoderConfigurationRecord.lengthSizeMinusOne + 1 ã2 ãªã NALUnitSize ã®ãµã€ãºã¯ 2 ã«ãªããŸã
-
NALUnitHeader, NALHeader
-
NALUnit ã®å é 1byteã§ããNALUnit ã®å 容ããã³ãŒãããããã®æ å ±ãå«ãŸããŠããŸã
-
NALUnit ã®å 容ãç¥ãã«ã¯ãå é 1byte (NALUnitHeader) ãèªã¿èŸŒã¿,
0
+nal_ref_idc(2)
+nal_unit_type(5)
ã«åè§£ããŸã -
nal_unit_type
- nal_unit_type ã 5 ãªããã® NALUnit 㯠IDR ãã¯ãã£ã§ããVCL-NALUnit ã§ã
- nal_unit_type ã 9 ãªããã® NALUnit 㯠AUD ã§ããAccessUnit ã®åãç®ãæå³ããŸããNon-VCL-NALUnit ã§ã
- nal_unit_type ã 7 ãªããã® NALUnit 㯠SPS ã§ããAccessUnit å šäœã«å¯Ÿããã¡ã¿æ å ±ãæ ŒçŽãããŠããŸããNon-VCL-NALUnit ã§ã
- nal_unit_type ã 8 ãªããã® NALUnit 㯠PPS ã§ãããã¯ãã£ã«å¯Ÿããã¡ã¿æ å ±ãæ ŒçŽãããŠããŸããNon-VCL-NALUnit ã§ã
-
nal_ref_idc
nal_ref_idc
ã00
ãªããã®NALUnitããã¯ãã£äºæž¬ã®ããã«åç §ãããªãäºãæå³ããŠããŸã(ã€ãŸãäžåºŠèªãã ãéããã«å»æ£å¯èœãªNALUnitãšããäºã«ãªããŸã)ã00
以å€ãªããã® AccessUnit ã«ã¯ SPSãPPSãã¹ã©ã€ã¹ããŒã¿ãå«ãŸããŠãããä»ã®NALUnitããã¯ãã£äºæž¬ããåç §ãããããŒã¿ãå«ãã§ãããšããæå³ã«ãªããŸã(ã€ãŸãèªã¿èŸŒãã åŸã«ããããŸå»æ£ã§ããŸãã)
|ABBCCCCC| bit index field |~ | -> 1 0 zero `0` | ~~ | -> 2 1 nal_ref_idc (åç §ãã¯ãã£ãšãªãã¹ã©ã€ã¹ãå«ãŸããŠãããã©ãã) | ~~~~~| -> 5 2 nal_unit_type (NAL Unit ã® type ã瀺ãèå¥å)
nal_unit_type Subject 0 æªå®çŸ© 1 IDR 以å€ã®ãã¯ãã£ã®äžéš(ã¹ã©ã€ã¹) 2 ããŒã¿ããŒãã£ã·ã§ãã³ã°Aã§ç¬Šå·åãããã¹ã©ã€ã¹ 3 ããŒã¿ããŒãã£ã·ã§ãã³ã°Bã§ç¬Šå·åãããã¹ã©ã€ã¹ 4 ããŒã¿ããŒãã£ã·ã§ãã³ã°Cã§ç¬Šå·åãããã¹ã©ã€ã¹ 5 IDR ãã¯ã㣠6 SEI 7 SPS 8 PPS 9 AU ããªãã¿ 10 End of Sequence 11 End of Stream 12 Filler Data (ãã©ãŒããããæŽããããã«æ¿å ¥ãããè©°ãç©ããããŒããŒã¿) 13 SPSæ¡åŒµ, FRExt ã§äœ¿çš 14 .. 18 Reserved 19 è£å©ã¹ã©ã€ã¹, FRExt ã§äœ¿çš 20 .. 23 Reserved 24 .. 31 æªå®çŸ©
-
-
AccessUnit
- AccessUnit 1æã®ãã¯ãã£(ãã¬ãŒã )ãçæããããã«å¿ èŠãª NALUnit ã®éãŸãã®äºã§ãã
- AccessUnit 㯠AUD(Access Unit Delimiter) ãæ€çŽ¢ããããšã§èŠã€ããäºãã§ããŸãã
+-----+-----+-----+-----+---------++-----+-----------++-----+-----------+ | AUD | SPS | PPS | SEI | IDR ... || AUD | ... || AUD | ... | +-----+-----+-----+-----+---------++-----+-----------++-----+-----------+ <---------- Access Unit ----------><-- Access Unit --><-- Access Unit -->
-
EBSP (Encapsulate Byte Sequence Payload), EP3B (Emulation Prevention Three byte),
emulation_prevention_three_byte
-
EP3B (00 00 03 0x) ãå«ã(ãããããªã)ãã€ãããŒã¿ã§ãã
-
StartCode ã®
00 00 01
ãšé¡äŒŒããããããã¿ãŒã³ã ByteStream å ã«ååšãããšé©åã«ããŒã¹ãã§ããªããªã£ãŠããŸããŸãã -
ãã®ãããªç¶æ ãé¿ãããããByteStream(EBSP) ã«ãããŠã¯ä»¥äžã®ç¹å®ã®ãã¿ãŒã³ã®ãã€ãåããå¥ã®ãã€ãåã«çœ®æããç¶æ ã§æ ŒçŽãããŠããŸãã
-
EBSP ã RBSP ã«å€æããã«ã¯
00 00 03 0x
ã00 00 0x
ã«ãã³ãŒãããå¿ èŠããããŸããx
ã«ã¯ 0ã3 ã®å€ãå ¥ããŸãEBSP RBSP 00 00 03 00
00 00 00
00 00 03 01
00 00 01
00 00 03 02
00 00 02
00 00 03 03
00 00 03
-
-
RBSP (Raw Byte Sequence Payload), Syntax Element
- NALUnitHeader + RBSP ãšããæèã§èª¬æãããŠããå Žåã¯ãNALUnit ã® 2byteç®ä»¥éã®ããŒã¿ã§ã
- EP3B ãå«ãŸãªããã€ãããŒã¿ã§ã
- RBSP ã®æ«å°Ÿã¯ãã€ãã¢ã©ã€ã¡ã³ããè¡ãããŸãã1byte ã«æºããªãéšåã«ã¯
1
ãåºåãããæ¬¡ã«é£ç¶ãã0
ã Byte å¢çãŸã§åã蟌ãŸããŸã- RBSPã®ããŒã¿ã3bitäœãå Žåã¯ã
xxx
+1
+0000
ã RBSPã®æ«å°Ÿã«åã蟌ãŸãxxx10000
ã«ãªããŸã - ãã³ãŒãã¯ãæåŸã®ByteãLSBããMSBã®æ¹åã«èŠãŠãããŸã(å³ããå·Šã«èŠãŠãããŸã)ã
1
ãçŸããããããŸã§ã padding ããŒã¿ã§ã
- RBSPã®ããŒã¿ã3bitäœãå Žåã¯ã
-
RBSP_trailng_bits
- RBSP ã®æ«å°Ÿã«é 眮ããè©°ãç©ã§ã
- å
é ã 1 ã§ããã以é㯠0 ã®ãããåã§ã
- 7bit ã®ééãããå Žåã¯ã0b1000000 ã§åããŸã
- 4bit ã®ééãããå Žåã¯ã0b1000 ã§åããŸã
- 2bit ã®ééãããå Žåã¯ã0b10 ã§åããŸã
- 1bit ã®ééãããå Žåã¯ã0b1 ã§åããŸã
-
SODB (string of data bits)
- NALUnit ã«å«ãŸãã raw ãã€ããªããŒã¿ã§ãã
- ãã€ããªããŒã¿ã Bitåäœã§èãããã®ã SODBã§ãByteåäœã§èãããã®ã RBSP ã§ãã
-
Stream, MPEG Stream
- MPEG ã«ããã Stream ãšã¯ ãã€ããªããŒã¿ãã©ãŒãããã®äºã§ãã MPEG ã§ã¯æ§ã ãªãã©ãŒãããã®ãã€ããªããŒã¿ãæ±ããããã©ãŒããããèå¥ããããã®ååãã€ããŠããŸã
- ES (Elementary Stream)
- çãªãŒãã£ãªããŒã¿ããããªããŒã¿ã¯ ES ãšåŒã°ããŸã
- ES ã Mux ããŠåŸãããããŒã¿ã¯ System Stream (MPEG1) ã Program Stream (MPEG-2 PS)ãšåŒã°ããŸã
- PES (Packetized Elementary Stream)
- ES ããããã¯ãŒã¯ã«æµããããããã«åå²ããã±ããåãããã®ã PES ãšåŒã³ãŸã
- PES ã«ã¯åçæå»ã«é¢ããæ
å ±(PCR, OPCR)ãå«ãäºãã§ããŸã
- PCR, OPCR 㯠27MHz(27 * 1000 * 1000) ã§é§åããã¯ããã¯ã§ããçŸå®äžçã®1ç§ã¯ PCR ã§ã¯ 27000000 ã«ãªããŸã
- ãã³ãŒãã¯æå»æ å ±ãå«ãŸããŠããå Žåã«ããããã䜿ã£ãŠé³å£°ãšåç»ãåæãããäºãå¯èœã«ãªããŸã
- çšéã«å¿ã㊠TS ãš PS ããããŸã
- TS (Transport Stream)
- ãããã¯ãŒã¯ã«æµããããããã«ãã±ããåãããããŒã¿ã¯ Transport Stream (MPEG-2 TS)ãšåŒã°ããŸã
- PS (Program Stream)
- HDD,ããŒã,åç€ã¡ãã£ã¢ãªã©ã«ä¿åãããã圢ã§ãã±ããåãããããŒã¿ã¯ Program Stream (MPEG-2 PS)ãšåŒã°ããŸã
- PS ãš PS 㯠lossless (ç¡å£å)ã§çžäºã«å€æããããšãå¯èœã§ãã
- NALUnit in Byte Stream Format (H264 Byte stream format)
- StartCode(00 00 00 01 ã 00 00 01) ãåºåããšãã NAL Unit ã®ãã€ããªã¹ããªãŒã ã§ã
| 00 00 00 01 | NALUnit | 00 00 01 | NALUnt | ...
- NAL, NAL Stream
- 1å以äžã® NAL Unit ãé£ç¶ããŠãã Stream ã§ãã
| NALUnitSize | NALUnit | NALUnitSize | NALUnit | ...
-
marker_bit
ãããåãã¹ã¿ãŒãã³ãŒã(0x000001ç)ãšäžèŽããŠããŸãããšãé¿ããããã« ã¬ãŒãã³ãŒããšããŠmarker_bit
ãæã æ¿å ¥ãããŠããŸããmarker_bit
èªäœã¯æ å ±ãæã£ãŠããªãããèªã¿é£ã°ããŸãã -
AU (Access Unit)
- 1ã€ã®ãã¯ãã£ãæ§æããããã«å¿ èŠãªæ å ±ãåããNALUnitã®éåã§ã
- äžè¬ç㪠AU ã¯é£ç¶ããNALUnit(AUD, SPS, PPS, SEI, IDR...) ããæ§æãããŸã
- AU ã« SPS ã PPS ãå«ãŸããªãå Žåã¯ã1ã€åã® SPS ã PPS ãã³ããŒããŠäœ¿çšããå¿ èŠãããããã§ã TODO: èŠç¢ºèª
-
AUD (Access unit delimiter)(AU ããªãã¿)
- ã¢ã¯ã»ã¹ãŠãããã®å é ã瀺ããŸã
- ã¢ã¯ã»ã¹ãŠãããã«å«ãŸããã¹ã©ã€ã¹ã®çš®é¡ãæ ŒçŽãããŠããŸã
nal_unit_type
㯠9 ã§ã00 00 01 09 F0
ããæ§æããããã€ãåã§ã
-
End of Sequence
- ã·ãŒã±ã³ã¹ã®çµç«¯ã瀺ããŸã
-
End of Stream
- æ å/é³å£°ã¹ããªãŒã å šäœã®çµç«¯ã瀺ããŸã
-
Filler Data
- ããŒã¿éãå°ãªãããŠèŠæ Œã®ä»æ§ãæºãããªãå Žåã«æ¿å ¥ãããç¡æå³ãªããŒã¿ã§ã
-
SPS (Sequence parameter set)
nal_unit_type
㯠7 ã§ã- AU å
šäœã«é¢ããéèŠãªã¡ã¿æ
å ±ãæ ŒçŽãããŠããŸã
seq_parameter_set_id
, ãã®SPSããŒã¿ã瀺ããŠããŒã¯ãªIDã§ããPPS ããã¯ãã®IDã§åç §ãããŸããéèŠãªããŒã¿ã§ãprofile_idc
, H.264 profile ã§ããBaseline profile 㯠0xE0(224) ã§ãlevel_idc
, H.264 Level ã§ã Level 30 㯠0x1E(30) ã§ãnum_ref_frames
, åç §ããŠãããã¬ãŒã æ°ã§ãã TODO: åç §ããŠãã? åç §ãããŠãã?pic_width_in_mbs_minus1
, ãã¯ãã£ã®å¹ -1ã®å€ã§ãã+1 ããããšã§å¹ ãåŸãããŸãpic_height_in_map_units_minus1
, ãã¯ãã£ã®é«ã-1ã®å€ã§ãã+1 ããããšã§é«ããåŸãããŸã
- çç¥ãå¯èœã§ããçç¥ãããŠããå Žåã¯ããããŸã§ã«çŸããæåŸ(latest)ã® SPS ãæµçšããããšã«ãªã£ãŠããŸã(æ®éã¯ãããŸã)
-
PPS (Picture parameter set)
nal_unit_type
㯠8 ã§ã- ãã¯ãã£ã«é¢ããã¡ã¿æ
å ±ãæ ŒçŽãããŠããŸã
pic_parameter_set_id
, ãã®PPSããŒã¿ã瀺ããŠããŒã¯ãªIDã§ããslice ããã¯ãã®IDã§åç §ãããŸããéèŠãªããŒã¿ã§ãseq_parameter_set_id
, ãã®PPSããŒã¿ãšé¢é£ãã SPS ã®IDã§ããentropy_coding_mode_flag
, CAVLC or CABAC ã®æ å ±ã§ããBaseline Profileã§ã¯ CAVLCããMainProfile ã§ã¯ CABAC ã䜿çšãããŸã
- çç¥ãå¯èœã§ããçç¥ãããŠããå Žåã¯ããããŸã§ã«çŸããæåŸ(latest)ã® PPS ãæµçšããããšã«ãªã£ãŠããŸã(æ®éã¯ãããŸã)
-
SEI (Supplemental enhancement information)
nal_unit_type
㯠6 ã§ã- SEI ã¯ç¬Šå·åã«ã¯å¿
èŠããªãã衚瀺ããããã¡ç®¡çäžæçšãªæ
å ±ãæäŸãã NALUnit ã§ã
- Recovery point, ã·ãŒã¯åŸã«è¡šç€ºã埩垰ããããã®æ å ±ãªã©ãæ ŒçŽãããŠããŸã
- SEI NALUnit ã¯ãè€æ°ã®SEI Message ãå«ãã§ããäºããããŸã
- ãŠãŒã¶ããŒã¿ãªã©ã SEI ã«æ ŒçŽããããšãã§ããŸã
- ffmpeg ãçæãããšã³ã³ãŒãæã«äœ¿çšããèšå®æ å ±ã User Date ã«æ ŒçŽãããŠãããããŸã
-
IDR picture (Instantaneous Decoding Refresh picture), Multiple Reference Frames
- å é ã®ç»åãã¢ãã¡ãŒã·ã§ã³ã§èšããšããã® Key Frame ãšãªãç»åã§ããããåäœã§æç«ããç»åãæå³ããŸã
- IDRã¯Iãã¬ãŒã (ãŸã㯠SIãã¬ãŒã )ã®äžçš®ã§ããéåžžã®Iãã¬ãŒãã®åäœã«å ããåŸç¶ã®ãã¬ãŒã ãIDRãã¬ãŒã ãããåæ¹ãåç
§ããäºãçŠæ¢ãã广ããããŸãã
- ãããªã·ãŒã±ã³ã¹ã«ãããæåã®ãã¯ãã£ã¯ãå¿ ãIDRãã¯ãã£ã«ãªããŸã
- ããããããŒãã¬ãŒã ã«ãªããŸãããã¬ã€ã€ãŒãªã©ã®ã·ãŒã¯åäœã¯IDRåäœã§è¡ãããŸã
- H.264 ã®å身ãšãªã MPEG-4 ASP ã§ã¯ãåç §ã§ãããã¬ãŒã ã¯çŽåã®ãã¬ãŒã ã®ã¿ã§ããããH.264 ã§ã¯ãã®å¶éããªããªã è€æ°ã®ãã¬ãŒã ãåç §ãããé¢ãããã¬ãŒã ãåç §ã§ããå¯èœã«ãªããŸããã ãã®ããšããçŽåã®Iãã¬ãŒã ãPãã¬ãŒã ãé£ã³è¶ããæŽã«åã®ãã¬ãŒã ãåç §å¯èœã«ãªããŸãããã ããã¯ãã³ãŒãã«ãšã£ãŠã¯åè¿·æãªä»æ§ã§ããããã®ãããªåé¡ã解決ããããã«ãç¡è»éãªåæ¹ã®åç §ãçŠæ¢ããæ°ããIãã¬ãŒã = IDR ãå¿ èŠã«ãªããŸããã
- IDR picture ã¯ä»ã®ãã¯ãã£ãã¹ã©ã€ã¹ãåç §ããå¿ èŠããªããã POC ã frame çªå·ã¯ 0 ã«ãªã»ãããããŸã
- é垞㯠IDR picture ã 0.5 ã 2ç§ééã§æ¿å ¥ããããšã§ãæå³ããå Žæãžã®ã·ãŒã¯ãå¯èœãªã ãŒããŒãäœæããŸã
-
seq_parameter_set_id
- PPSããåç §ãããSPSã®IDã§ãã0ã31ã®å€ã§ã
-
pic_parameter_set_id
- ã¹ã©ã€ã¹ããåç §ãããPPSã®IDã§ãã0ã31ã®å€ã§ã
-
log2_max_frame_num_minus4
- MaxFrameNum ãç®åºããããã®ãã©ã¡ã¿ã§ãã
- MaxFrameNum ã¯
MaxFrameNum = Math.pow(2, log2_max_frame_num_minus4 + 4)
ã§èšç®ã§ããŸã
-
MMCO5 (
memory_management_control_operation
equal to 5)memory_management_control_operation
ã 5 ã®å Žåã¯frame_num
ã®æ±ããäžéšå€åããŸã
Any coded slice NAL unit or coded slice data partition A NAL unit of the primary coded picture of the current access unit shall be different from any coded slice NAL unit or coded slice data partition A NAL unit of the primary coded picture of the previous access unit in one or more of the following ways:
â frame_num differs in value. The value of frame_num used to test this condition is the value of frame_num that appears in the syntax of the slice header, regardless of whether that value is inferred to have been equal to 0 for subsequent use in the decoding process due to the presence of memory_management_control_operation equal to 5.
NOTE 1 â A consequence of the above statement is that a primary coded picture having frame_num equal to 1 cannot contain a memory_management_control_operation equal to 5 unless some other condition listed below is fulfilled for the next primary coded picture that follows after it (if any).
-
slice_header
- TODO:
slice_header
ã¯2段éã§èªã¿èŸŒãå¿ èŠããããŸã- 1段ç®ã¯ã
- 2段ç®ã¯ã1段ç®ããåŸããã SPSã®IDãšPPSã®IDãåç §ããã³ãŒãåŠçãé²ããŸã
-
slice_id
- ã¹ã©ã€ã¹æ¯ã«èšå®ãããŠããIDã§ãã
nal_unit_type
ã 2 ã4 ã®å Žåã«å¿ èŠã«ãªããŸã - å€ã®ç¯å²ã«ã¯äžå®ã®å¶éããããŸã
if (separate_colour_plane_flag === 0) { ... }
if (separate_colour_plane_flag === 1) { ... }
if (MbaffFrameFlag === 0) { ... }
if (MbaffFrameFlag === 0) { ... }
- ã¹ã©ã€ã¹æ¯ã«èšå®ãããŠããIDã§ãã
-
Baseline profile
- I ãš P ã¹ã©ã€ã¹ããå©çšã§ããŸãã
- NALUnit ã®
nal_unit_type
ã«ã¯ 2ã4ã®å€(Coded slice data partition A/B/C)ã¯ç»å ŽããŸãã - SPS.
frame_mbs_only_flag
ã¯å¿ ã 1 ã«ãªããŸãã-
frame_mbs_only_flag equal to 1, it is specifies that every coded picture of the coded video sequence is a coded frame containing only frame macroblocks.
-
- SPS ã®ä»¥äžã®ãã©ã¡ã¿ã«ã¯ä»¥äžã®å¶éããããŸã
chroma_format_idc
ã¯å©çšããŸããbit_depth_luma_minus8
ã¯å©çšããŸããbit_depth_chroma_minus8
ã¯å©çšããŸããqpprime_y_zero_transform_bypass_flag
ã¯å©çšããŸããseq_scaling_matrix_present_flag
ã¯å©çšããŸãã
- PPS ã®ä»¥äžã®ãã©ã¡ã¿ã«ã¯ä»¥äžã®å¶éããããŸã
weighted_pred_flag
ã¯å©çšããŸããweighted_bipred_idc
ã¯å©çšããŸããentropy_coding_mode_flag
ã¯å©çšããŸããnum_slice_groups_minus1
㯠0 ãã 7 ãŸã§ã®å€ã«ãªããŸãtransform_8x8_mode_flag
ã¯å©çšããŸããpic_scaling_matrix_present_flag
ã¯å©çšããŸããsecond_chroma_qp_index_offset
ã¯å©çšããŸãã
- CAVLC ã®ä»¥äžã®ãã©ã¡ã¿ã«å¶éããããŸã(å 容çç¥)
- Macroblock layer ã®ä»¥äžã®ãã©ã¡ã¿ã«å¶éããããŸã(å 容çç¥)
profile_idc
ã 66 ã«ããconstraint_set0_flag
ã 1 ã«constraint_set1_flag
ã 1 ã«ããŠãã ãã- ã€ãŸãã
profile_idc
ã« 0x42(66) ãã»ãããæ¬¡ã®1byteã« 0xE0(224) ãã»ããããŸã
- ã€ãŸãã
-
Level
- Level ã«å¿ãããããã¬ãŒãã®å¶éããããŸã
- Level 3.0 ã¯ãæå€§ãã¬ãŒã ãµã€ãº(MaxFS)ã 1620, æå€§ãããã¬ãŒã(MaxBR)ã 10000 ã§ã
- Level ã«å¿ãããããã¬ãŒãã®å¶éããããŸã
-
primary_pic_type
-
AccessUnit ã«ã©ããªã¹ã©ã€ã¹ãå«ãŸããŠãããã瀺ãå€ã§ãããã®å€ãèŠãããšã§ãAccessUnit ã®åŠçæ¹éã®ç®å®ã決ããäºãã§ããŸã
-
ãã ã ffmpeg ãçæããããŒã¿ã§ã¯åžžã«
primary_pic_type = 7
ã«ãªã£ãŠããããã®å€ãææšãšããŠå©çšããããšã¯é£ãã(ã§ããªã)ããã§ãprimary_pic_type slice_type values that may be present in the primary coded picture Name of slice_type 0 2, 7 I 1 0, 2, 5, 7 P, I 2 0, 1, 2, 5, 6, 7 P, B, I 3 4, 9 SI 4 3, 4, 8, 9 SP, SI 5 2, 4, 7, 9 I, SI 6 0, 2, 3, 4, 5, 7, 8, 9 P, I, SP, SI 7 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 P, B, I, SP, SI
-
-
slice_type
- AVC ã§ã¯ 1æã®ãã¯ãã£ã«è€æ°ã®sliceãå«ãŸããŠããŸããsliceã¯æ··åšãå¯èœã§ãã
slice_type
ã5以äžãªãããã®ãã¯ãã£ã«å«ãŸããå šãŠã® slice ãåãçš®é¡ã§ããäºãæå³ããŸãã-
slice_type = 7 ã®å Žåã¯ããã®ãã¯ãã£ã«å«ãŸããå šãŠã® slice ã I Picture ã§ã
slice_type Name of slice_type 0 P (P slice) 1 B (B slice) 2 I (I slice) 3 SP (SP slice) 4 SI (SI slice) 5 P (P slice) 6 B (B slice) 7 I (I slice) 8 SP (SP slice) 9 SI (SI slice)
-
-
CAVLC (Context-Adaptive Variable Length Coding)
- ã³ã³ãã¯ã¹ãé©å¿åå¯å€é·ç¬Šå·åæ¹åŒã§ããå§çž®çã¯ããã»ã©é«ããããŸãã
- Baseline profile ã§äœ¿çšãããŸã
-
CABAC (Context-Adaptive Binary Arithmetic Coding), UVLC
- ã³ã³ãã¯ã¹ãé©å¿åïŒå€ç®è¡ç¬Šå·åæ¹åŒãCAVLC ãããæéã¯ããããŸããå§çž®çã¯10ã15%ã»ã©é«ããªããŸã
- Main profile 以äžã§äœ¿çšã§ããŸã
-
Exp-Golomb (Exponential-Golomb coding)
- æŽæ°ã笊å·åããæ¹æ³ã®1ã€ã§ãã
- 0 ã¯
1
ã«ã1 ã¯010
ã«ç¬Šå·åãããŸã
-
MPEGå§çž®ããŒã¿ã®6éå±€æ§æ
- MPEG ã§å§çž®ãããããŒã¿ã¯6ã€ã®ã¬ã€ã€ãŒã§åºåãããŠããŸã
- ã·ãŒã±ã³ã¹ã¬ã€ã€ãŒ, GOP + SH ã 1察ãšãããã±ãããåŠçããã¬ã€ã€ãŒã§ã
- GOPã¬ã€ã€ãŒ, GOP ã®äžã«å«ãŸããè€æ°ã® I/B/P ãã¯ãã£ãåŠçããã¬ã€ã€ãŒã§ã
- ãã¯ãã£ã¬ã€ã€ãŒ, 1æã®ç»åã16ã©ã€ã³çšã§äžããé çªã«åãåã£ãã¹ã©ã€ã¹ãšããåäœã§åŠçããã¬ã€ã€ãŒã§ã
- ã¹ã©ã€ã¹ã¬ã€ã€ãŒ, ã¹ã©ã€ã¹ã暪æ¹åã«16ã©ã€ã³å¹ ã§åãåã£ããã¯ããããã¯ãšããåäœã§åŠçããã¬ã€ã€ãŒã§ã
- ãã¯ããããã¯ã¬ã€ã€ãŒ, ãã¯ããããã¯ã4åå²ãããããã¯ããæŽã«YUVæ¯ã«åŠçããã¬ã€ã€ãŒã§ã
- ãããã¯ã¬ã€ã€ãŒ(DCTåŠçåäœ), ãããã¯ãåŠçããã¬ã€ã€ãŒã§ã
- MPEG ã§å§çž®ãããããŒã¿ã¯6ã€ã®ã¬ã€ã€ãŒã§åºåãããŠããŸã
-
Sequence (ã·ãŒã±ã³ã¹)
- 15æçšåºŠã®é£ç¶ãã Picture ããŸãšãããã®ã Sequence ãšåŒã³ãŸã
- Sequence ã¯
| GOP + SH | GOP + SH ...
ããæ§æãããããŒã¿æ§é ã§ã - GOP 㯠15æçšåºŠã® I/B/P Pictureããæ§æãããŠããŸã
- GOPåäœã§åç»åã®å·®åãæœåºããI,B,Pãã¯ãã£ãäœããå§çž®çã皌ãã®ãMPEGã®åºæ¬æŠç¥ã§ã
- SH ã¯Sequence Header ã®ç¥ã§ããç»åã®éå§ç¹ã¯SHã®åãç®ããã«ãªããŸã
- I, B, P ãã¯ãã£ã¯ãããã«ç»åãæšªæ¹åã«åãåã£ã slice ã§æ§æãããŠããŸã
-
Picture (Frame)
- 1æã®ç»å(ãã¯ãã£,ãã¬ãŒã )ã¯è€æ°ã®ã¹ã©ã€ã¹ããæ§æãããŠããŸã
- I Picture, B Picture, P Picture ãªã©ã®çš®é¡ããããŸã
- MPEG-2/MPEG-4 ã§ã¯ Picture ãåºæ¬ã®åäœã§ãããAVC ã§ã¯ slice ãåºæ¬åäœãšãªããŸã
- MPEG-2/MPEG-4 ã§ã¯ 1 Picture ã 1 Frame ã«çžåœããPicture æ¯ã«ç¬Šå·åã¢ãŒããååšããŸãããã AVC ã§ã¯ slice åäœã§ç¬Šå·åã¢ãŒããæ±ºããããŠããŸãã
- AVC ã§ã¯ 1ã€ã® Picture ã®äžã«ãç°ãªãã¿ã€ãã® slice ãæ··åšãããäºãå¯èœã§ã
- 1ã€ã® Picture ã®äžã«1çš®é¡ã® slice ã ããååšããäºã瀺ãã«ã¯ãslice_type ã®å€ã 5ã9ã«ãããã AUD ã® primary_pic_type ã䜿ã£ãŠæç€ºããŸã
-
Picture å¢ç(å é ã®Picture)
- AVCããŒã¿ãMPEG-2 System(MPEG-2 TS ã MPEG-2 PS)ãçµç±ããå Žåã¯ãå¿ ãAUDãä»äžãããŠããããã å é ã®ãã¯ãã£ãã©ãããããŸãæèããå¿ èŠã¯ãããŸãã
- AUD ãååšããªããã€ãã¹ããªãŒã ãæ±ãå Žåã¯ãå
é ã®Picture ãã©ããã調ã¹ãå¿
èŠããããŸã
- 以äžã®æ¡ä»¶ã«è©²åœããå Žåã¯å é ã®Pictureã§ã
frame_num
ãç°ãªãfield_pic_flag
ãç°ãªãframe_num
ãåãã ã POC (Picture Order Count) ã®å€ãç°ãªãnal_ref_idc
ãç°ãªã- IDRãã¯ãã£ã§
idr_pic_idc
ãç°ãªã
-
slice
-
frame_num
- slice header ã®äžã«ãããŸãããã®sliceãã©ã®frameã«æå±ãããã®æ å ±ã§ã
-
I Picture (Intra Picture)
- ä»ã®ãã¯ãã£ãåç §ããããšãªãç»é¢ãåŸããããã¯ãã£ã§ããæãåºæ¬çãªãã¯ãã£ã«ãªããŸã
-
P Picture (Predictive Picture)
- 1ã€åã®ãã¯ãã£ãåç §ããããšã§åŸããããã¯ãã£ã§ã
-
B Picture (Bi-direction predictiv Picture)
- H.264 ã§ã¯ãéå»ãæªæ¥ã®2æã®ãã¯ãã£ãåç §ããããšã§åŸããããã¯ãã£ã§ã
- Baseline profile ã§ã¯å©çšã§ããŸãã
-
SI slice
- SI slice ã¯ã¹ããªãŒã ã®åãæ¿ããè¡ãããã®ç¹æ®ãªI sliceã§ããffmpeg ããã¯çæãããŸãã
-
SP slice
- SP slice ã¯ã¹ããªãŒã ã®åãæ¿ããè¡ãããã®ç¹æ®ãªP sliceã§ããffmpeg ããã¯çæãããŸãã
-
YUV Colour Formats
yuv4:2:0
ãªã©ãæå®ã§ããŸãã- ffmpeg ã§å©çšã§ãã x264ã³ãŒããã¯ã«ã¯
yuv4:2:0
ããæå®ã§ããŸãã
-
MP4 file format version 2. ".mp4"
- MP4 file format 㯠ISO/IEC 14496-14:2003 ã§èŠå®ãããŠããŸãã ãã®èŠæ Œæžã¯ã2001幎ã«çºè¡ããã ISO/IEC 14496-1:2001 ãäžæžããããã®ã§ã ã³ãã¥ããã£ãã㯠MPEG-4 file format version 2 ãŸã㯠MP4v2 ãšåŒã°ããŠããŸãã
- æ¡åŒµåã ".264" ã®ç©ã¯ MP4 ã³ã³ããã«å ¥ã£ãŠããªãçã® H.264 ãããªã¹ããªãŒã (moovã®äžèº«)ã§ãã
-
ISOBMFF (ISO Base Media File Format)
- MP4Box æ§é ã®ããšã§ã
- ISO/IEC 14496-12 ã§å®çŸ©ãããŠããŸã
-
VLC (Variable Length Coding)
- ãããã³ç¬Šå·ãããŒã¹ãšããå¯å€é·ç¬Šå·åã§ã
-
IOD (Initial Object Descriptor)
- 14496-14 ã§å®çŸ©ãããŠããŸã TODO: 詳现ãèšè¿°
-
OD (Object Descriptors)
- 14496-14 ã® 3.1.3 ã§å®çŸ©ãããŠããŸã
-
PCR (Program clock reference), OPCR (Original Program clock reference)
- MPEG-2 TS ã«ãããæå»æ å ±ã§ã
- MPEG-2 TS ã® PCR ã AVC ã® PTS ãšããŠæã¡ãŸããäºãã§ããã° PTS ã®èšç®ãçç¥ã§ããŸã(TODO: èŠç¢ºèª â åºæ¥ãŸããã§ãã)
- PCR 㯠27MHz(33bit * 300 + 9bit) ã§Clockã管çããŠããŸã
-
PCR Wrap-around
- 33bit éšå㯠90kHz ã®è§£å床ãæã¡ã9bit ã®å€(0ã299)ã®å€ãå ããäºã§ã900kHz * 300 = 27MHz ã®ç²ŸåºŠãåºãããã«å·¥å€«ãããŠããŸã
- ãã®33bitéšåãã©ãŠã³ãã¢ããã0ã«æ»ãããšã PCR Wrap-around ãšåŒã³ãŸãããã®çŸè±¡ã¯ 0x1FFFFFFFF = 8589934591 (26:30:43.717) ã§çºçããŸã
- PCR Wrap-around ãçºçãããšé³å£°ãšæ åã®åæãåããªããªããæ åã«ä¹±ããçºçããŸã
-
DTS (decoding time stamp, åŸ©å·æå»), PTS (presentation time stamp, 衚瀺æå»)
- MPEG-4 ã«ãããI, P, B ãã¯ãã£ã衚瀺ããæå»ãæå®ããã®ã PTS ã§ããã³ãŒãã®é çªãæç€ºããã®ã DTS ã§ãã
- PTS 㯠DTS ãšãã®åšèŸºæ å ±ãªã©ããç®åºããªããã°ãªããªãç¶æ³ããããšã
-
PTS (Presentation Time Stamp)
- ã³ã³ãã³ãããã€åºåããããæå®ããã¿ã€ã ã¹ã¿ã³ãæ å ±(33 bits)ã§ããæ åãšé³å£°ã®åæã®ããã«å¿ èŠã«ãªããŸã
- ãã³ãŒã㯠STC ã PTS ã®ç€ºãæå»ã«ãªããšãã³ãŒãçµæãæ åãé³å£°ãšããŠåºåããŸã
-
STC (System Time Clock)
- ã·ã¹ãã åºæºæå»ã§ããå éšã¯ããã¯ã§ã
- 90 kHz ã§é§åããŸã
- MPEG-1 ã®ã¯ããã¯ã¯ãã¹ãŠ90kHzåäœã§ããSTC, SCR, PTS ã90KHzãåºç€åäœãšããæå»æ å ±ãšãªããŸã
-
SCR (System Clock Reference)
- ã¹ããªãŒã äžã§ã®ã·ã¹ãã ã¯ããã¯æ å ±(33 bits)ã§ãã
-
LipSync
- MPEG-1 ã«ãããŠã¯ãé³å£°ãšæ åã«ãããçºçããå Žåã¯ãé³å£°ãåºæºã«ãããä¿®æ£ããŸã
- ããã¯äººéãé³ã®ããã«å¯ŸããŠããææãªããã§ã
-
Mux (Multiplexing, Multiplexer)
- Audio Elementary Stream ãš Video Elementary Stream ãå€éåããããšã Multiplexing (Mux, ãã¥ãã¯ã¹) ãšåŒã³ãŸãã
-
Demux (Demultiplexing, Demultiplexer)
- Mux ããã¹ããªãŒã ãå ã«æ»ãäºã Demultiplexing (Demux, ããã¥ãã¯ã¹) ãšåŒã³ãŸãã
- æè¡æ å ±
- é¢é£ããŒã«
- MP4Box
- ffmpeg
-
ESDescriptor (Elementary Stream Descriptor)
- 14496-14 ã® 3.1.2 ã§å®çŸ©ãããŠããŸã
- Audio Object Descriptor ãš Video Object Descriptor ã®ãããã¹ããªãŒã 㯠Elementary Stream ã§ã
- ã·ãŒã³ãæ§æããããããã®ãªããžã§ã¯ãæ¯ã«ESDescriptorãååšããŸã
-
BIFS (BInary Format for Scene description)
- VRML (Visual Reality Modeling Language)ãæ¡åŒµããã·ãŒã³èšè¿°èšèªã§ã
- èŠæ Œæžã«ã¯ååšããŸãããå®è£ ããæ°çåã¯ãããŸãã
-
POC (Picture Order Count)
-
MMCO5 (
memory_management_control_operation
equal to 5) -
MP4Boxes
-
MP4 box type äžèЧ http://www.mp4ra.org/atoms.html
-
"ctts" atom, which has to be written when muxing b-frames into MP4
ctts
box 㯠Bãã¬ãŒã ãæžãåºãå Žåã«å¿ èŠã§ããã€ãŸãctts
ãããå Žå㯠B ãã¬ãŒã ãååšããŸã -
"vol", which is placed on every keyframe in AVI, but has to be seperated from the movie data in MP4
vol
ããããã£ã¯ããŒãã¬ãŒã æ¯ã«å¿ èŠã§ããTODO: ??
-
-
ES (Elementary Stream)
- çãªãŒãã£ãªããŒã¿ããããªããŒã¿ã¯ ES ãšåŒã°ããŸã
-
PS (Parameter Set)
- sequence parameter set ãš picture parameter set ãç·ç§°ã㊠Parameter Set ãšåŒã³ãŸã
-
Parameter Set Elementary Stream
- elementary stream containing samples made up of only sequence and picture parameter set NAL units synchronized with the video elementary stream.
ãã®ã¿ã€ãã®ãšã¬ã¡ã³ã¿ãªã¹ããªãŒã ã«å«ãŸããããŒã¿ã¯ãæ åã¹ããªãŒã ãšåæãã SPS ãš PPS ã® NALUnit ã§ããä»ã®çš®é¡ã®ããŒã¿ã¯å«ãŸããŸãã
- elementary stream containing samples made up of only sequence and picture parameter set NAL units synchronized with the video elementary stream.
-
VideoES (VIDEO Elementary Stream)
- elementary stream containing access units made up of NAL units for coded picture data
ãã®ã¿ã€ãã®ãšã¬ã¡ã³ã¿ãªã¹ããªãŒã ã«å«ãŸããããŒã¿ã¯ã笊å·åãããç»åããŒã¿ã§ããä»ã®çš®é¡ã®ããŒã¿ã¯å«ãŸããŸãã
- elementary stream containing access units made up of NAL units for coded picture data
MPEG-4 å§çž®ããŒã¿ã¬ã€ã€ãŒæ§é
Source | â æ åãœãŒã¹
----------|--------------------
VCL | â 笊å·åããŒã¿ (Video Coding Layer)
----------|--------------------
NAL | â 1byteã®ã¹ã¿ãŒãã³ãŒãã®ä»äž, ãã€ãã¹ããªãŒã ãžã®å€æ (Network Abstraction Layer)
----------|--------------------
MPEG-2 TS | â
MPEG-4 å§çž®ããããã¯ãã£ããŒã¿ã®éå±€æ§é
-
ã·ãŒã±ã³ã¹ã¬ã€ã€
-
ã·ãŒã±ã³ã¹ããŒã¿ãå§çž®ãããç»åããŒã¿
+-------+----+ +-------+----+ +------- | GOP | SH | + | GOP | SH | + | .... +-------+----+ +-------+----+ +-------
-
-
GOP ã¬ã€ã€
-
15æçšåºŠã® Bãã¯ãã£, Pãã¯ãã£, Iãã¯ã㣠ããŸãšãããã®
+-------+ +---++---++---++---++---++---++---++---+ +---+ | GOP | = | B || P || B || P || B || P || B || P | ... | I | +-------+ +---++---++---++---++---++---++---++---+ +---+
-
-
ãã¯ãã£ã¬ã€ã€
-
1ã€ã®ãã¯ãã£(B or P or I)ã 16 line ã§ã¹ã©ã€ã¹ãããã®ã 1 line = 1px ãšèããŠãè¯ã
+-------------------------+ | slice#1 | 16 line +-------------------------+ | slice#2 | +-------------------------+ | : | +-------------------------+ | slice#n | +-------------------------+
-
-
ã¹ã©ã€ã¹ã¬ã€ã€
-
1ã€ã®ã¹ã©ã€ã¹ã 16 ç»çŽ ã§ããã«ã¹ã©ã€ã¹ãããã®ã1ç»çŽ = 1px ãšèããŠãè¯ã
+-------------------------+ +----+----+----+----+----+-----+----+ | slice#n | = | MB | MB | MB | MB | MB | ... | MB | +-------------------------+ +----+----+----+----+----+-----+----+
-
-
ãã¯ããããã¯ã¬ã€ã€
-
1ã€ã®ãã¯ããããã¯ã¯4ã€ã®YãšCb,Crã§æ§æãããŠãã
+-----+-----+ +----+ +----+ +----+ | Y | Y | + | Cb | + | Cr | 8 | MB | = |-----+-----+ +----+ +----+ +----+ | Y | Y | 8 +-----+-----+ 16
-
-
ãããã¯ã¬ã€ã€
- ç¥
ByteStream, NAL file format
ByteStream.toNALUnit
ByteStream.toNALUnit(stream:ByteStreamUint8Array):NALUnitArray ã¯ã Annex B ByteStream ã NALUnit ã®é åã«å€æããŸãã
ã³ãŒããèªã¿è§£ãã«ã¯ ITU-T H.264 ãåç §ããŠãã ããã
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 ããååŸã§ãããã€ããªããŒã¿ã¯ Byte stream format
MPEG-2 TS ããååŸã§ãããã€ããªããŒã¿ã¯ ByteStream format ã§ã
ByteStream åããã NALUnit ã¯ä»¥äžã®ããã«ãªã£ãŠããã ã¹ã¿ãŒãã³ãŒãããæ¬¡ã®ã¹ã¿ãŒãã³ãŒããŸã§ã1ã€ã®NALUnitã«çžåœããŸãã
+---------------+----------++---------------+----------+------
| 00 00 01 | NAL Unit || 00 00 01 | NAL Unit | ...
+---------------+----------++---------------+----------+------
ByteStream.toNALUnit ã®åŒæ° stream ã«æå®ã§ããããŒã¿ã¯ãã®ãã©ãŒãããã§ãã
MP4 ãèŠæ±ãããã€ããªããŒã¿ã¯ NAL file foramt
MP4 ã«åã蟌ãã§äœ¿çšãããã€ããªããŒã¿ã¯ NAL file format (H.264 Raw Stream) ã§ãã ããããã® NALUnit ã®åã« 4byte ã® NALUnitSize ãååšããŸã
+--------------------+----------++--------------------+----------+------
| NALUnitSize(4byte) | NAL Unit || NALUnitSize(4byte) | NAL Unit | ...
+--------------------+----------++--------------------+----------+------
NALUnit.toSNALUnit( ByteStream.toNALUnit(stream) ) ã§ãã®ãã©ãŒãããã«å€æã§ããŸãã
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;
}
}
Eaxmple
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
Question
-
5æã®png ãåæãã png.all.mp4 ã ts ã«å€æããå é ã®tsãmp4ã«å€æãããã¡ã€ã« assets/ff/png.all.mp4.00.ts.mp4 ã® mdat ãèŠããšãBoxSize = 1958 ããããæããã«å€§ããã
mdat ã®å å®¹ãæŽã«ã¿ããšãAUD, SPS, PPS, SEI, IDR ã®åŸã« AUD, SPS, PPS, IDR ã 4ã€ååšããã 5ã€åã®IDRãã¯ãã£ã®ã»ãã«æ¬æ¥ã¯äžèŠãªAUD,SPS,PPS,SEIãååšããç¶æ ã«ãªã£ãŠããããå®éã«å©çšãããŠããIDRã¯1ã€ã®ã¿ã§ãã
ãã®æ§åã¯ãtestAVC_dump_ffmpeg_created_mp4_file_question1 ã§åçŸã§ãã
function testAVC_dump_ffmpeg_created_mp4_file_question1() { var verifyFile = "../assets/ff/png.all.mp4.00.ts.mp4"; TypedArray.toArrayBuffer(verifyFile, function(buffer) { console.log("LOAD FROM: ", verifyFile, buffer.byteLength); global.mp4box = AVC.MP4Parser.parse( new Uint8Array(buffer) ); }); } console.dir(global.mp4box); HexDump(global.mp4box.root.mdat.data);
EBSP, RBSP, SODB
SODB, RBSP, EBSP ã®é¢ä¿ã¯ä»¥äžã®å³ã®ããã«ãªããŸãã
EBSP ã® 00 00 03 0x
ã¯ã RBSP ã§ã¯ 00 00 0x
ãšããŠè§£éããå¿
èŠããããŸã(x ã«ã¯ 0ã3 ã®æ°åãå
¥ããŸã)ã
mdat
ã«åã蟌ãŸãããã€ããªããŒã¿ã¯ EBSP ã® 00 00 03 0x
ã®ãŸãŸã§ãããRBSP ã® 00 00 0x
ã§ã¯ãããŸããã
NALUnitHeader ãããŒã¹ããæ®µéã§ã¯ EBSP ãã RBSP ãçæããçæãã RBSP ãããŒã¹ããŸãã
+-------------------+ +------------++----------+ +------------++----------+
| H.264 Byte Stream | = | Start Code || NALUnit | ... | Start Code || NALUnit |
+-------------------+ +------------++----------+ +------------++----------+
+-------------------+ +---------------++------+
| NALUnit | = | NALUnitHeader || EBSP |
+-------------------+ +---------------++------+
+-------------------+ +----+ +----+----+----+----+ +----+
| EBSP | = | xx | ... | 00 | 00 | 03 | 0x | ... | xx |
+-------------------+ +----+ +----+----+----+----+ +----+
+-------------------+ +------+ +------++---------------++----------------------------+
| RBSP | = | SODB | ... | SODB || RBSP stop bit || rbsp_alignment_zero_bit... |
+-------------------+ +------+ +------++---------------++----------------------------+
+------+ +------++---------------++----------------------------+
| 0xFF | ... | 0xFF || `1` || `0000000` ... `0` |
+------+ +------++---------------++----------------------------+
MP4 Sample, Chunk, Table
MP4 Box æ§é ããããããªãšãªãŒãã£ãªã®åãç®ãç¥ãããã«ã¯ãstsc ãš stco ãåç §ããŸãã ããã« stsz ã®å 容ãããã¬ãŒã ããšã®ããŒã¿ã®äœçœ®ãšãµã€ãºãç¥ãäºãã§ããŸãã åçæã«ãããªãšãªãŒãã£ãªã®åæãåãã«ã¯ stts ãåç §ããŠãããªã®åãã¬ãŒã ããªãŒãã£ãªãã¬ãŒã (æ ŒçŽåäœ)ããšã®åçæéãããã«åçãã¹ãæå»ãååŸããŸãã
- Sample
- Sample 㯠1ã€ã®ãã¯ãã£ãæ§æããæå°ã®åäœã®ããšã§ã
- IDR, Iãã¯ãã£ãªã©ã® KeyFrame ãæ§æãã AccessUnit ãå«ãŸããŠããŸã
- Sample ã®ãµã€ãº, 衚瀺æå»ãªã©ã®ãããæ
å ±ã¯ã
moov
ã«æ ŒçŽãããŸã - Sample ã®ããŒã¿(Stream)ã¯
mdat
ã«æ ŒçŽãããŸã - MP4 ã«ãããŠã¯æ åã®ããããšããŒã¿ã¯å¥ã ã®å Žæã«æ ŒçŽãããŸã
- Chunk ã¯è€æ°ã® Sample ãã°ã«ãŒããšããŠãŸãšããåäœã®ããšã§ãã
- Chunk ã®ãã³ãŒãæ¹æ³ã¯
stsd
(Sample Description) ã§å®çŸ©ããŸã - Sample Description 㯠Chunk ã®ãã³ãŒãæ¹æ³ãèšãããã®ã§ã
avc1
ãšavcC
ãç·ç§°ãããã®ã§ã
- Chunk ã®ãã³ãŒãæ¹æ³ã¯
avc1
avc1
ã«ã¯ãã¯ãã£ã埩å ããããã«å¿ èŠãšãªãwidth,
heightãš
frame_count` ãèšèŒãããŠããŸã
avcC
avcC
ã«ã¯ãã¯ãã£ã埩å ããããã«å¿ èŠãšãªã SPS ãš PPS ãæ ŒçŽãããŠããŸã
stts
ã¯ãµã³ãã«ã®åçæéã®ãªã¹ãã§ãstco
ã¯ãã£ã³ã¯ããã¡ã€ã«ã®äœåŠã«é 眮ãããŠããã(offset)ã®ãªã¹ãã§ãstco.chunk_offset
ã«æå®ããå€ã¯ãã¡ã€ã«ã®å é ããã®ãªãã»ããå€ã§ã¯ãªããmdat
+ 4 byte ããã®ãªãã»ããå€ã§ãstco.chunk_offset = 0
ãªãmdat
ã®å é ã«ãã£ã³ã¯ããããšããæå³ã«ãªããŸã
mdat Stream
| mdat | | stsc | | stsz | | stsd |
+--------------+ +--------------+ +--------------+ +---------------+
| | | | | Sample 1 | | Sample |
| | | | +--------------+ | Description |
| | | Chunk 1 | | Sample 2 | | |
| | | | +--------------+ | |
| | | | | Sample 3 | | |
| | +--------------+ +--------------+ +---------------+
| | +--------------+ +--------------+ +---------------+
| | | | | Sample 4 | | Sample |
| | | | +--------------+ | Description |
| | | Chunk 2 | | Sample 5 | | |
| | | | +--------------+ | |
| | | | | Sample 6 | | |
| | +--------------+ +--------------+ +---------------+
| | +--------------+ +--------------+ +---------------+
| | | Chunk 3 | | Sample 7 | | Description |
| | +--------------+ +--------------+ +---------------+
| | +--------------+ +--------------+ +---------------+
| | | Chunk 4 | | Sample 8 | | Description |
+--------------+ +--------------+ +--------------+ +---------------+
Sample Description: width, height, frame_count, profile, level, SPS, PPS
Appendix
stco.chunk_offset
stco.chunk_offset ã¯ãSample ãæ ŒçŽãããŠãããã¡ã€ã«å ã¢ãã¬ã¹ã®å é ãæå³ããŸãã
- mdat ã®ããŒã¿éšåã®å é ã¢ãã¬ã¹ã瀺ããŸã
- mdat ãè€æ°ååšããå Žåã¯ãentry_count ãè€æ°ã«ãªããŸã
äŸ: 以äžã® a.mp4 ã«ãããŠãstco.samples[0].chunk_offset
ã®å€ã¯ mdat box ã®ããŒã¿éšåã®å
é ã¢ãã¬ã¹(0x0030) ã瀺ããŸãããã®å€ã¯ãã¡ã€ã«ã®å
é ã0ãšãããªãã»ããå€ã§ãã
a.mp4
0000 00 00 00 20 66 74 79 70 69 73 6F 6D 00 00 02 00 ....ftypisom....
0010 69 73 6F 6D 69 73 6F 32 61 76 63 31 6D 70 34 31 isomiso2avc1mp41
0020 00 00 00 08 66 72 65 65 00 00 03 C4 6D 64 61 74 ....free....mdat
0030 00 00 02 AD ....
^
this
{
"stco": {
"BoxHead": 1664,
"BoxSize": 20,
"BoxType": "stco",
"version": 0,
"flags": 0,
"entry_count": 1,
"samples": [{
"chunk_offset": 48
}]
}
}
Link
- H.264
- FLV format for H.264
- JavaScriptã§MP4ã®åç»ããAACãæœåºããŠã¿ã
- H.264 ããŒã¿æ§é , NALUnit, RBSPã®è§£èª¬
- JCODEC Muxing h264 (avc) into mp4
- github https://github.com/jcodec/jcodec
- H.264/AVC(NAL)
- H.264/AVC(NAL) ã«ã€ããŠæŠèŠãæžãããŠããŸã
- http://wikiwiki.jp/redstrange/?H.264
- MPEG-4ã®åºç€5 - ISO 14496-10 (ãããª) -AVCãageha was here
- 2007幎æç¹ã«ããã ffmpeg 以å€ã®ã³ãŒããã¯ã«ã€ããŠæ å ±ãæžãããŠãã
- ffmpeg ã§çæãã H.264 ã® raw data ã mp4box ã§ mp4 ã³ã³ããã«å€æå¯èœãªäºãæžãããŠãã
- gpac/MP4Box ã® muxer éšåã®ã³ãŒã
- Encapsulation of Opus in ISO Base Media File Format
- L-SMASH ã® muxer
- mdat ã®å ¥ãæ¿ã
- Bento4 ã® muxer
- MPEG-2 TS