iOS Github开源框架 StreamingKit 网络音乐流播放器 简单上手(1)

2,118 阅读2分钟
  • StreamingKit

    • 由于苹果官方没有自带的音乐音乐流框架,如果需要播放网络流音频需求,自己写的话要了解很多音频解码之类的,这个讲解很详细msching.github.io 是网易云音乐的开发者,不过短时间很难啃下,所以推荐用第三方框架!
  • 第三方音频框架

  • StreamingKit 是我们要用的

  • GitHub:github.com/tumtumtum/S…
    DOUAudioStreamer 我们国内的豆瓣开源音乐播放器
    GitHub:github.com/douban/DOUA… FreeStreamer
    GitHub:github.com/muhku/FreeS…

以上的Star 都在1000以上, 可以稳定使用

Jukebox 这个框架是Swift版本 GitHub: :github.com/teodorpatra…


  • 一般我们需要一个播放音乐流的框架基本功能有 1.可以播放流音乐(给一个网址URL就能播放) 2.播放-暂停 3.网速过慢,缓存音乐提示 4.获取正在播放音频的时间和一首歌的总时间 5.可以快进到想要播放的时间点

以上是一个框架最基本功能。


第0步,pod把StreamingKit导进来 ####上代码: 第一步AppDelegate.m: #import <AVFoundation/AVFoundation.h>//记得导入自带框架 -(BOOL) application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { //1 初始化苹果播放器,用到一些播放模式。 NSError* error; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error]; [[AVAudioSession sharedInstance] setActive:YES error:&error]; return YES; }

第二步初始化一个控制器:

        #import "ViewController.h"
        #import "STKAudioPlayer.h"

        @interface ViewController () <STKAudioPlayerDelegate>
        {
            STKAudioPlayer* audioPlayer;//保存属性

            NSTimer* timer;

        }
        @end

        @implementation ViewController

        - (void)viewDidLoad {
            [super viewDidLoad];
            ///初始化一个播放器
            audioPlayer = [[STKAudioPlayer alloc] init];
            ///给一个url字符串,并且开始播放音乐
            [audioPlayer play:@"http://mxd.766.com/sdo/music/data/3/m10.mp3"];
            ///设置代理
            audioPlayer.delegate = self;
            [self setupTimer];
        }

        //可以开一个定时器
        - (void)setupTimer
        {
            timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(tick) userInfo:nil repeats:YES];
            [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
        }

        //此方法每0.1秒被定时器调用一次
        - (void)tick
        {
            //获取当前播放音频的总时间时间
            int duration = audioPlayer.duration;
            NSLog(@"%d",duration);

            //当前播放的时间
            int progress = audioPlayer.progress;
            NSLog(@"%d",progress);

            if (audioPlayer.state == STKAudioPlayerStateBuffering){
                NSLog(@"缓冲了");
            }
                
        }
        //暂停和播放
        - (void)playButtonPressed
        {
            if (audioPlayer.state == STKAudioPlayerStatePaused)
            {   //恢复歌曲
                [audioPlayer resume];
            }
            else
            {   //暂停歌曲
                [audioPlayer pause];
            }
        }
        // 改变歌曲播放的进度
        - (void)changedTime
        {
            //手动让歌曲从第10秒开始播放音乐。
            [audioPlayer seekToTime:10];
        }

        /// 当播放器 状态发生改变的时候调用,  暂停-开始播放都会调用
        - (void)audioPlayer:(STKAudioPlayer*)audioPlayer stateChanged:(STKAudioPlayerState)state previousState:(STKAudioPlayerState)previousState
        {
        }
        /// 引发的意外和可能发生的不可恢复的错误,极少概率会调用。  就是此歌曲不能加载,或者url是不可用的
        - (void)audioPlayer:(STKAudioPlayer*)audioPlayer unexpectedError:(STKAudioPlayerErrorCode)errorCode
        {

        }
        ///当一个项目开始播放调用
        - (void)audioPlayer:(STKAudioPlayer*)audioPlayer didStartPlayingQueueItemId:(NSObject*)queueItemId
        {
            
        }
        // 一般是歌曲快结束提前5秒调用
        - (void)audioPlayer:(STKAudioPlayer*)audioPlayer didFinishBufferingSourceWithQueueItemId:(NSObject*)queueItemId
        {
                 
        }
        ///当一个项目完成后,就调用
        -(void) audioPlayer:(STKAudioPlayer*)audioPlayer didFinishPlayingQueueItemId:(NSObject*)queueItemId withReason:(STKAudioPlayerStopReason)stopReason andProgress:(double)progress andDuration:(double)duration
        {

        }

        @end

######以上已经把一个音乐的第三方框架基本的使用总结!

还有后台如何播放音乐?一张图片就明白 www.jianshu.com/p/db07eaab6…