📅  最后修改于: 2023-12-03 15:31:26.381000             🧑  作者: Mango
在 iOS 开发中,音频和视频编程是一个非常重要的部分,往往与用户交互最为密切。本文将介绍如何在 iOS 应用中使用音频和视频,包括录制和播放。
在 iOS 中,播放音频可以使用 AVPlayer
。首先需要创建一个 AVPlayerItem
对象,然后将其传递给 AVPlayer
即可开始播放。同时,AVPlayer
还提供了诸多控制音频播放的方法,如暂停、快进、快退等,具体如下:
let playerItem = AVPlayerItem(url: URL(string: "https://example.com/song.mp3")!)
let player = AVPlayer(playerItem: playerItem)
player.play() // 开始播放
// 停止播放
player.pause()
// 快进 30 秒
player.seek(to: CMTime(seconds: CMTimeGetSeconds(player.currentTime()) + 30, preferredTimescale: CMTimeScale(NSEC_PER_SEC)))
// 快退 30 秒
player.seek(to: CMTime(seconds: CMTimeGetSeconds(player.currentTime()) - 30, preferredTimescale: CMTimeScale(NSEC_PER_SEC)))
在 iOS 中,录制音频可以使用 AVAudioRecorder
。同样先需要创建一个 AVAudioRecorder
对象,并传入录音的路径、格式、采样率等参数即可开始录音。同时,还可以通过 pause
方法暂停录音,通过 stop
方法停止录音并保存。
let recordSettings = [AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 44100,
AVNumberOfChannelsKey: 1,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue]
let audioSession = AVAudioSession.sharedInstance()
try! audioSession.setCategory(.playAndRecord, options: [.defaultToSpeaker])
try! audioSession.setActive(true)
let audioURL = URL(fileURLWithPath: NSTemporaryDirectory() + "audio.m4a")
let audioRecorder = try! AVAudioRecorder(url: audioURL, settings: recordSettings)
audioRecorder.prepareToRecord()
audioRecorder.record()
// 暂停录音
audioRecorder.pause()
// 停止录音并保存
audioRecorder.stop()
在 iOS 中,播放视频可以使用 AVPlayerViewController
,该控制器内置了一个 AVPlayer
,可以直接调用 play
方法开始播放。同时,还可以通过该控制器提供的 skipForward
和 skipBackward
方法快进和快退。
let player = AVPlayer(url: URL(string: "https://example.com/video.mp4")!)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
present(playerViewController, animated: true, completion: {
player.play()
})
// 快进 30 秒
playerViewController.skipForward(self)
// 快退 30 秒
playerViewController.skipBackward(self)
在 iOS 中,录制视频可以使用 AVCaptureSession
和 AVCaptureMovieFileOutput
,前者用于配置采集设备(如摄像头),后者用于将采集到的视频数据写入文件中。具体如下:
let captureSession = AVCaptureSession()
captureSession.sessionPreset = .high
let videoDevice = AVCaptureDevice.default(for: .video)!
let deviceInput = try! AVCaptureDeviceInput(device: videoDevice)
let movieFileOutput = AVCaptureMovieFileOutput()
movieFileOutput.maxRecordedDuration = CMTime(seconds: 10, preferredTimescale: 1)
captureSession.addInput(deviceInput)
captureSession.addOutput(movieFileOutput)
captureSession.startRunning()
let videoURL = URL(fileURLWithPath: NSTemporaryDirectory() + "video.mp4")
movieFileOutput.startRecording(to: videoURL, recordingDelegate: self)
// 结束录制
movieFileOutput.stopRecording()
需要将 AVCaptureFileOutputRecordingDelegate
协议添加到该类中并实现以下方法:
func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {
if let error = error {
print(error)
} else {
print("Success")
}
}
以上是 iOS 音频和视频编程的基本操作,但实际情况可能更加复杂。需要根据具体需求进行调整。完整代码可以参考 AVFoundation 官方文档。