iOS的多媒体支持非常强大,它提供了多套支持多媒体的API,无论是音频、视频的播放,还是录制,iOS都提供了多种API支持。借助于这些API的支持,iOS应用既可以查看、播放手机相册中的照片、视频,也可以播放来自网络的视频.iOS也提供了对摄像头、麦克风的支持。

1、使用AVAudioPlayer播放音乐

  AVAudioPlayer比较简单,当控制AVAudioPlayer对象装载音频完成后,就可以调用AVAudioPlayer的如下方法进行播放控制了。

  如:play/pause/stop/prepareToPlay.

  其中:如果调用play方法时,如果音频还没有准备好,程序会隐式先执行prepareToPlay方法。

  除此之外,AVAudioPlayer还提供了如下属性来访问音频文件的相关信息。

  playing:该属性(只读)返回播放器是否正在播放。

  pan:该属性用于设置或返回立体声平衡。如果该属性设为-1.0,则完全在左边播放;如果设为0.0则左右音量相同;如果设为1.0,则完全右边播放。

  enableRate:是否允许改边播放速率。

  numberOfLoops:设置循环次数。如果为-1标识无限循环。

  numberOfChannels:返回音频的声道数目。

  duration:音频的持续时间

  currentTime:获取音频的播放点。

  url:返回播放器关联的音频URL。

 案例代码:

import UIKit
import AVKit
class NADiscoverViewController : UIViewController { lazy var audioPlayer = AVAudioPlayer.init()
var durationTime:Float = 0.0 //播放时长
var timer : Timer? lazy var startBtn : UIButton = {
let startBtn = UIButton()
startBtn.setImage(UIImage.init(named: "bofang"), for: .normal)
startBtn.addTarget(self, action: #selector(playAction(sender:)), for: .touchUpInside)
return startBtn
}() lazy var finishBtn : UIButton = {
let finishBtn = UIButton()
finishBtn.setImage(UIImage.init(named: "jieshu"), for: .normal)
finishBtn.addTarget(self , action: #selector(endAction(sender:)), for:.touchUpInside)
return finishBtn
}() lazy var progress : UIProgressView = {
let progress = UIProgressView()
return progress
}() lazy var messageLabel : UILabel = {
let messageLabel = UILabel()
messageLabel.text = "时长"
messageLabel.numberOfLines =
return messageLabel
}() override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = "发现" setSubViewConstraints()
let fileURL : URL = Bundle.main.url(forResource: "a", withExtension: "mp3")! do {
let player : AVAudioPlayer = try AVAudioPlayer.init(contentsOf: fileURL)
audioPlayer = player
}catch{}
let str = String.init(format: "音频文件的声道数:%d\n音频文件的持续时间:%g", audioPlayer.numberOfChannels,audioPlayer.duration)
messageLabel.text = str
durationTime = Float(audioPlayer.duration)
//将循环次数设为-1,用于指定该音频文件循环播放
audioPlayer.numberOfLoops = -
audioPlayer.delegate = self
} @objc func playAction(sender:UIButton) -> Void {
if audioPlayer.isPlaying {
audioPlayer.pause()
startBtn.setImage(UIImage.init(named: "bofang"), for: .normal)
} else {
audioPlayer.play()
startBtn.setImage(UIImage.init(named: "zanting"), for: .normal)
}
if timer == nil {
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(updateProge), userInfo: nil, repeats: true)
}
}
@objc func endAction(sender:UIButton) -> Void {
audioPlayer.stop()
timer?.isValid
timer = nil
} @objc func updateProge() {
progress.progress = Float(audioPlayer.currentTime) / durationTime
}
func setSubViewConstraints() -> Void {
view.addSubview(startBtn)
startBtn.snp.makeConstraints { (make) in
make.top.equalTo()
make.left.equalTo()
make.width.height.equalTo()
} view.addSubview(finishBtn)
finishBtn.snp.makeConstraints { (make) in
make.top.equalTo(startBtn)
make.right.equalTo(-)
make.width.height.equalTo()
} view.addSubview(progress)
progress.snp.makeConstraints { (make) in
make.top.equalTo(startBtn.snp_bottom).offset()
make.left.equalTo()
make.right.equalTo(-)
}
view.addSubview(messageLabel)
messageLabel.snp.makeConstraints { (make) in
make.top.equalTo(progress.snp_bottom).offset()
make.left.equalTo()
make.right.equalTo(-)
}
}
} extension NADiscoverViewController : AVAudioPlayerDelegate {
//当audioplayer播放完成后将会自动播放
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
if player == audioPlayer && flag {
print("播放完成") }
} func audioPlayerBeginInterruption(_ player: AVAudioPlayer) {
if player == audioPlayer {
print("被中断了")
}
}
}

播放本地音乐

 效果图:

2、使用AVPlayerViewController播放视频

  支持的视频编码格式很有限:H.264、MPEG-4,扩展名(压缩格式):.mp4、.mov、.m4v、.m2v、.3gp、.3g2等,如果是RMVB就不行了,需要借助第三方的框架来实现更多格式的支持。

  使用AVPlayerViewController之前先导入AVKit头文件

  AVPlayerViewController中集成了AVPlayer,AVPlayer提供了一些方法可以轻易实现对视频播放的控制

  如:play/pause/status

  AVPlayerViewController常用属性:

  showsPlaybackControls:是否显示回放控制

  entersFullScreenWhenPlaybackBegins:开启这个播放的时候支持(全屏)横竖屏

  exitsFullScreenWhenPlaybackEnds:开启这个播放结束的时候,可以退出全屏

  案例代码:

