一度に 3 つのライブ ビデオ フィードを画面に表示するアプリケーションを開発しています。このために、AVFoundation フレームワークで AVPlayer を使用しています。
ただし、ビデオをクリックして選択した場合にのみオーディオを出力する必要があるという要件があります。現時点では、ビデオとオーディオをすべて同時に再生しています。
したがって、各AVPlayerでオーディオをミュートする方法を作成しようとしています。
これに対する答えを求めてさまざまなスレッドを検索しましたが、これまでのところ何も見つけることができませんでした.
これを作成するのに最も近いのは、AVAssestTrack を介してフィード内のオーディオ トラックを取得し、AVMutableAudioMix を介して音量を変更することでした。
ただし、オーディオ トラック配列に 0 アイテムが返されます。
誰かが私のコードを見て、どこで間違いを犯しているのか、またはこれを行うためのより良い方法があるかどうかを確認できますか?
ご協力いただきありがとうございます!
- (IBAction)touchVolumeButton:(id)sender {
float volume = 0.0f;
AVPlayerItem *currentItem = self.player.currentItem;
NSArray *audioTracks = [currentItem.asset tracksWithMediaType:AVMediaTypeAudio];
NSMutableArray *allAudioParams = [NSMutableArray array];
for (AVAssetTrack *track in audioTracks) {
AVMutableAudioMixInputParameters *audioInputParams =
[AVMutableAudioMixInputParameters audioMixInputParameters];
[audioInputParams setVolume:volume atTime:kCMTimeZero];
[audioInputParams setTrackID:[track trackID]];
[allAudioParams addObject:audioInputParams];
}
if ([allAudioParams count] > 0) {
AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
[audioMix setInputParameters:[NSArray arrayWithObject:allAudioParams]];
[currentItem setAudioMix:audioMix];
AVAssetExportSession *session = [AVAssetExportSession exportSessionWithAsset:currentItem.asset presetName:@"current"];
session.audioMix = audioMix;
}
}