Проблема с громкостью проигрывателя AVAudio в iPhone

Я очень новичок в разработке приложений для iPhone, но у меня есть знания в разработке приложений для Android, и мой первый телефонный проект - это потоковая передача URL-адреса крика с помощью AV Audio Player, и я использую следующий код для потоковой передачи URL-адреса

 NSString *urlstr=@"http://live64.jiljilradio.com";

  NSURL* url=[NSURL URLWithString:urlstr];

   AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];

   player = [[AVPlayer playerWithPlayerItem:playerItem]retain];
   [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
   NSLog(@"Play");
    [player play];

он работает нормально, и у меня есть UI Slider для регулировки громкости с помощью [player setvolume:0.5], мое приложение вылетает .. Пожалуйста, дайте мне предложения ...


person Android_kalai    schedule 02.09.2013    source источник
comment
Это помогло бы получить консольный вывод о том, почему и как он рушится.   -  person HalR    schedule 02.09.2013
comment
- [AVPlayer setVolume:]: нераспознанный селектор отправлен в экземпляр 0x8375c20 2013-09-02 11: 45: 09.753 VolumeControl [1577: c07] *** Завершение работы приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: '- [AVPlayer setVolume: ]: неопознанный селектор отправлен в экземпляр 0x8375c20 'Это сообщение об ошибке я получил   -  person Android_kalai    schedule 02.09.2013
comment
Пожалуйста, дайте мне предложения по моей проблеме ... Я действительно трачу на это большую часть времени ... Я с нетерпением жду ваших решений ....   -  person Android_kalai    schedule 02.09.2013
comment
Мне очень жаль, я только что встал с постели сегодня утром.   -  person HalR    schedule 02.09.2013


Ответы (1)


Это может показаться нелогичным, но вы не устанавливаете звук с помощью AVPlayer. Вы должны изменить громкость, используя аудиомикс с AVPlayerItem, а не с плеером.

Вот пример того, как это сделать из другого ответа Джесси Кроссена:

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[self myAssetURL] options:nil];
NSArray *audioTracks = [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];
}

AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
[audioMix setInputParameters:allAudioParams];

[playerItem setAudioMix:audioMix];

ваш код должен выглядеть примерно так:

   AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[self myAssetURL] options:nil];
    NSArray *audioTracks = [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];
    }

    AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
    [audioMix setInputParameters:allAudioParams];

    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
    [playerItem setAudioMix:audioMix];

    player = [[AVPlayer playerWithPlayerItem:playerItem]retain];
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    NSLog(@"Play");
    [player play];

и ваш объем, который установлен в этой строке:

    [audioInputParams setVolume:volume atTime:kCMTimeZero];

Кроме того, если вы сохраните ссылку на свой playerItem и audioTracks, вы можете изменить громкость во время воспроизведения с помощью такого вызова:

NSMutableArray *allAudioParams = [NSMutableArray array];
for (AVAssetTrack *track in audioTracks) {
    AVMutableAudioMixInputParameters *audioInputParams =
    [AVMutableAudioMixInputParameters audioMixInputParameters];
    [audioInputParams setVolume:0.0 atTime:0];
    [audioInputParams setTrackID:[track trackID]];
    [allAudioParams addObject:audioInputParams];
}

AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
[audioMix setInputParameters:allAudioParams];

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
[playerItem setAudioMix:audioMix];

должно быть от 0,0 до 1,0.

person HalR    schedule 02.09.2013
comment
Я просто хочу еще одно уточнение. В своем ответе вы указываете актив в первой строке .. Что это? Как объявить актив в моем проекте ?? - person Android_kalai; 03.09.2013
comment
Добавьте эти строки в мой проект и назначьте AVURLAsset * asset = [AVURLAsset URLAssetWithURL: url options: nil]; Но ничего не случилось. Объем не изменился. - person Android_kalai; 03.09.2013
comment
Я добавил строку в начало своего ответа. - person HalR; 03.09.2013
comment
Да, я изменил кодировку, как уже упоминал выше ... но громкость не изменилась :( - person Android_kalai; 03.09.2013
comment
Вы устанавливаете громкость на 0 с помощью этой строки: [audioInputParams setVolume: 0.0 atTime: kCMTimeZero]; так что вы ничего не услышите. Вам нужно, чтобы значение было больше 0,0, но меньше или равнялось 1,0, чтобы что-то слышать. - person HalR; 03.09.2013
comment
да, вы правы .. Вместо того, чтобы установить громкость на 0,0, я слышу полный звук, это проблема. :( - person Android_kalai; 03.09.2013