ios录制视频 android播放器,ios之视频/音频的录制和使用

前言:最近一段时间都没更新了,主要是在研究直播方面的一些东西,到现在还没研究透,后续会把我研究的直播方面的知识分享给大家.现在正在模仿斗鱼写一个项目.

中间也遇到了很多问题,而且项目我是用swift写的,找到的一些直播方面的框架不能很好的集成进去,如果有研究直播的朋友可以相互探讨下

一.录音

1.录音的基本使用

1.1 创建 AVAudioRecorder对象,并且要给对象指定路径

1.2 注意:创建 AVAudioRecorder对象的方法会抛出异常,要对异常进行处理

1.3 怎么处理异常?

三种方式 1.try 要配合do使用 2.try? 当抛出异常的方法有返回值的时候才可以使用,因为该方法是根据是否有返回值来判断是否有异常 3. try! 慎用,很危险的用法

1.4 注意:音频保存的格式为 .caf 或 .wav 保存MP3的格式不可行

2.设置音频的一些属性

2.1 设置录音的采样率(采样率越高,录音的品质越好,文件越大)

2.2 一般来说,采样率不会设置太高,能听清录音即可(专业录制音乐除外)

2.3 录音通道数(暂时不清楚具体意义)

// 1.录制音频的存放路径

// let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,

.UserDomainMask, true).first! + "/123.mp3"

let fileURL = NSURL(string: "/Users/lgp/Desktop/123.wav")!

// 2.设置音频的一些属性

let settings : [String : AnyObject] = [AVSampleRateKey : 8000, AVNumberOfChannelsKey : 0]

// 3.创建AVAudioRecorder对象

guardlet recorder = try? AVAudioRecorder(URL: fileURL, settings: settings) else {

print("有异常")

return

}

self.recoder = recorder

// 4.开始录制

recorder.record()

//停止录制

recoder.stop()

3.测量声音的大小

3.1 首先要设置录音的声音大小需要被测量

// 5.告知系统recoder中的声音需要被测量

recorder.meteringEnabled = true

3.2 添加定时器,实时监听声音的大小

privatefunc addTimer() {

self.timer = NSTimer(fireDate: NSDate(), interval: 0.1,

target: self, selector: #selector(self.updateSoundPower),

userInfo: nil, repeats: true)

// 注意:必须把定时器加入到运行循环中才能正常工作

NSRunLoop.mainRunLoop().addTimer(timer!, forMode: NSRunLoopCommonModes)

}

privatefunc removeTimer() {

// 从运行循环中移除

timer?.invalidate()

// 将控制器的强引用移除

timer = nil

}

@objcprivatefunc updateSoundPower() {

// 获取声音的大小

recoder?.updateMeters()

let power = recoder?.averagePowerForChannel(0)

print(power)

}

二.音效播放

1.步骤

