Code Monkey home page Code Monkey logo

ihoudf / dfplayer Goto Github PK

View Code? Open in Web Editor NEW
580.0 580.0 113.0 75.42 MB

简单灵活的iOS音频播放组件。基于AVPlayer,支持本地和远程音频播放,具有缓存、耳机线控、锁屏和控制中心信息展示、单曲顺序随机播放、倍速播放、歌词同步等音频播放器功能,DFPlayer封装了缓冲条、进度条、播放暂停按钮、下一首按钮、上一首按钮、播放模式按钮、歌词同步的tableview等UI控件,一行代码布局即可实现相应功能。

License: MIT License

Objective-C 99.60% Ruby 0.40%

dfplayer's People

Contributors

ihoudf avatar liufannnn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dfplayer's Issues

下载音频

有下载接口可以调用吗?可以查看下载进度

内存下不来

当点上一首或下一首时,内存一直在涨,下不来,有歌词的歌曲尤为明显

AVAudioSessionInterruptionNotification 的监听, 执行会有延时?

操作步骤如下:
1 - 使用DF播放一个MP3
2 - 切到后台, 使用其他播放器中断DF的播放
3 - 暂停其他播放器的播放, 回到DF的前台

大约 20s后才会执行到, NSLog(@"----------------------:结束打断"); 这里

  • (void)df_playerAudioBeInterrupted:(NSNotification *)notification {

    NSInteger InterruptionType = [[notification.userInfo objectForKey:AVAudioSessionInterruptionTypeKey] integerValue];
    switch (InterruptionType) {
    case AVAudioSessionInterruptionTypeBegan: {
    NSLog(@"----------------------:开始打断");
    }
    break;
    case AVAudioSessionInterruptionTypeEnded: {
    NSLog(@"----------------------:结束打断");
    }
    break;
    default:
    break;
    }

架构优化

你好,感谢大神的分享。功能齐全,提个小建议,可以再做些模块解耦么?UI 组件和业务逻辑做拆分,分层分模块,方便高度定制或者只用其中小部分功能,哈哈。

df_seekToTime

设置这个方法后,时间进度条不会自动更新了。一直为0

Swift集成中遇到的问题

DFPlayer().shared().category在Swift里面被转化成了NSString类型,而Swift里面AVAudioSessionCategory是一个枚举类型

记录一种播放时没有声音的情况。

我这边是一个录音播放,上传,然后回显的逻辑。
在我的录音功能中修改了
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; [[AVAudioSession sharedInstance] setActive:YES error:nil];
然后DFPlayer中因为是在初始化的时候设置的这个Category
所以在录音开启后,DFPlayer中的Category没有改变,因此建议在播放的时候重置一下这个
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [[AVAudioSession sharedInstance] setActive:YES error:nil];

logic

if ([DFPlayerTool networkStatus] == DFPlayerNetworkStatusUnknown ||
[DFPlayerTool networkStatus] == DFPlayerNetworkStatusNotReachable){
if (cachePath){//有缓存,播放缓存
[self loadPlayerItemWithURL:[NSURL fileURLWithPath:cachePath]];
}else{//无缓存,提示联网
/// 这里有个逻辑漏洞, 前一个音频缓存完毕可以播放, 若此时断网, 则播放下一个音频的时候, 会播放第一个缓存完毕的音频
[self loadPlayerItemWithURL:self.currentAudioModel.audioUrl];
[self df_getStatusCode:DFPlayerStatusNoNetwork];
}
}

播放关不掉,检测进度的代理不执行

1.写了暂停,再播放列表其他经常会无法暂停掉上一个播放的音频 ,同时播放好几个
2.想要显示当前正在播放的时间,这个代理方法有时候执行有时候不执行- (void)df_player:(DFPlayer *)player progress:(CGFloat)progress currentTime:(CGFloat)currentTime{
3.返回上个界面有时候还会播放,-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[self.player df_pause];
[self.player df_deallocPlayer];
}
这样写也不管用

发现了demo中的bug 希望大神能够解决

大神您好, 我看了您的demo 或许是因为太喜欢的缘故 所以平时总拿出来看看, 目前我在做音频的项目,准备用DFPlayer 但是我发现了两个bug 希望得到您的回复
1): 快速(能多快就多快,暴力测试)点击下一曲的时候 出现了crash
日志:*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[DFPlayerLyricsTableview _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:usingPresentationValues:]: row (0) beyond bounds (0) for section (0).'
*** First throw call stack:

2):还是快速点击切换歌曲 控制台会很大频率出现如下log
Task <...>.<1> load failed with error Error Domain=NSURLErrorDomain Code=-999
然后卡屏 过一会才能继续播放,

  1. 我在网上查了资料 猜测可能是线程堵塞的问题

耳机线控功能设置为NO后,和其它播放软件切换后,出现问题

//是否需要耳机线控功能
[DFPlayer shareInstance].isRemoteControl = NO;
耳机线控功能设置为NO后,进行后台进行播放,然后打开其它的音乐播放软件播放音乐,再切换到我的软件播放音乐,然后退出到后台进行播放,到这一步都是正常的,等到这一首播放完成要播放下一首时,不播放了,点击进行前台,又可以播放了;
之前这个问题就一直存在了,到后台播放下一首时播放不了,

我设置[DFPlayer shareInstance].isRemoteControl = YES;时是没有问题的,我现在不需要显示锁屏的控制台,所以设置为NO,但是就出现了上面的问题,希望能看一下,尽快给我一个回复,谢谢。

快速切换歌曲,错误.

快速切换歌曲,会导致某首歌曲创建大小为0的缓存.mp3文件.再次播放该歌曲,会直接读取缓存文件,触发错误.

目前的使用反馈

1.播放状态
当不循环播放的时候,一个音频播放完成,播放器的状态没有改变为 播放结束,还是播放中的状态
2.释放播放器
df_deallocPlayer方法里面没有重置当前播放的model,这个不好说是问题,可以当成记录最近播放的音频

Cannot remove an observer产生的崩溃

Cannot remove an observer <DFPlayer 0x2811e1700> for the key path "status" from <AVPlayerItem 0x282ff5220> because it is not registered as an observer.
(null)

_playerItem removeObserver的时候发生的崩溃,这种崩溃怎么来查呢。涉及到的具体代码:

  • (void)setPlayerItem:(AVPlayerItem *)playerItem{
    if (_playerItem == playerItem) {
    return;
    }
    if (_playerItem) {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
    [_playerItem removeObserver:self forKeyPath:DFStatusKey];
    [_playerItem removeObserver:self forKeyPath:DFLoadedTimeRangesKey];
    [_playerItem removeObserver:self forKeyPath:DFPlaybackBufferEmptyKey];
    [_playerItem removeObserver:self forKeyPath:DFPlaybackLikelyToKeepUpKey];
    }
    _playerItem = playerItem;
    if (playerItem) {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(df_playerDidPlayToEndTime:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
    [playerItem addObserver:self forKeyPath:DFStatusKey options:NSKeyValueObservingOptionNew context:nil];
    [playerItem addObserver:self forKeyPath:DFLoadedTimeRangesKey options:NSKeyValueObservingOptionNew context:nil];
    [playerItem addObserver:self forKeyPath:DFPlaybackBufferEmptyKey options:NSKeyValueObservingOptionNew context:nil];
    [playerItem addObserver:self forKeyPath:DFPlaybackLikelyToKeepUpKey options:NSKeyValueObservingOptionNew context:nil];
    }
    }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.