如何在播放无线电流时设置AVPLayer的音量

时间:2012-11-25 21:35:11

标签: ios streaming avfoundation volume avplayer

我正在使用AVPlayer播放广播流。 对于初始化播放器我正在使用下一个代码:

self.asset = [AVAsset assetWithURL:self.url];
self.item = [AVPlayerItem playerItemWithAsset:self.asset];
self.player = [AVPlayer playerWithPlayerItem:self.item];

我已阅读此问题Adjusting the volume of a playing AVPlayer

我试图用滑块值设置音量

- (void)setVolume:(float )volume
{
    _volume = volume;
    NSArray *audioTracks = self.asset.tracks;
    NSMutableArray *allAudioParams = [NSMutableArray array];

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

    AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
    [audioMix setInputParameters:allAudioParams];
    NSLog(@"%@", self.player.currentItem);
    NSLog(@"%f", volume);
    [self.player.currentItem setAudioMix:audioMix];
}

我也试图设置

[audioInputParams setVolume:volume atTime:self.player.currentTime];

但该数组中没有任何曲目(self.asset.tracks), 它对音量没有任何影响。 (我也无法获得任何元数据), 我无法使用AVAudioPlayer通过url播放音频流

  

AVAudioPlayer类的一个实例,称为音频播放器,   提供文件或内存中音频数据的播放。

     

Apple建议您使用此课程进行音频播放,除非您   正在播放从网络流捕获的音频或需要非常低的音频   I / O延迟。

我在考虑使用该代码https://github.com/DigitalDJ/AudioStreamer/downloads 用于播放无线电流,但我不知道如何使用Audiotoolbox设置音量。

请帮帮我!谢谢!

1 个答案:

答案 0 :(得分:2)

我尝试了很多解决方案,但最好的方法是实现一个实例ov MPVolumeVIew:

 self.myViewVolume = [[MPVolumeView alloc] initWithFrame:CGRectMake(20, 330, 280, 50)];
[self.myViewVolume sizeToFit];
[self.view addSubview:self.myViewVolume];

您可以将其添加到您想要的任何UIView,只需将类更改为MPVolumeView即可 不要忘记添加MediaPlayer框架。

如果您想从流中获取元数据,则需要执行以下操作:

 [playerItem addObserver:self forKeyPath:@"timedMetadata" options:NSKeyValueObservingOptionNew context:NULL];

使用此功能,您只需将信息添加到任何UILabel

即可