2 に答える
新しい iOS 7 の回答: AVPlayer には、'volume' と 'muted' という 2 つの新しいプロパティが追加されました。それらを使用してください!
そして、これがiOS 7以前の人生に対する元の答えです:
私は同じことを扱ってきました。ミュート ストリームと音声付きストリームを作成しました。ミュートまたはミュート解除するには、 を呼び出します[player replaceCurrentItemWithPlayerItem:muteStream]
。
バグレポートも提出しました。MacOS 10.7 にはこの機能があるようですAVPlayer
が、iOS にはまだ対応していません。
AVAudioMix
URL アセットでは機能しないことが記載されています。
もちろん、とにかく試してみましたが、あなたと同じように、実際には機能しないことがわかりました。
これに対する最善の解決策は、ストリーム URL フィードに 2 つのオーディオ トラックを実際に埋め込むことです。1 つは通常のオーディオで、もう 1 つはミュートされたオーディオです。
ComPuff が実際に 2 つの別々の URL ストリームを作成する方法として提案した方法よりも、この方法で行う方が理にかなっていますが、これは必須ではありません。
オーディオトラックを切り替えるために使用できるコードは次のとおりです。
float volume = 0.0f;
AVPlayerItem *currentItem = self.player.currentItem;
NSArray *audioTracks = self.player.currentItem.tracks;
DLog(@"%@",currentItem.tracks);
NSMutableArray *allAudioParams = [NSMutableArray array];
for (AVPlayerItemTrack *track in audioTracks)
{
if ([track.assetTrack.mediaType isEqual:AVMediaTypeAudio])
{
AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters];
[audioInputParams setVolume:volume atTime:kCMTimeZero];
[audioInputParams setTrackID:[track.assetTrack trackID]];
[allAudioParams addObject:audioInputParams];
}
}
if ([allAudioParams count] > 0) {
AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
[audioMix setInputParameters:allAudioParams];
[currentItem setAudioMix:audioMix];
}
唯一の問題は、実際には 3 つのトラック (2 つのオーディオ トラック) である必要があるのに、私のストリーム URL が 2 つのトラック (ビデオ用とオーディオ用に 1 つ) しか表示しないことです。これがストリームの URL の問題なのか、私のコードの問題なのかはわかりません! 誰でもコードの間違いを見つけることができますか?