• 基于StreamingKit的音频播放器


    一个基于StreamingKit第三方框架简单的音频播放器

    GitHub开源框架:https://github.com/tumtumtum/StreamingKit

    主要功能

    - 上一首、下一首、暂停、播放、切换播放模式、操作进度条等。

    如图所示

    • 封装STKAudioPlayer播放器
    /** 单例 */
    + (instancetype)shareInstance;
    
    /** 播放指定音频  
        @param URL 音频地址 
    */
    - (void)ym_playWithURL:(NSURL *)URL;
    
    /** 暂停 */
    - (void)ym_pause;
    
    /** 继续 */
    - (void)ym_resume;
    
    /** 结束播放 */
    - (void)ym_stop;
    
    /** 从指定时间开始播放  
        @param time 开始播放的时间 
    */
    - (void)ym_seekToTime:(double)time;
    • STKAudioPlayer的代理方法
    • 音频开始播放
    - (void)audioPlayer:(STKAudioPlayer *)audioPlayer didStartPlayingQueueItemId:(NSObject *)queueItemId {
        YMLog(@"开始播放 : %@",queueItemId);
    }
    • 当一个项目已完成缓冲时引发(可能是也可能不是当前正在播放的项目)
    • 如果在播放器上调用seek,则同一项可能引发多次此事件
    - (void)audioPlayer:(STKAudioPlayer *)audioPlayer didFinishBufferingSourceWithQueueItemId:(NSObject *)queueItemId {    
        YMLog(@"缓冲完成 : %@",queueItemId);
    }
    • 当播放器状态改变时触发
    - (void)audioPlayer:(STKAudioPlayer *)audioPlayer stateChanged:(STKAudioPlayerState)state previousState:(STKAudioPlayerState)previousState {    
        YMLog(@"播放器状态改变:%@",@(state));
    }
    • 当音频播放结束时触发
    - (void)audioPlayer:(STKAudioPlayer *)audioPlayer didFinishPlayingQueueItemId:(NSObject *)queueItemId withReason:(STKAudioPlayerStopReason)stopReason andProgress:(double)progress andDuration:(double)duration {
        YMLog(@"播放完成:%@",queueItemId);
    }
    • 当发生意外且可能无法恢复的错误时引发(通常最好重新创建STKAudioPlauyer)
    - (void)audioPlayer:(STKAudioPlayer *)audioPlayer unexpectedError:(STKAudioPlayerErrorCode)errorCode {
      YMLog(@"播放错误:%@",@(errorCode));
    }
    • 可选实现从STKAudioPlayer获取日志信息(内部用于调试)
    - (void)audioPlayer:(STKAudioPlayer *)audioPlayer logInfo:(NSString *)line {    
        YMLog(@"播放日志:%@",line);
    }
    • 清除队列中的项时引发(通常是因为调用play、setDataSource或stop)
    - (void)audioPlayer:(STKAudioPlayer *)audioPlayer didCancelQueuedItems:(NSArray *)queuedItems {    
    
    }
    • 音频开始播放是定义了一个开始播放的block,这里主要用于音频开始播放的时候旋转动画
    @property (nonatomic, copy, nullable) void(^startPlayBlock)(NSURL *URL);
    player.startPlayBlock = ^(NSURL * _Nonnull URL) {        
        YMLog(@"开始播放:%@",URL);       
        [ws.iconView resumeRotate]; //开始转动封面        
        [ws.phonePlayerColView startPlayingMusic];        
        [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTitle" object:nil userInfo:@{@"name":ws.phonePlayerColView.currentModel.name}];        
        //更新图片        
        ws.iconView.imageUrl = ws.phonePlayerColView.currentModel.imageUrl;
        };
    • 音频结束后,停止动画
    @property (nonatomic, copy, nullable) void(^finishPlayBlock)(NSURL *URL);
    player.finishPlayBlock = ^(NSURL * _Nonnull URL) {        
        YMLog(@"播放完成:%@",URL);        
        [ws.iconView stopRotating];//停止动画
        };
    • 需要时时更新音频的时长,进度,播放状态等一些信息,取出然后赋值到页面上,这里使用block回传数据 
    player.refreshBlock = ^(double duration, double progress, STKAudioPlayerState state, STKAudioPlayerErrorCode errorCode) {        
        YMLog(@"时长:%f",duration);        
        YMLog(@"进度:%f",progress);        
        YMLog(@"播放状态:%ld",(long)state);
        YMLog(@"播放error:%ld",(long)errorCode);
    }

    Demo连接:https://github.com/AndrewLJJ/MusicPlayer

    掘金地址:https://juejin.im/post/5dc0da0ce51d4529ef3ef823

  • 相关阅读:
    开源项目
    获取手机剩余空间工具类
    圆形图片
    gridview添加header
    Eclipse中10个最有用的快捷键组合
    那些年不错的Android开源项目(转)
    Android 获取系统或SDCARD剩余空间信息(转)
    android之 Activity跳转出现闪屏
    解决Activity启动黑屏及设置android:windowIsTranslucent不兼容activity切换动画问题
    Android studio 导入工程 出现错误
  • 原文地址:https://www.cnblogs.com/ljj-Andrew-519/p/11818862.html
Copyright © 2020-2023  润新知