2013-03-22 2 views
1

오디오 및 mp3 파일이있는 비디오가 있습니다. mp3를 재생하면서 음소거 (오디오 끄기)로 비디오를 재생하고 싶습니다. 비디오를 재생하려면 MPMoviePlayerController을 사용하고 mp3를 재생하려면 AVAudioPlayer을 사용하고 있습니다. 그것을 할 수있는 방법이 있습니까?AVAudioPlayer를 사용하여 mp3를 재생하는 동안 비디오를 음소거하는 방법

+0

@nickbona : 감사합니다. MPMoviePlayerController를 AVPlayer로 교체하려고합니다. AVPlayer가 재생중인 현재 비디오 파일 이름을 찾는 방법이 있습니까? 나는 그것을 발견 할 수 없다. – Caio

+0

(비디오는 로컬입니다 [앱 번들에 포함] : 메타 데이터 사용을 피하고 싶습니다. [비디오에서 가능할 수 있도록] – Caio

답변

0

나는 내 자신의 질문에 대답하기로 결심했다. @nickbona 대답은 괜찮 았지만 간단한 예제 코드는 없다. 그래서 해결책은 MPMoviePlayerController 대신 AVPlayer를 사용하는 것입니다.

//init player 
AVAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"yourfile" ofType:@"mp4"]] options:nil]; 
AVPlayerItem *anItem = [AVPlayerItem playerItemWithAsset:asset]; 
AVPlayer *myPlayerController = [AVPlayer playerWithPlayerItem:anItem]; 

//disable audio (this is the version when you have more than one video in the playlist: i write this version so it should be more useful) 
NSArray *playerTracks = [asset tracksWithMediaType:AVMediaTypeAudio]; 
NSMutableArray *playerParams = [NSMutableArray array]; 
for (AVAssetTrack *track in playerTracks) { 
    AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters]; 
    [audioInputParams setVolume:0.0 atTime:kCMTimeZero]; 
    [audioInputParams setTrackID:[track trackID]]; 
    [playerParams addObject:audioInputParams]; 
} 
AVMutableAudioMix *muteAudioMix = [AVMutableAudioMix audioMix]; 
[muteAudioMix setInputParameters:playerParams]; 
[[myPlayerController currentItem] setAudioMix:muteAudioMix]; 

은 도움이 될 수 있습니다 희망 : 다른 사람이 그것을 필요로 할 경우

그래서 나는 여기 쉽게 소스 코드 예제입니다.

0

MPMoviePlayerController가 볼륨에 대한 제어권을 제공하지 않습니다. AVPlayer과 함께 제공되는 예제를 살펴 보시기 바랍니다. 동영상을 재생하는 데는 조금 더 많은 작업이 필요하지만 원하는대로 정확하게 "음소거 된"속성을 사용할 수 있습니다.

+0

MPMoviePlayerController가 이러한 컨트롤을 제공하지 않습니다. 그러나 앱의 오디오 세션을 사용하기 때문에 실제 재생에 사용하지 않아도 MPMusicPlayerController 인터페이스를 사용하여 동일하게 구현할 수 있습니다. – Till

0

목표를 달성하기 위해 실제로 MPMusicPlayerController을 사용할 수 있습니다. 그것은 무엇을

- (void)muteVidepPlayer:(BOOL)muteFlag 
{ 
    MPMusicPlayerController *musicPlayer = [MPMusicPlayerController applicationMusicPlayer]; 
    if (muteFlag) 
    { 
     self.lastVolume = musicPlayer.volume; 
     [musicPlayer setVolume:0.0f]; 
    } 
    else 
    { 
     [musicPlayer setVolume:self.lastVolume]; 
    } 
} 

, 그것은 볼륨을 조정할 수 있습니다 MPMusicPlayerController의 인스턴스를 사용합니다. 너무 당황하지 마라. 이것은 당신의 MPMoviePlayerController 인스턴스의 볼륨을 효과적으로 조정할 것이다. 이것은 MPMoviePlayerController과 MPMusicPlayerController가 둘 다 (기본적으로) 앱 오디오 세션을 사용하기 때문에 작동합니다.

볼륨을 이전 설정으로 재설정 할 수 있도록이 방법은 해당 값을 재생 컨트롤러/뷰 컨트롤러/기타의 float (self.lastVolume) 유형의 인스턴스 변수에 저장하려고 시도합니다.

+0

고맙습니다. 2 시간 후에 시험해 보겠습니다. – Caio

+0

나는 당신의 솔루션을 시험해 보았지만 작동하지 않았다. (나는 그 솔루션이 mp3를 재생하는 AVAduiPlayer 객체의 오디오를 남기고 있는지 궁금해했다.) – Caio

+0

이것은 시뮬레이터 내에서 작동하지 않습니다. 디바이스에서 테스트하십시오. – Till

관련 문제