2013-06-22 3 views
1

Я разрабатываю приложение iOS, которое работает на всех устройствах iOS. В моем приложении я воспроизвожу несколько видеофайлов. Все работает отлично на всех устройствах, кроме iPhone 4. На iPhone4 уровень громкости очень низкий, хотя все остальные приложения работают с обычным уровнем громкости на этом устройстве. На всех других устройствах уровень громкости в порядке. Может кто-нибудь, пожалуйста, помогите мне с этой проблемой? Спасибо заранее.Уровень громкости на всех устройствах iOS ЗА ИСКЛЮЧЕНИЕМ iPhone 4. На iPhone уровень очень низкий

Вот исходный код

NSInteger selectedVideoTag = sender.tag; 
NSString *videoPath = [self getVideoToBePlayedForButtonTag:selectedVideoTag]; 
NSURL *videoUrl = [[NSURL alloc] initFileURLWithPath:videoPath]; 
NSLog(@"videoUrl = %@", videoUrl); 
self.theMovie = [[MPMoviePlayerController alloc] initWithContentURL:videoUrl]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(moviePlaybackComplete:) 
               name:MPMoviePlayerPlaybackDidFinishNotification 
              object:self.theMovie]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(moviePlaybackStateChaned:) 
              name:MPMoviePlayerWillExitFullscreenNotification 
              object:self.theMovie]; 


[self.theMovie prepareToPlay]; 
[self.theMovie.view setFrame:[[UIScreen mainScreen] bounds]]; 


[self.view addSubview:self.theMovie.view]; 
self.theMovie.controlStyle = MPMovieControlStyleDefault; 
[self.theMovie setFullscreen:YES animated:YES]; 
[self.theMovie setScalingMode:MPMovieScalingModeAspectFill]; 
self.theMovie.movieSourceType = MPMovieSourceTypeFile; 

[self.theMovie play]; 

Вот код для getVideoToBePlayedForButtonTag сообщения:

- (NSString *) getVideoToBePlayedForButtonTag:(NSInteger)btnTag 
{ 
NSString *videoPath = nil; 

//Trigger MixPanel events for selected button 
Mixpanel *mixPanel = [Mixpanel sharedInstance]; 

switch (btnTag) { 
    case 1: 
     videoPath =[[NSBundle mainBundle] pathForResource:@"song_01" ofType:@"mp4"]; 
     break; 
    case 2: 
     videoPath =[[NSBundle mainBundle] pathForResource:@"song_02" ofType:@"mp4"]; 
     break; 
    case 3: 
     videoPath =[[NSBundle mainBundle] pathForResource:@"song_03" ofType:@"mp4"]; 
     break; 
    case 4: 
     videoPath =[[NSBundle mainBundle] pathForResource:@"song_04" ofType:@"mp4"]; 
     break; 
    default: 
     break; 
} 
return videoPath; 

}

+2

Можете ли вы разместить свой код? – fvrghl

+0

Какие рамки вы используете для воспроизведения видео? –

+0

Какая версия iOS на вашем iPhone 4? – Groot

ответ

0

Найдено решение этой проблемы. В моем приложении, я должен был отменить отключение звука, так что я добавил код в AppDelegate.m

NSError *categoryError = nil; 
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&categoryError]; 

Благодаря этой категории, iPhone 4 выходной объем был низким. Я изменил код

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&categoryError]; 

Теперь он работает отлично. Хотя, я до сих пор не могу понять, почему звук был низким только на iPhone 4, а не на любом другом устройстве, таком как iPad, iPhone 5.

+0

Я думаю, причина в том, что когда вы выбираете «PlayAndRecord», библиотека предполагает, что вы делаете что-то вроде VOIP, что означает, что пользователь держит телефон до уха. В этом случае вы хотели бы, чтобы объем был ниже, чем если бы его держали перед вами. Вы можете переопределить это, установив 'kAudioSessionProperty_OverrideCategoryDefaultToSpeaker' –

+0

@LewisGordon: Я согласен с вами, но я все еще не понимаю, почему библиотека предположила бы это только в случае iPhone 4, а не для другого устройства. – IamRKhanna