src/remux/aac-helper.ts
- /**
- * AAC helper
- */
-
- class AAC {
- static getSilentFrame(
- codec?: string,
- channelCount?: number
- ): Uint8Array | undefined {
- switch (codec) {
- case 'mp4a.40.2':
- if (channelCount === 1) {
- return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x23, 0x80]);
- } else if (channelCount === 2) {
- return new Uint8Array([
- 0x21,
- 0x00,
- 0x49,
- 0x90,
- 0x02,
- 0x19,
- 0x00,
- 0x23,
- 0x80,
- ]);
- } else if (channelCount === 3) {
- return new Uint8Array([
- 0x00,
- 0xc8,
- 0x00,
- 0x80,
- 0x20,
- 0x84,
- 0x01,
- 0x26,
- 0x40,
- 0x08,
- 0x64,
- 0x00,
- 0x8e,
- ]);
- } else if (channelCount === 4) {
- return new Uint8Array([
- 0x00,
- 0xc8,
- 0x00,
- 0x80,
- 0x20,
- 0x84,
- 0x01,
- 0x26,
- 0x40,
- 0x08,
- 0x64,
- 0x00,
- 0x80,
- 0x2c,
- 0x80,
- 0x08,
- 0x02,
- 0x38,
- ]);
- } else if (channelCount === 5) {
- return new Uint8Array([
- 0x00,
- 0xc8,
- 0x00,
- 0x80,
- 0x20,
- 0x84,
- 0x01,
- 0x26,
- 0x40,
- 0x08,
- 0x64,
- 0x00,
- 0x82,
- 0x30,
- 0x04,
- 0x99,
- 0x00,
- 0x21,
- 0x90,
- 0x02,
- 0x38,
- ]);
- } else if (channelCount === 6) {
- return new Uint8Array([
- 0x00,
- 0xc8,
- 0x00,
- 0x80,
- 0x20,
- 0x84,
- 0x01,
- 0x26,
- 0x40,
- 0x08,
- 0x64,
- 0x00,
- 0x82,
- 0x30,
- 0x04,
- 0x99,
- 0x00,
- 0x21,
- 0x90,
- 0x02,
- 0x00,
- 0xb2,
- 0x00,
- 0x20,
- 0x08,
- 0xe0,
- ]);
- }
-
- break;
- // handle HE-AAC below (mp4a.40.5 / mp4a.40.29)
- default:
- if (channelCount === 1) {
- // ffmpeg -y -f lavfi -i "aevalsrc=0:d=0.05" -c:a libfdk_aac -profile:a aac_he -b:a 4k output.aac && hexdump -v -e '16/1 "0x%x," "\n"' -v output.aac
- return new Uint8Array([
- 0x1,
- 0x40,
- 0x22,
- 0x80,
- 0xa3,
- 0x4e,
- 0xe6,
- 0x80,
- 0xba,
- 0x8,
- 0x0,
- 0x0,
- 0x0,
- 0x1c,
- 0x6,
- 0xf1,
- 0xc1,
- 0xa,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5e,
- ]);
- } else if (channelCount === 2) {
- // ffmpeg -y -f lavfi -i "aevalsrc=0|0:d=0.05" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 "0x%x," "\n"' -v output.aac
- return new Uint8Array([
- 0x1,
- 0x40,
- 0x22,
- 0x80,
- 0xa3,
- 0x5e,
- 0xe6,
- 0x80,
- 0xba,
- 0x8,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x95,
- 0x0,
- 0x6,
- 0xf1,
- 0xa1,
- 0xa,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5e,
- ]);
- } else if (channelCount === 3) {
- // ffmpeg -y -f lavfi -i "aevalsrc=0|0|0:d=0.05" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 "0x%x," "\n"' -v output.aac
- return new Uint8Array([
- 0x1,
- 0x40,
- 0x22,
- 0x80,
- 0xa3,
- 0x5e,
- 0xe6,
- 0x80,
- 0xba,
- 0x8,
- 0x0,
- 0x0,
- 0x0,
- 0x0,
- 0x95,
- 0x0,
- 0x6,
- 0xf1,
- 0xa1,
- 0xa,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5a,
- 0x5e,
- ]);
- }
- break;
- }
- return undefined;
- }
- }
-
- export default AAC;