1.1 定义SystemSoundID(要先导入AVFoundation框架

1.2 获取音频路径的URL

1.3 通过URL给SystemSoundID赋值

1.4 播放音效

// 1.定义SystemSoundID

var soundID : SystemSoundID = 0

// 2.获取音频路径的URL

let url = NSBundle.mainBundle().URLForResource("lose.aac", withExtension: nil)!

// 3.通过URL给SystemSoundID赋值

AudioServicesCreateSystemSoundID(url asCFURLRef, &soundID)

// 4.播放音效 简单播放

AudioServicesPlaySystemSound(soundID)

// AudioServicesPlayAlertSound(soundID) 播放音效同时有震动效果

AudioServicesPlaySystemSoundWithCompletion(soundID) {

print("播放完成了")

}

// AudioServicesPlayAlertSoundWithCompletion(soundID) {}

三.音乐播放

1.基本使用

1.获取音乐文件的URL

2.根据URL创建 AVAudioPlayer对象

privatelazyvar player : AVAudioPlayer? = {

// 1.1.获取音乐文件的URL

let fileURL = NSBundle.mainBundle().URLForResource("简单爱.mp3", withExtension: nil)!

// 1.2.创建AVAudioPlayer对象

guardlet player = try? AVAudioPlayer(contentsOfURL: fileURL) else {

print("有异常")

returnnil

}

return player

}()

// 播放音乐

player?.play()

2.暂停,停止,快进,音量的设置

2.1 暂停player?.pause() 停止 player?.stop()

注意:暂停的时候,要把音乐的当前时间重置为0

player?.currentTime = 0

音乐的总时间可以通过player?.duration获得

2.2 快进 音量

快进的原理就是把音乐的当前时间加上一个数值

player?.currentTime += 10

音量通过player?.volume获得 取值范围 0~1

3.AVPlayer播放远程音频

3.1 根据音频的URL创建AVPlayerItem对象

3.2 根据AVPlayerItem创建AVPlayer对象

privatelazyvar player : AVPlayer = {

// 1.创建AVPlayerItem

let item = AVPlayerItem(URL: NSURL(string: "http://cc.stream.qqmusic.qq.com/C100003j8IiV1X8Oaw.m4a?fromtag=52")!)

// 2.创建player对象

let player = AVPlayer(playerItem: item)

return player

}()

player.play()

3.3 暂停player.pause() ` 停止player.pause()

不同的是,把音乐当前时间设置为0 调用这个方法

player.seekToTime(kCMTimeZero)

3.4 设置音量player.volume = ???快进

快进要进行类型转换

// 1.获取当前时间 获取的是CMTime类型

let currentTime = player.currentTime()

// 2.将CMTime转成秒

var currentSecond = CMTimeGetSeconds(currentTime)

// 3.快进

currentSecond += 10

// 4.将秒转成CMTime

player.seekToTime(CMTimeMakeWithSeconds(currentSecond, Int32(NSEC_PER_SEC)))

四.视频播放的五种方式

1.AVPlayer播放视频

1.1 AVPlayer既可以播放音频,也可以播放视频

1.2 先创建AVPlayer对象

1.3 根据AVPlayer对象创建一个AVPlayerLayer对象

1.4 设置AVPlayerLayer的frame 并添加到控制器的view中 调用play方法就能播放了

privatelazyvar player : AVPlayer = {

let item = AVPlayerItem(URL: NSURL(string:

"http://v1.mukewang.com/a45016f4-08d6-4277-abe6-bcfd5244c201/L.mp4")!)

let player = AVPlayer(playerItem: item)

return player

}()

// 设置画面

// 1.创建播放器的Layer

let playerLayer = AVPlayerLayer(player: player)

// 2.给layer设置frame

playerLayer.frame = CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.width, height: UIScreen.mainScreen().bounds.width * 9 / 16)

// 3.将layer添加到控制器的View的layer中

view.layer.addSublayer(playerLayer)

player.play()

1.5 缺点:没有画面,要自定义画面,而且没有快进,时间条等功能模块

2.AVPlayerViewController播放视频

2.1 AVPlayerViewController实际就是对AVPlayer的封装

privatelazyvar playerVc : AVPlayerViewController = {

let playerVc = AVPlayerViewController()

return playerVc

}()

// AVPlayerViewController里面的内容是由AVPlayer提供

let item = AVPlayerItem(URL: NSURL(string: "http://v1.mukewang.com/a45016f4-08d6-4277-abe6-bcfd5244c201/L.mp4")!) let player = AVPlayer(playerItem: item) playerVc.player = player

}

2.2 AVPlayerViewController是一个控制器 自带快进,播放条等功能,要通过modal方式显示出来

2.3 弹出之后不会自动播放,要自己播放 可以在弹出完成后直接播放

presentViewController(playerVc, animated: true, completion: {

self.playerVc.player?.play()

})

3.MPMoviePlayerController播放视屏

3.1 可以不用全屏播放,更加灵活,自带快进等功能模块

3.2 ios9之后就过期了,但是还能使用

privatelazyvar player : MPMoviePlayerController = {

let url = NSURL(string: "http://v1.mukewang.com/a45016f4-08d6-4277-abe6-bcfd5244c201/L.mp4")!

let player = MPMoviePlayerController(contentURL: url)

return player

}()

// 设置View

player.view.frame = CGRect(x: 0, y: 0, width:

UIScreen.mainScreen().bounds.width, height: UIScreen.mainScreen().bounds.width * 9 / 16)

// 将播放器的View添加到控制器的View中

view.addSubview(player.view)

player.play()

4.MPMoviePlayerViewController播放视频

4.1 自动全屏播放,不需要设置view的frame ios9之后就过期了,但是还能使用

4.2 注意:一般来说,视频的宽高比为16:9

4.3 弹出之后会自动播放

privatelazyvar player : MPMoviePlayerViewController = {

let url = NSURL(string: "http://v1.mukewang.com/a45016f4-08d6-4277-abe6-bcfd5244c201/L.mp4")!

let playerVc = MPMoviePlayerViewController(contentURL: url)

return playerVc

}()

presentMoviePlayerViewControllerAnimated(player)

5.IJKPlayer播放视频

// IJKAVMoviePlayerController : 播放普通的远程视频

// IJKFFMoviePlayerController : 播放直播的视频

privatelazyvar ijkplayer : IJKFFMoviePlayerController = {

let url = NSURL(string: "http://121.31.23.13/live/9024589_1473066200413.flv?wsSecret=06203e4a2a50d22b6234a78b62446ce9&wsTime=57CD3F72&cid=3&ver=ngb&cip=ngb&wsiphost=ipdbm&wsHost=v.ngb.qf.56.com")!

let player = IJKFFMoviePlayerController(contentURL: url, withOptions: nil)

return player

}()

ijkplayer.view.frame = view.bounds

view.addSubview(ijkplayer.view)

ijkplayer.scalingMode = .AspectFill

//准备播放

ijkplayer.prepareToPlay()

注意:使用ijk播放 要先导入ijk框架,不过ijk框架要自己先编译一下才能使用

如何编译: iOS中集成ijkplayer视频直播框架 写的不错,可以去参考下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值