新闻资讯
网络的音频文件 >> 下载到本地的音频 data
下载音频文件的二进制数据
URLSession 的 task, 去获取网络文件
拿到一个数据包 Data,就处理一个
本例子,一个数据包 Data,对应一个音频包 packet, 对应一个音频缓冲 buffer
这一步,比较容易,
建个 URLSessionDataTask ,去下载
要做的,都在网络代理方法里
extension Downloader: URLSessionDataDelegate { // 开始下载,拿到文件的总体积 public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) { totalBytesCount = response.expectedContentLength completionHandler(.allow) } // 接收数据 public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { // 更新,下载到本地的数据总量 totalBytesReceived += Int64(data.count) // 算进度 progress = Float(totalBytesReceived) / Float(totalBytesCount) // data 交给代理,去解析为音频数据包 delegate?.download(self, didReceiveData: data, progress: progress) } // 下载完成了 public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { state = .completed delegate?.download(self, completedWithError: error) } }
音频基础了解先:
音频文件,分为封装格式(文件格式),和编码格式
音频数据的三个层级,buffer, packet, frame
数据缓冲 buffer , 装音频包 packet,
音频包 packet,装音频帧 frame
音频按编码格式,一般分为可变码率 ,和固定码率
固定码率 CBR, 平均采样,对应原始文件,pcm ( 未压缩文件 )
可变码率 VBR,对应压缩文件,例如: mp3
Core Audio 支持 VBR,一般通过可变帧率格式 VFR
VFR 是指:每个包 packet 的体积相等, 包 packet 里面的帧 frame 的数量不一, 帧 frame 含有的音频数据有大有小
Core Audio 中数据描述
固定码率用 ASBD 描述,AudioStreamBasicDescription
ASBD 的描述, 就是指一些配置信息,包含通道数、采样率、位深...
可变码率中 VFR,用 ASPD 描述,AudioStreamPacketDescription
压缩音频数据中 VFR,对应 ASPD
每一个包 Packet,都有其 ASPD
ASPD 里面有,包 packet 的位置信息 mStartOffset,包 packet 的帧 frame 的个数,mVariableFramesInPacket
原文链接:https://juejin.im/post/5e52a5c55188254940670156
回复列表