[FFMPEG]How to set avstream extra data

AAC

Extra data have 16 bits:
Audio object type - normally 5 bits, but 11 bits if AOT_ESCAPE
Sampling index - 4 bits
if (Sampling index == 15)
Sample rate - 24 bits
Channel configuration - 4 bits
last reserved- 3 bits
For exmpale:  "Low Complexity Sampling frequency 44100Hz, 1 channel mono":
AOT_LC == 2 -> 00010
44.1kHz == 4 -> 0100
44.1kHz == 4 -> 0100  48kHz == 3 -> 0011
mono == 1 -> 0001
so extra data:
00010 0100 0001 000 ->0x12 0x8
00010 0011 0001 000 ->0x11 0x88
_audio->codecpar->extradata_size = 2;
_audio->codecpar->extradata = (uint8_t*)malloc(2);
SetAudioExtraData(stream.sampleRate(), channelNum, _audio->codecpar->extradata);
 static void SetAudioExtraData(int sampleRate, int channelNum, uint8_t *pExtradata)
{
      switch(sampleRate){
          case 8000:
              pExtradata[0] = 0x15;
              if(channelNum == 1)
                  pExtradata[1] = 0x88;
              else
                  pExtradata[1] = 0x90;
              break;
          case 16000:
              pExtradata[0] = 0x14;          
              if(channelNum == 1)                
                  pExtradata[1] = 0x8;       
              else
                  pExtradata[1] = 0x10;      
              break;
          case 32000:
              pExtradata[0] = 0x12;          
              if(channelNum == 1)                
                  pExtradata[1] = 0x88;      
              else
                  pExtradata[1] = 0x90;      
              break;
          case 44100:
              pExtradata[0] = 0x12;          
              if(channelNum == 1)                
                  pExtradata[1] = 0x8;       
              else
                  pExtradata[1] = 0x10;      
              break;
          case 48000:
              pExtradata[0] = 0x11;          
              if(channelNum == 1)                
                  pExtradata[1] = 0x88;      
              else                 
				  pExtradata[1] = 0x90;
              break;
          default://current avaac_enc sampling rate = 44100, channel = 1
              pExtradata[0] = 0x12;
              if(channelNum == 1)
                  pExtradata[1] = 0x8;
              else
                  pExtradata[1] = 0x10;
              break;
      }
}
 

H.264/H.265 

H.264 -> SPS + PPS with start code 
H.265 -> VPS + SPS + PPS with start code
pCodecContext->extradata = (uint8_t*)av_malloc(extraDataSize);
pCodecContext->extradata_size = extraDataSize;
memcpy(pCodecContext->extradata, stream.header().data(), extraDataSize);

沒有留言:

張貼留言

Install KDE Desktop for Ubuntu 24.04

1. Enter following command to install the KDE-plasma sudo apt install kde-plasma-desktop 2. Disable the login screen 2-1. Create default sdd...