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的更多相关文章

  1. html5 audio总结

    前言 html5中对音频,视频播放原生支持.最近做了一个音乐播放器,得益于快过年了,才能抽出一点时间来总结一下.总的来说,html5对audio的支持非常强大, 难怪flash要死.浏览器上装播放插件 ...

  2. 《HTML5》 Audio/Video全解

    一.标签解读 <audio> 标签属性 <audio id="media" src="http://www.abc.com/test.mp3" ...

  3. video/audio在ios/android上播放兼容

    1.audio自动播放 <audio src='xxx.mp3' autoplay></audio> 上面是audio标签autoplay属性是自动播放,但是在安卓部分浏览器和 ...

  4. audio 基本功能实现(audio停止播放,audio如何静音,audio音量控制等)

    audio最简单原始的播放.暂停.停止.静音.音量大小控制的功能,注意某些浏览器会有权限无法自动播放噢(video也会如此) <!doctype html> <html> &l ...

  5. h5自定义audio(问题及解决)

    h5活动需要插入音频,但又需要自定义样式,于是自己写咯 html <!-- cur表示当前时间 max表示总时长 input表示进度条 --> <span class='cur'&g ...

  6. 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 ...

  7. HTML5的Audio标签打造WEB音频播放器

    目前,WEB页面上没有标准的方式来播放音频文件,大多数的音频文件是使用插件来播放,而众多浏览器都使用了不同的插件.而HTML5的到来,给我们提供了一个标准的方式来播放WEB中的音频文件,用户不再为浏览 ...

  8. 微信的audio无法自动播放的问题

    一.问题 最近做了一个html5的项目,里面涉及到音乐播放,项目要求音乐进入页面就自动播放,于是我就想到了html5的audio标签,将mp3引入进去. 1.在audio标签里引入了autoplay属 ...

  9. HTML5 audio与video标签实现视频播放,音频播放

    随着互联网的飞速发展以及HTML5的应用,越来越多的项目中用到video,audio当常用标签. <audio> 标签属性 <audio src="song.mp3&quo ...

  10. android audio无法自动播放

    audio无法在android4.4+和ios6以上的版本自动播放,因为他们出于安全考虑,做了限制.必须用户自己手工点击才能播放,程序是控制不了播放的. 整死我了,整整搞了2天,查不出所以然,原来就这 ...

随机推荐

  1. 通信—HTTP 协议入门(转载)

    HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等). HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于199 ...

  2. android 布局属性详解

    Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料. 第一类:属性值为true或falseandroid:layout_centerHrizontal ...

  3. 基于mondrain 的原理纠正特殊指标值

    原文地址:http://www.cnblogs.com/qiaoyihang/p/7348385.html 下面有两张表 数学试卷成绩 表1 学号 省份 批次 学校 试卷成绩 数学试卷小题成绩 表2 ...

  4. java 中JFinal getModel方法和数据库使用出现问题解决办法

    JFinal getModel方法(从页面表单中获取Model对象)+数据库存储问题 一.getmodel方法 1.在JConfig配置类中的数据库映射(存储到数据库时需要此配置) public vo ...

  5. Python(迭代、三元表达式、列表生成、生成器、迭代器)

    迭代 什么是迭代 1 重复 2 下次重复一定是基于上一次的结果而来 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). ...

  6. CNN学习笔记:梯度下降法

    CNN学习笔记:梯度下降法 梯度下降法 梯度下降法用于找到使损失函数尽可能小的w和b,如下图所示,J(w,b)损失函数是一个在水平轴w和b上面的曲面,曲面的高度表示了损失函数在某一个点的值

  7. 3. Longest Substring Without Repeating Characters(最长子串,双指针+hash)

    Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...

  8. NIO复习02

    Selector 1. Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管 ...

  9. html使用笔记

    1. HTML 表单内容设置最大长度:<input type="text" name="fullname"  maxlength="85&quo ...

  10. Javascript Array对象 sort()方法,记忆方法,方法扩展

    相信 有很多 同仁们,尤其是初学者,在记住 Array对象 sort() 方法的排序,规则上,有点困难: 其实sort()方法已经在实际工作中用到很多遍了,可当我仔细推敲,这个sort()方法,什么时 ...