在这里给AVPlayer播放在线音频文件作个记号
1.在H文件中初始:
==============
AVPlayer *mp3Player;
AVPlayerItem *mp3PlayerItem;
id audioMix;
id volumeMixInput;


2.在MM文件中:
//作品播放
    NSURL * songUrl = [ NSURL URLWithString: userInfo. songUrl];
    AVURLAsset *movieAsset    = [[[ AVURLAsset alloc] initWithURL:songUrl  options: nil] autorelease];

      self. mp3PlayerItem = [ AVPlayerItem playerItemWithAsset:movieAsset];
     [ self .  mp3PlayerItem addObserver : self forKeyPath : @"status" options : 0 context : NULL ];
      self .  mp3Player = [ AVPlayer playerWithPlayerItem : self .  mp3PlayerItem];
      AVPlayerLayer *playerLayer = [ AVPlayerLayer playerLayerWithPlayer: self. mp3Player];
      playerLayer. frame = self. view. layer. bounds;
      playerLayer.videoGravity = AVLayerVideoGravityResizeAspect ;
      [ self. view. layer addSublayer:playerLayer];
       [ self .  mp3Player setAllowsExternalPlayback : YES ];
    
3.实现代理方法:
- ( void)observeValueForKeyPath:( NSString *)keyPath ofObject:( id)object change:( NSDictionary *)change context:( void *)context
{
    if ([keyPath isEqualToString: @"status"])
    {
        if (AVPlayerItemStatusReadyToPlay == self .  mp3Player. currentItem . status )
        {
            [ self. mp3Player  play];
        }
    }
}

4.现实音量调整
-( void) setVolume:( float)volume{
    // 作品音量控制
    NSMutableArray *allAudioParams = [NSMutableArray array ];
    AVMutableAudioMixInputParameters *audioInputParams =[AVMutableAudioMixInputParameters audioMixInputParameters ];
    [audioInputParams setVolume:volume atTime: kCMTimeZero];
    [audioInputParams setTrackID: 1];
    [allAudioParams addObject:audioInputParams];
    audioMix = [AVMutableAudioMix audioMix ];
    [ audioMix setInputParameters:allAudioParams];
    [ self .  mp3PlayerItem  setAudioMix :audioMix ]; // Mute the player item
    
    [ avAudioPlayer setVolume:volume];
}

5.取得播放时间
- ( NSTimeInterval) playableDuration
{
    AVPlayerItem * item = self . worksPlayer .currentItem ;
    if (item. status == AVPlayerItemStatusReadyToPlay ) {
        return CMTimeGetSeconds ( self . worksPlayer .currentItem .duration );
    }
    else
    {
        return (CMTimeGetSeconds ( kCMTimeInvalid ));
    }
}
- ( NSTimeInterval) playableCurrentTime
{
    AVPlayerItem * item = self . worksPlayer .currentItem ;
    
    if (item. status == AVPlayerItemStatusReadyToPlay ) {
        NSLog ( @"%f\n" ,CMTimeGetSeconds ( self . worksPlayer . currentItem .currentTime ));
        if (! playBeginState &&CMTimeGetSeconds ( self . worksPlayer . currentItem .currentTime )==CMTimeGetSeconds ( self . worksPlayer . currentItem . duration )) {
            [ streamer stop];
        }
        playBeginState = NO ;
        return CMTimeGetSeconds ( self . worksPlayer . currentItem .currentTime );
    }
    else
    {
        return (CMTimeGetSeconds ( kCMTimeInvalid ));
    }
}