视频iOS音视频大全

基于FreeStreamer实现音频播放器

2018-03-24  本文已影响1094人  咖啡bu加糖

前段时间根据产品经理的要求,要把H5播放音频的换成App原生的播放器,开始查了一些相关知识和博客就开始自己写了一个音频框架,不写不知道,写完才知道,缓存资源和播放的时候会遇到各种问题,各种问题,各种问题ing...刚开始自己和开发小伙伴测试的时候甚至还有崩溃发生,这吓得我有点头皮发麻...然后自己在没事的时候搜索了各大博客,也问了很多人,然后就有了现在音频播放器模型,没用的的话说的有点多了,下面进入正题

主要音频框架

简单介绍下各音频框架的优点和不足

FreeStreamer

MobileVLCKit

StreamingKit

其实上面的第二句话是复制的,因为找音频播放器实现的博客和框架找了很多,第二个发现了FreeStreamer,就没去做过多的其他框架调研和Demo实现,其实就像小孩子看见好吃的东西一样,发现好吃的当然不会再挪动一步,除非发现更多好吃的,哈哈哈,发现更好的框架,就果断验证是否支持项目所需要的需求,虽然验证功能也把自己整的焦头烂额,但是结果是美好的,因为前面介绍的功能都能用FreeStreamer这个框架实现,下面介绍一下FreeStreamer的主要功能和自己遇到的坑

FreeStreamer的主要功能

- (FSAudioStream *)audioStream {
    
    if (_audioStream == nil) {
    
        _audioStream = [[FSAudioStream alloc] init];
        _audioStream.strictContentTypeChecking = NO;
        _audioStream.defaultContentType = @"audio/mpeg";
    }
    return _audioStream;
}
[self.audioStream playFromURL:audioUrl];
[self.audioStream pause];
[self.audioStream stop];
[self.audioStream pause];
FSStreamPosition pos = {0};
pos.position = progress;
[self.audioStream seekToPosition:pos];
FSStreamPosition cur = self.audioStream.currentTimePlayed;
self.controlView.value = cur.position
UInt64 totalBufferedData =  self.audioStream.prebufferedByteCount;
float bufferedDataFromTotal = (float)totalBufferedData / self.audioPlayer.audioStream.contentLength;
cacheValue = bufferedDataFromTotal;
FSStreamPosition end = self.audioStream.duration;
totalTime = [NSString stringWithFormat:@"00:%02i:%02i", end.minute, end.second];
FSStreamPosition cur = self.audioStream.currentTimePlayed;
currentTime = [NSString stringWithFormat:@"00:%02i:%02i", cur.minute, cur.second];
[self.audioStream setOnStateChange:^(FSAudioStreamState state) {
    NSLog(@"状态改变");
}];
 self.audioStream.onFailure = ^(FSAudioStreamError error, NSString *errorDescription) {
    NSLog(@"音频加载失败");
};
[self.audioStream setOnCompletion:^{
    NSLog(@"当前音频播放完成");
}];
if (value == 0)  value = 0.001;
if (value == 1)  value = 0.999;
self.audioPlayer.progress = value;

后记:demo涉及的音频购买问题,所以只提供1-2个付费音频链接方便测试按钮是否可用等等逻辑,免费音频链接较多,可以疯狂进行上一曲下一曲功能测试,如果网络够好,随便点击,不会崩溃,哈哈哈,最后感谢一下 GKAudioPlayerDemo 的作者QuintGao,播放器实现的设计一些控件和是参考人家的demo,对此表示感谢,其实更多部分还是按照我们App的需求来进行的,文字不算太多,主要功能请参考Demo如有不足,希望大家不吝赐教,主要是轻喷,毕竟我还在爬坑,框架链接和参考链接已经附上,如有问题,可以找我交流一下

最后放上俩张图片和Demo链接展示自己的劳动成果
Demo链接

音频播放器.png 音频播放器加载音频列表.png
上一篇 下一篇

猜你喜欢

热点阅读