编辑:根据建议更新了代码,修复了 ASBD 并再次尝试使 PTS 正确。它仍然不播放任何音频,但至少不再有错误。
我正在开发一个 iOS 项目,在该项目中我接收 Opus 音频数据包并尝试使用 AVSampleBufferAudioRenderer 播放它们。现在我使用的是 Opus 自己的解码器,所以最终我只需要获取解码后的 PCM 数据包即可播放。从上到下的整个过程并没有很好的记录,但我想我已经很接近了。这是迄今为止我正在使用的代码(已进行编辑,并为简单起见使用了一些硬编码值)。
static AVSampleBufferAudioRenderer* audioRenderer;
static AVSampleBufferRenderSynchronizer* renderSynchronizer;
int samplesPerFrame = 240;
int channelCount = 2;
int sampleRate = 48000;
int streams = 1;
int coupledStreams = 1;
char mapping[8] = ['\0','\x01','\0','\0','\0','\0','\0','\0'];
CMTime startPTS;
// called when the stream is about to start
void AudioInit()
{
renderSynchronizer = [[AVSampleBufferRenderSynchronizer alloc] init];
audioRenderer = [[AVSampleBufferAudioRenderer alloc] init];
[renderSynchronizer addRenderer:audioRenderer];
int decodedPacketSize = samplesPerFrame * sizeof(short) * …Run Code Online (Sandbox Code Playgroud)