iOS音频播放之AudioQueue(三):网络流媒体的播放

本文介绍了如何使用AudioQueue结合CFNetwork实现iOS上的网络流媒体音频播放。通过分析AudioStreamer库,揭示了选择CFNetwork而非NSURLSession的原因,并提供了CFNetwork下载图片的示例,详细阐述了流媒体播放的预处理、Seek操作和播放完成的处理步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在前两篇中讲了使用AudioQueue流式播放本地文件的功能,本篇就来讲讲网络流媒体的播放。其实已经有了本地流式播放功能,网络流媒体播放基本就没问题了,只是数据来源于网络而已,但还是有些问题要注意。

从AudioStreamer讲起

AudioStreamer是一个用于播放网络流媒体音频的库,采用了AudioQueue+AudioStreamer+CFNetwork的方式来编写,代码量不大。阅读量很方便,其实使用AudioQueue来编写流媒体播放,代码基本都长一样。没必要重复造轮子,但是造轮子却有助于学习。我在学习和编写的时候也参考和阅读了AudioStreamer的代码。

为什么要使用CFNetwork

AudioStreamer使用了CFNetwork来下载数据,相信有一些人在使用AudioStreamer的时候都没有思考过这样一个问题,为什么AudioStreamer要使用CFNetwork来下载音频数据?起初我也没有去考虑这个问题,但是在自己造轮子的过程中,似乎我明白了作者的意图。我之前使用NSURLSession也编写了一个这样的功能,当然实现起来是没问题的,但是由于NSURLSession是异步请求,这样就会涉及到多线程之间的通信问题,比较复杂,并且读取到的数据大小不好控制,而使用CFNetwork则不一样,你可以控制每次读取到的数据大小,并且读取数据是在本线程中,所以虽然说CFNetwork是底层网络,但是使用CFNetwork反而比使用NSURLSession更加简单。下面先上一个CFNetwork的示例

CFNetwork示例:下载图片

在该示例中,我们使用CFNetwork来下载从百度图片上随意选则的一张

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值