AudioToolbox使用方法总结
整理一些网络资源
第一部分
之前公司做的是音乐播放器,用到了AudioToolbox这个音频接口,总结下,希望对需要的朋友有帮助。AudioToolbox这个库是C的接口,偏向于底层,用于在线流媒体音乐的播放,可以调用该库的相关接口自己封装一个在线播放器类,AudioStreamer是老外封装的一个播放器类,有兴趣的朋友可以研究下。
其实IOS库中有两个可以播放在线音乐的播放器类,AVPlayer和MPMusicPlayerController
这两个做简单的播放还不错,但是如果要做专业的音乐播放项目,功能还不够强大,例如:边听边存、断点续传、播放事件等等都无法满足。一下是以前做的笔记,仅供参考
播放流程图:
数据结构及接口说明:
- • 数据类型
- 1.AudioFileStreamID 文件流
- 2.AudioQueueRef 播放队列
- 3.AudioStreamBasicDescription 格式化音频数据
- 4.AudioQueueBufferRef 数据缓冲
- • 回调函数
- 1.AudioFileStream_PacketsProc 解析音频数据回调
- 2.AudioSessionInterruptionListener 音频会话被打断
- 3.AudioQueueOutputCallback 一个AudioQueueBufferRef播放完
- • 主要函数
- 0.AudioSessionInitialize (NULL, NULL, AudioSessionInterruptionListener, self);
- 初始化音频会话
- 1.AudioFileStreamOpen(
- (void*)self,
- &AudioFileStreamPropertyListenerProc,
- &AudioFileStreamPacketsProc,
- 0,
- &audio_file_stream);
- 建立一个文件流AudioFileStreamID,传输解析的数据
- 2.AudioFileStreamParseBytes(
- audio_file_stream,
- datalen,
- [data bytes],
- kAudioFileStreamProperty_FileFormat);
- 解析音频数据
- 3.AudioQueueNewOutput(&audio_format, AudioQueueOutputCallback, (void*)self, [[NSRunLoop currentRunLoop] getCFRunLoop], kCFRunLoopCommonModes, 0, &audio_queue);
- 创建音频队列AudioQueueRef
- 4.AudioQueueAllocateBuffer(queue, [data length], &buffer);
- 创建音频缓冲数据AudioQueueBufferRef
- 5.AudioQueueEnqueueBuffer(queue, buffer, num_packets, packet_descriptions);
- 把缓冲数据排队加入到AudioQueueRef等待播放
- 6.AudioQueueStart(audio_queue, nil); 播放
- 7.AudioQueueStop(audio_queue, true);
- AudioQueuePause(audio_queue); 停止、暂停
- • 断点续传
- 1。在http请求头中设置数据的请求范围,请求头中都是key-value成对
- key:Range value:bytes=0-1000
- [request setValue:range forHTTPHeaderField:@"Range"];
- 可以实现,a.网络断开后再连接能继续从原来的断点下载
- b.可以实现播放进度可随便拉动
AudioToolbox使用方法总结相关推荐
- 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群
作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...
- Java面试题大全2021版
一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...
- AudioToolbox音效播放
2019独角兽企业重金招聘Python工程师标准>>> // // ViewController.m // AudioToolbox音效播放 // // Created by ...
- (转)KVAudioStreamer - 基于AudioToolBox的开源音频流媒体播放器
原贴的地址:https://www.jianshu.com/p/7b40f0e8b6bb 在iOS上,播放音频一般使用AVAudioPlayer进行音频播放,但是AVAudioPlayer并不支持流媒 ...
- iOS开发小结 - 播放系统提示音使用总结(AudioToolbox)
开发过程中需要用到苹果自带的系统提示音,下面我总结了一下关于系统提示音播放的方法 第一步首先得导入AudioToolbox框架 #import <AudioToolbox/AudioToolbo ...
- ios的常用的一些方法
1.NSCalendar用法 -(NSString *) getWeek:(NSDate *)d { NSCalendar *calendar = [[NSCalendar alloc] initWi ...
- Kotlin协程使用,协程使用注意事项,协程中的await方法使用|不使用suspend使用协程
参见 码云 协程使用方法一 (Dispatchers调度器模式) 指定不同线程.同线程会挂起并阻塞(挂起是不影响主线程执行,阻塞是同样的IO线程会阻塞) withContext(Dispatchers ...
- IDEA中将代码块封装为方法,IDEA代码重构快捷键
IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:
- IDEA自动生成对象所有set方法
idea中有一款插件能够生成对象所有的set方法,GenerateAllSetter :下载地址 步骤1:将下载好的压缩包放在自己记得的文件夹中,在idea中进行导入 步骤2:在本地选中刚才的压缩包, ...
- List元素互换,List元素转换下标,Java Collections.swap()方法实例解析
Java Collections.swap()方法解析 jdk源码: public static void swap(List<?> list, int i, int j) {// ins ...
最新文章
- 一步步编写操作系统 71 直接操作显卡,编写自己的打印函数71-74
- 外媒:iPhone 14全系有望配备120Hz ProMotion显示屏
- 用计算机找到自己的另一半,希望找到另一半的说说 期盼找到另一半的句子
- 观众喜欢,就有人说大陆人吃不起榨菜
- 通信行业最齐全的英语缩语手册
- 故宫网售朝珠耳机 专家提醒注意保护知识产权(图)
- 【Java】---JVM内存模型
- 【待续】海思Hi3520A学习笔记
- 2022-2028年中国公私合作(PPP)模式深度分析及发展战略研究报告
- java间接调用_无法解析类型 java.util.Map$Entry。从必需的 .class 文件间接引用了它...
- 千机智能孙海锋:期待与国际同行在高端制造领域同台竞技(自主可控CAM软件:UltraCAM)
- Channel Access Protocal——EPICS Base-3.16版CA协议 - 字节序与数据类型
- AutoK3s v0.4.8 发布 与 Harvester 梦幻联动
- 消防应急照明和疏散指示系统在轨道交通中的设计应用
- 什么样的故障让阿里云换了总裁?
- 华东地区博友链接集合(陆续增加中)
- 人生四大境界:不知道自己不知道 知道自己不知道 不知道自己知道 知道自己知
- Monkey 命令使用说明
- matlab电气仿真模块b25,基于Matlab的由双馈风力发电机组成的风电场仿真
- python adb开发-adb常见用法
热门文章
- 魔方软件测试自学,4 分钟!OpenAI 的机器手学会单手解魔方了,完全自学无需编程...
- foxmail 163企业邮箱配置
- cython安装ubuntu_cython简单使用方法
- Git使用的奇技淫巧,看这篇就够了!
- 礼金记账本安卓_礼金记账本
- 虚拟机安装或卸载时,无法打开注册表项问题
- 我从冯·诺依曼计算机体系,追溯到了JVM,一切原来如此
- JAVA后台,对上传资源限定大小
- ubuntu安装vmware12出现cannot ope dev/vmmon及modprobe vmmon提示密钥无效的解决办法
- 称重系统中应用车牌识别实现无人值守称重系统解决方案