1

我正在尝试AVAudioCompressedBuffer使用这种格式初始化一个:

<AVAudioFormat 0x2818944b0:  2 ch,  48000 Hz, '.mp3' (0x00000000) 0 bits/channel, 0 bytes/packet, 1152 frames/packet, 0 bytes/frame>

像这样:

AVAudioCompressedBuffer* compressedBuffer = [[AVAudioCompressedBuffer alloc] initWithFormat:format 
                                                                             packetCapacity:NUM_AQ_BUFS];

但我得到了这个例外:

Thread 1: "required condition is false: maximumPacketSize != 0"

我错过了什么?

谢谢

4

1 回答 1

0

您使用了错误的初始化程序。头文件[AVAudioCompressedBuffer initWithFormat:packetCapacity:]

如果格式为 PCM 或格式具有每个数据包的可变字节数 (format.streamDescription->mBytesPerPacket == 0),则会失败。

从格式中可以看出,您拥有0 bytes/packet.

-[AVAudioCompressedBuffer packetCapacity:maximumPacketSize:]改为使用

AVAudioCompressedBuffer* compressedBuffer = [[AVAudioCompressedBuffer alloc] initWithFormat:format packetCapacity:NUM_AQ_BUFS maximumPacketSize: 1024];

tbh 我不知道 mp3 的最大数据包大小应该是多少。显然它是 144 字节。您可以使用AudioCodecGetPropertyInfo()+查询kAudioCodecPropertyMaximumPacketByteSize它或从您自己的数据包流中派生它。

于 2021-12-12T17:55:32.977 回答