📜  iOS-音频和视频(1)

📅  最后修改于: 2023-12-03 15:31:26.381000             🧑  作者: Mango

iOS 音频和视频编程

在 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 方法开始播放。同时,还可以通过该控制器提供的 skipForwardskipBackward 方法快进和快退。

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 中,录制视频可以使用 AVCaptureSessionAVCaptureMovieFileOutput,前者用于配置采集设备(如摄像头),后者用于将采集到的视频数据写入文件中。具体如下:

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 官方文档