【问题标题】:iPhone AVAudio Player Volume issueiPhone AVAudio 播放器音量问题
【发布时间】:2013-09-02 05:31:13
【问题描述】:

我是 iPhone 应用程序开发的初学者。但我有 android 应用程序开发方面的知识,我的第一个 i 电话项目是使用 AV 音频播放器流式播放 URL,我正在使用以下代码来流式传输 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];

它工作正常,我正在使用[player setvolume:0.5] 使用 UI 滑块进行音量控制,我的应用程序崩溃了..请给我建议...

【问题讨论】:

  • 这将有助于获得一些关于它为什么/如何崩溃的控制台输出。
  • -[AVPlayer setVolume:]:无法识别的选择器发送到实例 0x8375c20 2013-09-02 11:45:09.753 VolumeControl[1577:c07] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[AVPlayer setVolume:]: unrecognized selector sent to instance 0x8375c20' 这个错误信息我得到了
  • 请就我的问题给我建议..我真的大部分时间都花在它上面..我期待您的解决方案....
  • 对不起,我今天早上刚起床。

标签: iphone


【解决方案1】:

这听起来可能违反直觉,但您没有使用 AVPlayer 设置音频。您必须使用 AVPlayerItem 的音频混合来更改音量,而不是使用播放器。

这是一个关于如何做到这一点的示例from another answer, by Jesse Crossen

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。

【讨论】:

  • 我只想再澄清一下。在您的回答中,您在第一行指定资产。那是什么?如何在我的项目中声明资产??
  • Add 将这些行添加到我的项目中并分配 AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];但什么也没发生。音量没有改变
  • 我在答案前面加了一行。
  • 是的,我修改了上面提到的编码..但音量没有改变:(
  • 您正在使用以下行将音量设置为 0:[audioInputParams setVolume:0.0 atTime:kCMTimeZero];所以你不会听到任何声音。您需要使该值高于 0.0 但小于或等于 1.0 才能听到任何声音。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多