iOS 系統原生不支持 Opus 格式(.opus / .ogg 容器),需引入第三方解碼庫。主流方案有兩種。
GitHub:https://github.com/your-repo/opus.swift (搜索 "opus.swift iOS")
// 1. Swift Package Manager 安裝
.package(url: "https://github.com/...opus.swift.git", from: "1.0.0")
// 2. 文件播放
import Opus
import AVFoundation
let opusData = try Data(contentsOf: fileURL)
let decoder = OpusDecoder(sampleRate: 48000, channels: 2)
let pcmBuffer = decoder.decode(opusData) // 返回 AVAudioPCMBuffer
// 3. 播放
let player = AVAudioPlayerNode()
let engine = AVAudioEngine()
engine.attach(player)
engine.connect(player, to: engine.mainMixerNode, format: pcmBuffer.format)
player.scheduleBuffer(pcmBuffer, at: nil, options: .loops, completionHandler: nil)
try engine.start()
player.play()
若需支持 HLS/DASH/RTMP 流媒體播放 Opus,建議用成熟播放器框架:
// Podfile
pod 'MobileVLCKit', '~> 3.5'
// 播放
import MobileVLCKit
let player = VLCMediaPlayer()
player.media = VLCMedia(url: URL(string: "https://example.com/stream.opus")!)
player.play()
// Podfile
pod 'IJKMediaFramework', '~> 1.0'
// 播放
import IJKMediaFramework
let player = IJKFFMovieController(contentURL: url, with: nil)
player.prepareToPlay()
player.play()
// 使用 opus.framework (C 靜態庫) + AudioQueue / AudioUnit
// 適合:VoIP、即時通訊、極低延遲場景
// 參考:https://github.com/xiph/opus/tree/master/ios
| 需求 | 推薦方案 | 體積 | 複雜度 |
|---|---|---|---|
| 僅本地 .opus 文件播放 | opus.swift | ~500KB | 低 |
| 流媒體播放、多格式兼容 | MobileVLCKit | ~50MB | 中 |
| 流媒體、體積敏感、國產化 | ijkplayer | ~10MB | 中 |
| VoIP/即時通訊/極低延遲 | AudioToolbox + opus C庫 | ~1MB | 高 |
已解決:項目最終選用 ijkplayer,體積可控且完美支持 Opus 流媒體播放。