Audio/Movie/Image
Audio
1. 引入AVFoundation 库,此库用于处理音频的播放。
> 使用AVAudioPlayer 播放音频,此类只能播放本地音频文件。对于流媒体(边下边播)的播放使用第三方框架实现,比较优秀的有:AudioStreamer, FreeStreamer
[[AVAudioPlayer alloc] initWithContentsOfURL: error:nil]; // 此处的url是指本地文件的位置,以file:// 开头
> AVAudioPlayer 方法及属性
// 准备播放
[player prepareToPlay];
// 播放
[player play];
// 暂停
[player pause];
// 停止
[player stop];
// 是否在播放
player.playing
// 音频的总时长
player.duration
// 音频的音量
player.volume
// 音频播放的当前时间
player.currentTime
// 音频播放时的循环次数
player.numberOfLoops // 0 表示播放一次,1 表示播放两次,依次类推。任何负数表示无限循环播放。
// 代理对象
player.delegate 协议名称:AVAudioPlayerDelegate
// 协议方法
// 一个音频播放完毕时触发此方法
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
> *若音频需支持后台播放,需以下两步操作:
— 在工程 Info.plist 在根级添加 Required background modes, 再在此项下添加子项:App plays audio or streams audio/video using AirPlay
— 在代码里配置音频会话 AVAudioSession
// 每个ios应用都有一个音频会话
[AVAudioSession sharedInstance]; // 获取唯一实例
// 设置音频会话类别
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; // 告知系统静止其他应用的音频回放,在锁屏或后台时,仍然可以播放。
// 激活会话
[[AVAudioSession sharedInstance] setActive:YES error:nil];
> *若音频需要远程控制,即由设备下方经滑动弹出显示的控制界面
- 在播放音频的控制器视图将要显示时,开始接收远程控制事件
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder]; // 使当前视图成为第一响应者
}
- 在播放音频的控制器视图将要消失时,结束接收远程控制事件
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
}
- 实现父类方法
- (BOOL)canBecomeFirstResponder {
return YES;
} // 此方法默认返回NO
- 实现父类方法,远程事件接收后的处理
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
if (event.type == UIEventTypeRemoteControl) {
switch (event.subtype) {
case UIEventSubtypeRemoteControlPlay:
case UIEventSubtypeRemoteControlPause:
// 播放,暂停音频播放
break;
case UIEventSubtypeRemoteControlPreviousTrack:
// 播放上一首
break;
case UIEventSubtypeRemoteControlNextTrack:
// 播放下一首
break;
default:
break;
}
}
}
2.音频录音 AVAudioRecorder ,使用方式类似AVAudioPlayer,录音保存的路径需设置到沙盒目录下。
Movie
1. iOS 视频播放 MediaPlayer 库中的MPMoviePlayerController, 支持本地视频和网络视频播放. .
> 使用MPMoviePlayerController
// 初始化
[MPMoviePlayerController alloc] initWithContentURL:]
// 设置播放器视图的frame
moviePlayer.view.frame
// *将播放视图添加的父视图上
[superview addSubview:moviePlayer.view]
> MPMoviePlayerController 视频播放时,播放状态等信息不是通过代理来与外界交互,而是通过通知中心。
// 注册通知
// 播放状态改变
[NSNotificationCenter defaultCenter] addObserver: 观察者 selector: 方法 name:MPMoviePlayerPlaybackStateDidChangeNotification object:通知的附加内容 ]
// 播放完成
[NSNotificationCenter defaultCenter] addObserver: 观察者 selector: 方法 name:MPMoviePlayerPlaybackDidFinishNotification object:通知的附加内容 ]
[扩展] 若想定制播放控制,则需设置player.controlStyle = MPMovieControlStyleNone;
2. 除此之外,iOS中还可以使用视频视图控制器播放视频MPMoviePlayerViewController
一般以模态的方式弹出全屏播放。
> 使用 MPMoviePlayerViewController
// 初始化
[[MPMoviePlayerViewController alloc] initWithContentURL:]
// 注册通知
// 播放状态改变,播放完成是暂停
[NSNotificationCenter defaultCenter] addObserver: 观察者 selector: 方法 name:MPMoviePlayerPlaybackStateDidChangeNotification object:通知的附加内容 ]
// 播放完成
[NSNotificationCenter defaultCenter] addObserver: 观察者 selector: 方法 name:MPMoviePlayerPlaybackDidFinishNotification object:通知的附加内容 ]
// 模态方式弹出显示视频播放,不直接将播放起放到父视图控制器上
[self presentMoviePlayerViewControllerAnimated:moviePlayerViewController]
/* 此方法是MPMoviePlayerViewController 对UIViewControler 扩展的模态展示方法,增加了一种下拉展示动画效果。仍然可以使用原来的presentViewController: animated: completion:] */
3. 以上两个播放视频的类,自iOS9开始被弃用,替换使用自iOS8开始的AVKit 下的AVPlayerViewController
Image
1. 使用UIImagePickerController (图片选择器) 选择单个图片
> 初始化
[[UIImagePickerController alloc] init]
> 指定代理对象
imagePicker.delegate 协议名字<UINavigationControllerDelegate,UIImagePickerControllerDelegate>
> 设置资源类型/图片来源
imgPicker.sourceType
— UIImagePickerControllerSourceTypePhotoLibrary // 来自设备图片库
— UIImagePickerControllerSourceTypeCamera // 来自照相机
— UIImagePickerControllerSourceTypeSavedPhotosAlbum // 来自相机保存的相册
> 显示图片选择器
[self presentViewController:imgPicker animated: completion:]
> 实现协议方法获取图片数据
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
/* info 参数中存储了所选择的图片,注意这里只能是单选的。可通过info中的土资源类型UIImagePickerControllerMediaType判断是否是图片,通过UIImagePickerControllerOriginalImage 获取所选图片的原始图片。
在获取图片后,要压缩图片,UIImageJPEGRepresentation(imgData, 0.1)一般采用此种方式,第二个参数“压缩因子”,越小,图片就越小。也可采用UIImagePNGRepresentation(imgData) 方式,这种方式比前者压缩后要大些。 */
2.[扩展] 使用AssetsLibrary或者PhotoLibrary 实现多选图片,也可借助第三方库实现
Audio/Movie/Image的更多相关文章
- html5 audio总结
前言 html5中对音频,视频播放原生支持.最近做了一个音乐播放器,得益于快过年了,才能抽出一点时间来总结一下.总的来说,html5对audio的支持非常强大, 难怪flash要死.浏览器上装播放插件 ...
- 《HTML5》 Audio/Video全解
一.标签解读 <audio> 标签属性 <audio id="media" src="http://www.abc.com/test.mp3" ...
- video/audio在ios/android上播放兼容
1.audio自动播放 <audio src='xxx.mp3' autoplay></audio> 上面是audio标签autoplay属性是自动播放,但是在安卓部分浏览器和 ...
- audio 基本功能实现(audio停止播放,audio如何静音,audio音量控制等)
audio最简单原始的播放.暂停.停止.静音.音量大小控制的功能,注意某些浏览器会有权限无法自动播放噢(video也会如此) <!doctype html> <html> &l ...
- h5自定义audio(问题及解决)
h5活动需要插入音频,但又需要自定义样式,于是自己写咯 html <!-- cur表示当前时间 max表示总时长 input表示进度条 --> <span class='cur'&g ...
- Your app declares support for audio in the UIBackgroundModes key in your Info.plist 错误
提交AppStore时候被拒绝 拒绝原因:Your app declares support for audio in the UIBackgroundModes key in your Info.p ...
- HTML5的Audio标签打造WEB音频播放器
目前,WEB页面上没有标准的方式来播放音频文件,大多数的音频文件是使用插件来播放,而众多浏览器都使用了不同的插件.而HTML5的到来,给我们提供了一个标准的方式来播放WEB中的音频文件,用户不再为浏览 ...
- 微信的audio无法自动播放的问题
一.问题 最近做了一个html5的项目,里面涉及到音乐播放,项目要求音乐进入页面就自动播放,于是我就想到了html5的audio标签,将mp3引入进去. 1.在audio标签里引入了autoplay属 ...
- HTML5 audio与video标签实现视频播放,音频播放
随着互联网的飞速发展以及HTML5的应用,越来越多的项目中用到video,audio当常用标签. <audio> 标签属性 <audio src="song.mp3&quo ...
- android audio无法自动播放
audio无法在android4.4+和ios6以上的版本自动播放,因为他们出于安全考虑,做了限制.必须用户自己手工点击才能播放,程序是控制不了播放的. 整死我了,整整搞了2天,查不出所以然,原来就这 ...
随机推荐
- StrobeMediaPlayback的Javascript桥接
StrobeMediaPlayback是Adobe官方出的流媒体播放器,支持RTMP协议,在项目中运用到了,却在网上怎么都找不到相关资料,可以说是寥寥无几. 无奈之下,稍微看了点源代码,对播放器与JS ...
- BFC(Block Formatting Context)基础分析
W3C官方对于BFC的描述只有3小段,强烈建议想理解BFC的朋友先去看看,链接见文末. 常见的文档流分为:定位流.浮动流.普通流3种.BFC是普通流中的一种. 本文提出3个问题并给出使用BFC来解决这 ...
- 一次rna-seq的过程-知乎live转
数据分析流程 来自知乎孟浩巍的“快速入门生物信息学的”Live,超棒的~ 1.数据质控 首先是质控部分,使用fastqc进行对结果分析. 对于Illumia二代测序的结果质控包括两个方面,去掉测序质量 ...
- 利用反射快速给Model实体赋值
试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有120多个字段.现在合同每一次变更时都需要对合同原始信息进行归档一次,版本号依次递增.那么我们就要新建一张合同历史表, ...
- Visual Studio2012打不开MVC2.0以及1.0项目如何处理
/*打开扩展名为csproj的工程文件*/ <ProjectTypeGuids> {F85E285D-A4E0---AB1D724D3325};{349c5851-65df-11da--0 ...
- POJ 1733 Parity game (带权并查集)
题意:有序列A[1..N],其元素值为0或1.有M条信息,每条信息表示区间[L,R]中1的个数为偶数或奇数个,但是可能有错误的信息.求最多满足前多少条信息. 分析:区间统计的带权并查集,只是本题中路径 ...
- html 基础 超链接
***设置超链接的样式示例 a:link 超链接被点前状态 a:visited 超链接点击后状态 a:hover 悬停在超链接时 a:active 点击超链接时 在定义这些状态时,有一个顺序l v ...
- datagrid 用法
http://blog.csdn.net/xhhuang1979/article/details/8331682
- 修改AdminLTE左侧菜单展开延迟
AdminLTE左侧菜单展开会有半秒钟的延迟. 看起来会慢半拍. 可修改 admin/dist/js/app.min.js中的 animationSpeed值(默认为500) 如下:
- Mybatis中的ParameterType
mybatis可以传入的参数类型1.基本数据类型 可以通过#{参数名}直接获取.每次只能传入一个值 <select id="selectTeacher" ...