新闻资讯

新闻资讯 行业动态

网络的音频文件 >> 下载到本地的音频 data

编辑:008     时间:2020-02-26

下载音频文件的二进制数据

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
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表

相关推荐