iOS Github开源框架 StreamingKit 网络音乐

作者: 梁同桌 | 来源:发表于2016-07-20 23:54 被阅读3876次

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

    Jukebox 这个框架是Swift版本
    GitHub: :https://github.com/teodorpatras/Jukebox


    • 一般我们需要一个播放音乐流的框架基本功能有
      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
    
    以上已经把一个音乐的第三方框架基本的使用总结!

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

    如果有什么问题,可以微薄“梁同桌”私信我。留言都行

    相关文章

      网友评论

      • 幻想无极:问下可监听播放时候声音的波动不
      • 叶落似晚秋:你好,请问这个框架怎么播放本地文件呢
        梁同桌:@叶落似晚秋 本地url 给过去就好
      • 涂川iOS:博主我就一个问题,正在播放的时候,可以监听到正在播放的这首歌曲的缓存进度吗?其他的都搞定了,就这个问题没有解决
        0271fb6f797c:@梁同桌 有什么别的方法吗?没办法展示缓存,用户体验不太好啊
        梁同桌:@涂川 这个比较尴尬,没有提供这个API
      • 最后还是个农:您好,请问下这个第三方对音频格式有什么限制?支持无损格式吗?
        liwb:wav格式不支持, 有什么好的解决方法吗 我项目集成过了才发现这个问题,大坑。。。
        最后还是个农:@梁同桌 好的,谢谢,我测试下
        梁同桌:wav 格式不支持, 你可以测试。 文档上支持 mp3 aac
      • 可惜你不是我的双子座:老兄,我相就像网易云音乐一样,退出播放界面,去到任何界面音乐都在播放,怎么监听?
        liwb:我感觉 封装的音乐播放的类 可以使用 单例 任何界面都可以 拿到对象 ,至于界面 可以添加在keyWindow上 这样会浮在最上层,个人一点想法~
        可惜你不是我的双子座:@梁同桌 不是很明白!:sweat:
        梁同桌:强引用当前播放页面
      • 可惜你不是我的双子座:能否加个QQ ,有几个问题想请教一下!364601065
        梁同桌:1.怎么让他循环播放!
        2.怎么让他播放下一首!
        谢谢回答 😄


        这是控制层面做的事情:
        1.循环:当前歌曲播放时间与歌曲总时间比较,快相等时,让当前播放时间变为0。 就可以实现循环了。
        2.播放下一首:当前歌曲播放时间与歌曲总时间比较,快相等时,再一次给audioPlayer复制下一首音乐的url
        [audioPlayer play:@"http://mxd.766.com/sdo/music/data/3/m10.mp3&quot;];

        这是简单的方法。如果需要深入了解,官方demo里队列能帮到你

        梁同桌:邮箱 liangya363138911@126.com ,在这里留言也行。 这样可以帮助更多的人
      • Meb_sunny:pod 成功之后 运行报linker command failed with exit code 1 (use -v to see invocation) 希望解答一下
        Meb_sunny:@梁同桌 重新pod install 好了
        梁同桌:
        https://segmentfault.com/q/1010000005139811
        你看一下, 我也具体不知道。 - -
      • 7emini:你好作者,文章中网易云开发者博客链接地址打不开呢,请问变更了嘛?
        7emini:@梁同桌 OK, 感谢回复:grin:
        梁同桌:http://msching.github.io 可以访问啊- -。
      • 左轮没有瞄准镜:所以请问这个怎么添加本地缓存....
        左轮没有瞄准镜:@梁同桌 po主再出个怎么添加本地缓存的教程吧:kissing_heart: :cry:
        梁同桌:要自己写缓存 - -
      • iOS阿能:请问这个框架怎么弄缓存呢
        可惜你不是我的双子座:@SunnyPig 不知道
        7emini:@梁同桌 你好, 这个库可以自定义缓存逻辑嘛
        梁同桌:什么缓存
      • 梁同桌:@Imout 在代理方法,当一个项目完成里

        写audioPlayer play:@"http://mxd.766.com/sdo/music/data/3/m10.mp3&quot;];
      • Imout:请问这个框架如何实现单曲循环呢?
        liwb:监听播放结束后 调用
        [self.audioPlayer seekToTime:0]
        7emini:去GitHub上下载源代码, 有单曲循环的功能

      本文标题:iOS Github开源框架 StreamingKit 网络音乐

      本文链接:https://www.haomeiwen.com/subject/phwvjttx.html