我有1秒PCM数据,我成功写入AAC文件。
但是,我无法控制输出文件的比特率。
以下是我的AAC编解码器的配置:
AudioStreamBasicDescription clientFormat = {0};
clientFormat.mSampleRate = 44100;
clientFormat.mFormatID = kAudioFormatMPEG4AAC;
clientFormat.mFormatFlags = kMPEG4Object_AAC_Main;
clientFormat.mChannelsPerFrame = 2;
clientFormat.mBytesPerPacket = 0;
clientFormat.mBytesPerFrame = 0;
clientFormat.mFramesPerPacket = 1024;
clientFormat.mBitsPerChannel = 0;
clientFormat.mReserved = 0;
据我研究其他例子,这是设置比特率的正确方法:
AudioConverterRef acRef;
UInt32 acsize = sizeof(acRef);
UInt32 bitRateIn = 96000;
ExtAudioFileGetProperty(audiofileRef, kExtAudioFileProperty_AudioConverter,
&acsize, &acRef);
AudioConverterSetProperty(acRef, kAudioConverterEncodeBitRate,
sizeof(UInt32), &bitRateIn);
在此之后,我将数据写入文件。
由于文件为1秒且比特率为96kbit / s,输出文件应为96/8 = 12千字节。但是输出文件大约是62千字节。
在获得这种奇怪的行为后,我使用MediaInfo打开了文件,它有3种不同的比特率:
标称比特率 - 96kb / s(这是我设定的)
比特率 - 48kb / s
整体比特率 - 476kb / s
此处文件大小对应的总比特率为476/8 = 59千字节(其余为元数据和标题)。
如何正确设置比特率?