首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >记忆中的AVAudioFile?

记忆中的AVAudioFile?
EN

Stack Overflow用户
提问于 2016-01-25 08:30:55
回答 1查看 1.8K关注 0票数 3

我在和AVAudioFile和AVAudioPlayerNode玩。

我已经实现了一个自定义的流协议,它接收音频块并处理所有缓冲部分,但是我无法在不使用文件系统的情况下播放第一个块(此时我不想使用FS )。

这是:当我将数据写入临时文件并使用AVAudioFile加载数据时(然后初始化一个AVAudioBuffer并使用AVAudioFile.readIntoBuffer &最后使用AVAudioPlayerNode.scheduleBuffer),它工作得很好。但是我无法直接从第一个块(NSData)加载缓冲区。

我是否应该实现自定义NSURLProtocol并尝试从自定义NSURL初始化AVAudioFile?

代码语言:javascript
复制
func play( data: NSData ) {
var audioFile: AVAudioFile
var audioBuffer: AVAudioPCMBuffer
// writing the data
let destPath = NSTemporaryDirectory() + "chunk.mp3"
data.writeToFile( destPath, atomically: true )
// initializing the AVAudioFile
audioFile = AVAudioFile( forReading: NSURL(string: destPath)!)
// initializing the AVAudioPCMBuffer
audioBuffer = AVAudioPCMBuffer(PCMFormat: audioFile.processingFormat,
                               frameCapacity: UInt32(data.length))
audioFile.readIntoBuffer( audioBuffer )
/*
    I didn't put any AVAudioPlayerNode/AVAudioEngine in this code to keep it simple and describe the situation,
    anyway this works fine when everything's properly initialized:
*/
player.scheduleBuffer( audioBuffer, completionHandler: nil )
}
EN

回答 1

Stack Overflow用户

发布于 2016-01-25 17:40:42

来自文档

若要播放流音频内容(例如来自网络连接的音频内容),请与音频队列服务协同使用音频文件流服务。音频文件流服务解析来自网络比特流中常见音频文件容器格式的音频数据包和元数据。您也可以使用它来解析磁盘文件中的数据包和元数据。

这里的关键是使用将数据放入缓冲区,并使用对其进行排队。网络部分通常使用CFNetwork API完成,这比NSURLProtocol低得多。

Apple代码"AudioFileStreamExample“演示了一个流音频的客户端和服务器实现。这将是一个有效的起点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34988078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档