2012-07-17 3 views
5

나는 지금 48 시간 동안이 문제를 해결하려고 노력했지만 아무 것도 생각 나지 않았습니다. 다른 AV 라이브 스트림을 재생하는 2 AVPlayer 개체가 있습니다. 분명히, 나는 그들 모두가 동시에 오디오를 재생하기를 원하지 않기 때문에 비디오 중 하나를 뮤트하는 방법이 필요하다. 문제가 해결되지 않은 경우 AVPlayer를 재생 오디오 트랙을 음소거 애플 suggests thisAVPlayer에서 HTTP 라이브 스트림 음소거

은 ...

NSMutableArray *allAudioParams = [NSMutableArray array]; 
for (AVPlayerItemTrack *track in [_playerItem tracks]) { 
    if ([track.assetTrack.mediaType isEqualToString:AVMediaTypeAudio]) { 
     AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters]; 
     [audioInputParams setVolume:0.0 atTime:CMTimeMakeWithSeconds(0,1)]; 
     [audioInputParams setTrackID:[track.assetTrack trackID]]; 
     [allAudioParams addObject:audioInputParams]; 
     // Added to what Apple Suggested 
     [track setEnabled:NO]; 
    } 
} 

AVMutableAudioMix *audioZeroMix = [AVMutableAudioMix audioMix]; 
[audioZeroMix setInputParameters:allAudioParams]; 
[_playerItem setAudioMix:audioZeroMix]; 

는 (많은 반복 후) 나는 AVPlayerItemTrack의 enabled 속성을 발견하고 NO에 있음을 설정했습니다. 또한 아무것도. 내가이 NSLog (track.enabled "%의 X", @), 여전히 1.

내가 손해를보고있어로 나타나하려고 할 때 때문에 심지어 아무것도로 등록하지 않고 내가 생각할 수 없다 좋은 대답을 얻기 위해 읽을 수 있고 다시 읽을 수있는 문서의 또 다른 조각입니다. 누군가가 도움을 줄 수 있다면 환상적 일 것입니다.

이 * 업데이트 : 나는 애플의 보류를 얻었고, AVFoundation 팀에 따르면,이 HLS 비디오 트랙을 음소거하거나 사용하지 않도록 설정하는 것은 불가능합니다. 저는 개인적으로 이것이 버그라고 생각하여 bug report을 제출했습니다 (Apple에게이 문제가 있음을 알려주기 위해 똑같이해야합니다). 피드백 페이지를 통해 feature enhancement request을 제출하여 제출할 수도 있습니다.

답변

6

새로운 iOS 7 답변 : AVPlayer에는 '볼륨'및 '음소거'라는 두 가지 새로운 속성이 추가되었습니다. 그것들을 사용하십시오!

내가 같은 일을 처리했습니다 : 여기


그리고

는 아이폰 OS 7 전에 삶에 대한 원래의 답변입니다. 오디오와 함께 음소거 된 스트림과 스트림을 만들었습니다. 음소거 또는 음소거를 해제하려면 [player replaceCurrentItemWithPlayerItem:muteStream]으로 전화하십시오.

나는 또한 버그 보고서를 제출했다. AVPlayer이 MacOS 10.7에서이 기능을 갖고있는 것처럼 보이지만 아직 iOS에는 적용되지 않았습니다. 물론

AVAudioMix is documented not to work on URL assets here

어쨌든 그것을 시도하고 당신처럼 내가 정말 작동하지 않습니다 발견했다. 이를위한 최고의 솔루션이 될 것

+0

답변을 주셔서 감사합니다. 문제 해결을 위해 나에게 길을 열었습니다. 나는 OpenAL에서 똑같은 일을하려고 노력하고 있지만, 그것을하기위한 직접적인 방법을 찾지 못했다.alSourcef (sourceID, AL_GAIN, volume)를 통해 볼륨을 줄일 수 있다는 것을 알고 있습니다. 하지만 음소거하는 방법을 모르면 빠른 해결 방법이 있습니까? – chathuram

1

실제로는 두 개의 오디오 트랙 스트림 URL 피드를 포함합니다! 하나는 정상적인 오디오이고 나머지 하나는 음소거 된 오디오입니다. 필요하지 않습니다 -

그것은보다는 그것을 ComPuff이 실제로 두 개의 별도의 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]; 
} 

유일한 문제는 때해야 내 스트림 URL 만 표시 두 트랙 (비디오 용 및 오디오 용 하나)라는 것이다 실제로는 3 트랙 (2 오디오 트랙)이됩니다. 이것이 스트림 URL이나 코드에 문제가 있다면 해결할 수 없습니다! 누구든지 코드에서 실수를 발견 할 수 있습니까?