小编Jas*_*son的帖子

使用 AVSampleBufferAudioRenderer 播放流式 PCM 音频数据包(从 Opus 解码)

编辑:根据建议更新了代码,修复了 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)

objective-c core-audio avfoundation audiotoolbox ios

4
推荐指数
1
解决办法
154
查看次数