2013-05-16 39 views
0

嗨,我是在IOS新的,我想使一个应用程序,玩无线电,因此应用程序工作正常,但是当我试图包括卷到应用程序,这是cruch,给我这个错误:AVAudioPlayer量

[AVPlayer setVolume:]: unrecognized selector sent to instance 0x9d4f500 
2013-05-16 09:34:47.785 RadioFM[22061:12503] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AVPlayer setVolume:]: unrecognized selector sent to instance 0x9d4f500' 

,这里是我使用我的源代码:

在PlayerViewController.h

@interface PlayerViewController : UIViewController 
{ AVAudioPlayer *radioPlayer; IBOutlet UISlider *Volume; } 
- (IBAction)Volume:(id)sender; 

@property (nonatomic,retain) AVAudioPlayer *radioPlayer; 

和PlayerViewController.m:

@synthesize radioPlayer; 

- (void)viewDidLoad 
{ 
    NSString *RadStream=<@Radio stream>; 
    NSURL *url=[NSURL URLWithString:RadStream]; 
    NSError *error; 
    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url]; 
    self.radioPlayer = [AVPlayer playerWithPlayerItem:playerItem]; 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error]; 
    [[AVAudioSession sharedInstance] setActive: YES error: nil]; 
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
    [self.radioPlayer play]; 
    [super viewDidLoad]; 

}

和我有一个滑块视图和滑块我有行动:

- (IBAction)Volume:(id)sender { 
if (self.radioPlayer != nil) 
{ 
    self.radioPlayer.volume = Volume.value; 
} 

}

所以请任何一个能帮助我吗?谢谢你的提前。

+0

检查您的函数的名称,我认为它是'setVolume'。所以disconnet绑定并用'Volume'绑定它。并试试这个改变音量' - (void)sliderValueChanged:(UISlider *)slider {myPlayer.volume = slider.value/100.0; }' – Buntylm

+0

实际上它不是setVolume,并且检查是否真的我只是以编程方式创建了一个新的uislider,并且我调用了上面所写的函数,并且保持给出相同的错误,新的源代码是: 是viewdidload方法我创建一个新的uislider,我称之为上面的方法。 – Hamza

+0

试试这个https://github.com/mattgallagher/AudioStreamer – Buntylm

回答

0

请IBAction为事件是UIControlEventValueChanged

+0

是的,它是UIControlEventValueChanged。如果我试图打印uisilder的值是按预期打印出我的值。 – Hamza

1

首先检查你的函数的我第一次是setVolume觉得这个名字。所以disconnet绑定并绑定与卷。并尝试这种改变音量

- (void)sliderValueChanged:(UISlider *)slider 
{ 
myPlayer.volume = slider.value/100.0; 
} 

并与UIControlEventValueChanged绑定您Silder。 Action

1

首先,你使用的是AVPLayer还是AVAudioPlayer。 我问这个问题的辩论,因为

  • 声明该radioPLayerAVAudioPLayer

    @属性(非原子,保留)AVAudioPlayer * radioPlayer;

  • 和初始化radioPlayerAVPlayer

    self.radioPlayer = [AVPlayer playerWithPlayerItem:playerItem];

如果您打算使用AVAudioPlayer,生活会变得轻松。如果您正在使用AVPLayer使用volume财产

self.radioPlayer.volume = iSlider.value; 

,那么你可以参考这些步骤。没有尝试过,但似乎它已经帮了很多:https://stackoverflow.com/a/6178912/942966

+0

是的你说的是正确的,我宣布radioPLayer为'AVAudioPLayer',我将它初始化为'AVPlayer' cuz' playerWithPlayerItem:playerItem'不适用于'AVAudioPLayer',并且当我试图使用'[[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];'收音机甚至不播放,我不知道'AVPlayer'是否不支持那些流或什么! – Hamza

+0

'AVAudioPLayer'不能用于流媒体。必须使用'AVPlayer'。 因此,请继续并将'radioPlayer'声明为'AVPlayer'。然而,音量不能在AVPlayer中设置,所以改为转到我提到的链接,并尝试使用'AudioMix'来设置 – Roshit

0
self.radioPlayer.volume = Volume.value; 

上面的行没有任何意义。 Volume.value表示setVolume &因为没有这样的方法,所以给出错误。

根据滑块移动赋值是很好的。

+0

根据滑块移动分配值是我试图做的,也是当我试图给音量到硬编码的广播播放器不起作用,例如'self.radioPlayer.volume = 0.8;'。 – Hamza