import UIKit
import AVKit
class NAPublishViewController : UIViewController {
var moviePlayer = AVPlayerViewController.init()
override func viewDidLoad() {
super.viewDidLoad() let movieUrl : URL = Bundle.main.url(forResource: "movie", withExtension: "mp4")!
//使用指定的url创建MPMoviesPlayerController
moviePlayer.player = AVPlayer.init(url: movieUrl)
//是否显示回放控制
moviePlayer.showsPlaybackControls = true
//开启这个播放的时候支持(全屏)横竖屏
if #available(iOS 11.0, *) {
moviePlayer.entersFullScreenWhenPlaybackBegins = true
}
//开启这个播放结束的是否,可以退出全屏
if #available(iOS 11.0, *) {
moviePlayer.exitsFullScreenWhenPlaybackEnds = true
}
view.addSubview(moviePlayer.view)
//判断moviePlayer已经准备好视频第一播放帧
if moviePlayer.isReadyForDisplay {
moviePlayer.player?.play()
} } override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

AVPlayerViewController播放视频

  通过上面几行代码,就可以实现本地或网络视频的播放。

        

iOS音频与视频的开发(一)-使用AVAudioPlayer播放音乐、使用AVPlayerViewController播放视频的更多相关文章

  1. 《转》iOS音频视频初级开发

    代码改变世界 Posts - 73, Articles - 0, Comments - 1539 Cnblogs Dashboard Logout HOME CONTACT GALLERY RSS   ...

  2. iOS音频与视频的开发(二)- 使用AVAudioRecorder进行录制音频

    1.使用AVAudioRecorder录制视频 AVAudioRecorder与AVAudioPlayer类似,它们都属于AVFoundation的类.AVAudioRecorder的功能类似于一个录 ...

  3. iOS音频播放、录音、视频播放、拍照、视频录制

    随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...

  4. iOS 音频视频制作

    --iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制, ...

  5. iOS音频AAC视频H264编码 推流最佳方案

    iOS音频AAC视频H264编码 推流最佳方案 项目都是个人的调研与实验,可能很多不好或者不对的地方请多包涵. 1    功能概况 *  实现音视频的数据的采集 *  实现音视频数据的编码,视频编码成 ...

  6. iOS 音频视频图像合成那点事

    代码地址如下:http://www.demodashi.com/demo/13420.html 人而无信不知其可 前言 很久很久没有写点什么了,只因为最近事情太多了,这几天终于闲下来了,趁此机会,记录 ...

  7. IOS开发之小实例--创建一个简单的用于视频录制和回放的应用程序

    前言:还是看了一下国外的入门IOS文章:<Create a Simple App for Video Recording and Playback>,主要涉及视频录制和回放的功能的基本实现 ...

  8. IOS 音频开发文件大小计算

    音频基础知识 音频文件计算大小 音频转码 标签(空格分隔): 调查 IOS音频 https://developer.apple.com/library/ios/documentation/MusicA ...

  9. iOS 音频开发

      音频基础知识 组成 音频文件的组成:文件格式(或者音频容器) + 数据格式(或者音频编码). 文件格式(或音频容器)是用于形容文件本身的格式. 我们可以通过多种不同的方法为真正的音频数据编码.例如 ...

随机推荐

  1. golang 处理 json 结构体

    首先 我们来看一下这个json 字串 { "resp": { ", "respMsg": "成功", "app" ...

  2. 谁说程序员不浪漫?Python导出微信聊天记录生成爱的词云图

    明天又双叒叕是一年一度的七夕恋爱节了! 又是一波绝好的机会!恩爱秀起来! 购物车清空!礼物送起来!朋友圈晒起来!   等等! 什么?! 你还没准备好七夕礼物么? 但其实你不知道要送啥? 原来又双叒叕要 ...

  3. XSS原理及其相应工具使用

    XSS(厉害程度:只要js能实现什么功能,xss就能对client造成什么伤害):   原理:通过web站点漏洞,向客户端交付恶意脚本代码,实现对客户端的攻击目的 主要攻击目的(网页挂马:通过XSS向 ...

  4. MySQL数据篇(八)-- 存储过程的简单实现

    思考:一般我们的数据都是存储在数据库里面,对于常规的CRUD操作都是用代码实现,比如使用PHP做项目,所有的数据处理都需要主动操作代码实现.如果我们现在有一项目,业务需要在用户下单后,对用户的订单进行 ...

  5. appium+robotframework+python连接真机定位不到元素的问题处理

    这几天遇到了一个比较奇怪的问题,使用RF框架进行自动化测试的时候定位不到部分元素 并且这个元素的是有id的,更换了xpath定位也行不通,冥思苦想,加上谷歌百度,终于解决了 解决步骤如下: 1.定位问 ...

  6. ACWING 95 费解的开关 解题记录

    你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变某一个灯的状态.游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也 ...

  7. MySQL InnoDB 索引 (INDEX) 页结构

    MySQL InnoDB 索引 (INDEX) 页结构 InnoDB 为了不同的目的而设计了不同类型的页,我们把用于存放记录的页叫做索引页 索引页内容 索引页分为以下部分: File Header:表 ...

  8. npm install 提示 `gyp: No Xcode or CLT version detected!` MacOS 10.15

    https://github.com/nodejs/node-gyp/issues/569 https://github.com/nodejs/node-gyp/issues/1927 解决链接:ht ...

  9. PHP中生成随机字符串,数字+大小写字母随机组合

    简单的生成随机字符串: /* * 生成随机字符串 * * $length 字符串长度 */ function random_str($length) { // 密码字符集,可任意添加你需要的字符 $c ...

  10. Linux下科学计数法(e)转化为数字的方法 [shell中几种数字计算说明]

    科学计数法使用e标识数值,将科学计算学转化为数字的思路:按e右边的数字移动小数点位数.e右边的数字如果是负数,则向左移动小数点.示例如下: 1.2345678e2 = 123.45678 1.2345 ...