IOS在微信内置浏览器请求获取后台传过来的音频地址 然后点击播放怎么需要请求好几次 才能请求到资源进行加载播放 每次audio.networkState属性总是 0或1 只有3的时候好像才能播放 我应该怎么做才能让他直接请求到资源呢
1条回答 默认 最新
- 你知我知皆知 2024-08-05 21:13关注
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
这个问题是由于iOS和微信内置浏览器对音频资源处理的不同导致的。微信内置浏览器只支持静态音频文件,不支持网络请求的动态音频。
为了解决这个问题,你可以使用以下方法:
-
将音频文件保存到本地,然后在播放时从本地读取。
-
使用第三方库如AFNetworking来发送网络请求并下载音频。
下面是一个简单的示例代码:
import UIKit import AFNetworking class ViewController: UIViewController { @IBOutlet weak var audioView: AVAudioPlayer! override func viewDidLoad() { super.viewDidLoad() let url = "https://example.com/audio.mp3" let task = AFRequest(taskName: "Download Audio", completionHandler: { (request, response, error) in if error != nil { print("Error downloading audio: \(error)") return } let data = response?.data if data == nil { print("No data received from server") return } do { let audioData = try Data(contentsOf: URL(string: url)!) self.audioView?.prepareToPlay() self.audioView?.play() // Now you can access the audio data as needed } catch { print("Error loading audio: \(error)") } }) task?.send(url: url, parameters: nil, headers: nil, method: .get, success: nil, failure: nil) } }
这段代码首先创建一个AFRequest对象,指定任务名称为"Download Audio"。然后设置了一个completion handler,当成功下载音频数据时执行。在completion handler中,我们尝试将音频数据转换为AVAudioData,并将其提供给
audioView
。这样,audioView
就可以开始播放音频了。解决 无用评论 打赏 举报 -