播放本地和网络流媒体音频

我分别使用了url来播放在线歌曲和本地文件,都可以获得很好的支持,比如下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

-(void)setURL:(NSURL *)theURL{
//设定播放路径
AVAsset *asset = [AVURLAsset URLAssetWithURL:theURL options:nil];
AVPlayerItem *anItem = [AVPlayerItem playerItemWithAsset:asset];
if (thePlayer.currentItem) {
[thePlayer replaceCurrentItemWithPlayerItem:anItem];
}else{
thePlayer = [AVPlayer playerWithPlayerItem:anItem];
}
//监听播放时间变化
[thePlayer removeTimeObserver:playbackObserver];
CMTime interval = CMTimeMake(1, 1);
AVPlayerItem *theItem=thePlayer.currentItem;
playbackObserver = [thePlayer addPeriodicTimeObserverForInterval:interval queue:dispatch_get_current_queue() usingBlock:^(CMTime time) {
durationTime=CMTimeGetSeconds(theItem.duration);
currentTime=CMTimeGetSeconds(theItem.currentTime);
//KVO
[self setValue:[NSNumber numberWithFloat:currentTime] forKey:@"currentTime"];
//判断暂停/播放
if (thePlayer.rate == 1.0) {
playingStatue=YES;
} else {
playingStatue=NO;
}
}];
}

输入的URL可以是一个网络链接,也可以是本地文件的路径,使用的时候用这个set url,然后[myPlayer play];就好了

切换歌曲

换一首歌曲播放的时候,不需要再创建一个AVPlayer对象,只需要:

1
2
3
4
5
6
7
8
9

if (thePlayer.currentItem) {
[thePlayer replaceCurrentItemWithPlayerItem:anItem];
}else{
thePlayer = [AVPlayer playerWithPlayerItem:anItem];
}

监控播放时间变化

一般播放歌曲的时候,需要时刻知道已播放时长,比如用于进度条的展示。我经历了三次实现方法,由原始到现在的比较好的方法

(1)播放器用一个NSTimer每隔1秒获取一次播放时间,进度条用一个NSTimer每隔一秒获取一次播放器的播放时间。//用两个Timer

(2)播放器用一个NSTimer每隔1秒获取一次播放时间,利用KVO让进度条监听播放时间的变化//用一个Timer

(3)播放器用addPeriodicTimeObserverForInterval设定每隔1秒监控播放时间变化,利用KVO让进度条监听播放时间的变化//优雅了许多

实现方法,要注意加了监听,就要删除监听:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

//监听播放时间变化
[thePlayer removeTimeObserver:playbackObserver];
CMTime interval = CMTimeMake(1, 1);
AVPlayerItem *theItem=thePlayer.currentItem;
playbackObserver = [thePlayer addPeriodicTimeObserverForInterval:interval queue:dispatch_get_current_queue() usingBlock:^(CMTime time) {
durationTime=CMTimeGetSeconds(theItem.duration);
currentTime=CMTimeGetSeconds(theItem.currentTime);
//KVO
[self setValue:[NSNumber numberWithFloat:currentTime] forKey:@"currentTime"];
//判断暂停/播放
if (thePlayer.rate == 1.0) {
playingStatue=YES;
} else {
playingStatue=NO;
}
}];

判断播放暂停状态

没有专门的pause或者playing状态,需要手工记录,利用rate属性:

1
2
3
4
5
6
7
8
9

if (thePlayer.rate == 1.0) {
playingStatue=YES;
} else {
playingStatue=NO;
}

