この投稿を読んだ後: MTAudioProcessingTap をどのようにリリースしますか? 、1回のタップに対するchrisの提案に従って、機能しているようで、準備解除およびファイナライズのコールバックが呼び出されます。
ただし、複数のオーディオ トラックがあり、それぞれに 1 つのタップがあります。Apple の WWDC の例とは異なり、 myMYAudioTapProcessorはオーディオ ミックスを生成しなくなりました。複数のトラックが存在するため、AVMutableAudioMixInputParameters複数audioMixのinputParameters.
複数のタップを使用する場合、プレーヤーへMYAudioTapProcessorの_audioProcessors強い参照であると. プレーヤーを解体するときは、次のパターンに従います。playerItemaudioMixAVPlayer
for (int i = 0; i < _audioMix.inputParameters.count; i++) {
MTAudioProcessingTapRef tap = ((AVMutableAudioMixInputParameters *)_audioMix.inputParameters[i]).audioTapProcessor;
CFRelease(tap);
}
_audioMix = nil;
_playerItem = nil;
_player = nil;
_audioProcessors = nil;
しかし、ほとんどの場合、タップの unprepare コールバックと finalize コールバックのいずれかが呼び出されず、MTAudioProcessingTap がメモリ内でハングアップします。各タップのコールバックが確実に発生するように、複数のタップを保存して割り当てを解除する適切な方法は何ですか?