この投稿を読んだ後: MTAudioProcessingTap をどのようにリリースしますか? 、1回のタップに対するchrisの提案に従って、機能しているようで、準備解除およびファイナライズのコールバックが呼び出されます。
ただし、複数のオーディオ トラックがあり、それぞれに 1 つのタップがあります。Apple の WWDC の例とは異なり、 myMYAudioTapProcessor
はオーディオ ミックスを生成しなくなりました。複数のトラックが存在するため、AVMutableAudioMixInputParameters
複数audioMix
のinputParameters
.
複数のタップを使用する場合、プレーヤーへMYAudioTapProcessor
の_audioProcessors
強い参照であると. プレーヤーを解体するときは、次のパターンに従います。playerItem
audioMix
AVPlayer
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 がメモリ内でハングアップします。各タップのコールバックが確実に発生するように、複数のタップを保存して割り当てを解除する適切な方法は何ですか?