如图,视频通话等待时,实现音频循环播放。
使用:
import UIKit
class CallPrepareAlertView: FWPopupView {
deinit {
CMSoundPlayer.shared.stop()
}
override func awakeFromNib() {
super.awakeFromNib()
DispatchQueue.global().asyncAfter(deadline: .now()) {
CMSoundPlayer.shared.playCallSound()
}
}
}
播放器:
import Foundation
import AVFoundation
class CMSoundPlayer: NSObject {
static let shared = CMSoundPlayer()
var queuePlayer = AVQueuePlayer()
var playerLooper: AVPlayerLooper?
func playWithURL(_ url: URL) {
CMAudioHelper.onlyActivePlay()
let playerItem = AVPlayerItem(asset: AVAsset(url: url))
playerLooper = AVPlayerLooper(player: queuePlayer, templateItem: playerItem)
play()
}
func play() {
queuePlayer.play()
}
func pause() {
queuePlayer.pause()
}
func stop() {
pause()
}
}
extension CMSoundPlayer {
/// 拨打视频电话等待时的声音
func playCallSound() {
guard let url = Bundle.main.url(forResource: "callsound", withExtension: "mp3") else { return }
playWithURL(url)
}
func playFormSkipForm() {
guard let url = Bundle.main.url(forResource: "formSkipForm", withExtension: "mp3") else { return }
playWithURL(url)
}
}
结合另一篇使用效果更好,应用内播放音视频不影响后台音乐播放。