AVPlayer的使用相关推荐

  1. [iOS]调和 pop 手势导致 AVPlayer 播放卡顿

    作者 NewPan 关注 2017.07.15 14:24* 字数 3110 阅读 749评论 8喜欢 17 声明:我为这个框架写了四篇文章: 第一篇:[iOS]UINavigationControl ...

  2. iOS: ios视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontroller、ffmpeg-AVPlayer)...

    介绍: 和音频播放一样,ios也提供个很多的API.如mediaPlayer.framework下的MPMediaPlayerController.AVFounditon.framework下的AVP ...

  3. AVPlayer支持VSFilter啦, 也就支持字幕啦

    2019独角兽企业重金招聘Python工程师标准>>> 哈哈, 以前研究dshow的时候, 研究过VSFilter, 在以dshow为基础的播放器中(比如暴风, 射手等等...), ...

  4. AVPlayer播放视频

    2019独角兽企业重金招聘Python工程师标准>>> // //  ViewController.m //  04-AVPlayer播放视频 // //  Created by鹿微 ...

  5. AVPlayer 之avcore模块

    2019独角兽企业重金招聘Python工程师标准>>> avcore模块介绍 avcore事实上它只是一个对外的c++类接口, 目前基于windows实现. 在avcore中, av ...

  6. boost avplayer

    from  http://avplayer.org/ 开源了许多代码, 可以看看其中需要的部分. http, avbot: rip && xmpp p2p 播放器

  7. linux p2p视频播放器,avplayer: 一个基于FFmpeg、libtorrent的P2P播放器实现.

    一直以来, 在多媒体播放器这块, 即使目前有许多开源的播放器项目, 但要写一个播放器仍然是件非常困难的事, 如果在windows上你有可能需要熟悉DShow, 另外的话, 你需要学习一堆开源项目(比如 ...

  8. iOS AVPlayer 简单应用

    //1 AVPlayerViewController *avvc = [[AVPlayerViewController alloc] init]; //2 avvc.player = [[AVPlay ...

  9. android ios av tv,iOS使用AVPlayer制作战旗TvDEMO OC版

    在视频教学中看到一个别人写的战旗TvDEMO写得很好,于是自己动手试着制作一个. 效果如下图所示 主界面 竖屏播放 横屏播放 点击出现工具栏 视频播放使用的是AVPlayer,具体的使用方式如下 // ...

  10. iOS开发:AVPlayer实现流音频边播边存

    1. AVPlayer简介AVPlayer存在于AVFoundation中,可以播放视频和音频,可以理解为一个随身听AVPlayer的关联类:AVAsset:一个抽象类,不能直接使用,代表一个要播放的 ...

最新文章

  1. 小白都能看得懂的java虚拟机内存模型
  2. java 创建5个线程_Java创建线程的三种方式
  3. linux connect自动重连,Linux系统中使用sshfs挂载远程主机的目录到本地系
  4. Qt入门之基础篇 ( 一 ) :Qt4及Qt5的下载与安装
  5. 关于Jquery中ajax方法data参数用法的总结
  6. python keyerror_盘点Python 初学者最容易犯的10大错误!你中招了吗?
  7. js 函数实参列表arguments和形参的那点事儿
  8. wamp mysql中文_解决wampServer 中MySQL插入中文乱码问题
  9. [家里蹲大学数学杂志]第392期中山大学2015年泛函分析考博试题回忆版
  10. matlab 拟合函数 调用,matlab拟合函数
  11. 【渝粤题库】广东开放大学 期货与期权 形成性考核
  12. 毕业设计-基于SpringBoot体育运动场馆管理系统+开题报告-任务书等
  13. Elaine的oi之路
  14. 【安卓源码】简单分析smaps节点
  15. 1150 Travelling Salesman Problem (25 分)(分析题目,细节处理)
  16. 【读书联动】认知觉醒:开启自我改变的原动力
  17. vscode的seting配置
  18. Python基础篇:你好,世界!
  19. 清华大学计算机与科学分数线,清华大学各地录取情况及调档线一览
  20. 不插电的计算机科学什么意思,请用“不插电的计算机科学”的思想方法,将二进制数(01110100)2快速.._简答题试题答案...

热门文章

  1. 【网易】牛客网2019校招真题(编程题)
  2. 家教日记---7.17.
  3. Android AndroidManifest 清单文件以及权限详解
  4. 通讯录排序(结构嵌套)
  5. SQL语句中union all和union的区别以及用法
  6. “微笑涛声”微信公众号正式上线运行
  7. 转:会讲故事,是一种核心竞争力
  8. 计算机挂载磁盘阵列,史上最简单的RAID(磁盘阵列)教程!没有之一
  9. 计算机ui答辩,交互设计ui设计毕业论文答辩
  10. Web——企业信息文档管理系统