六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 45|回复: 0

[转] AudioToolbox使用方法总结

[复制链接]

升级  77.33%

50

主题

50

主题

50

主题

秀才

Rank: 2

积分
166
 楼主| 发表于 2013-1-26 12:29:46 | 显示全部楼层 |阅读模式
转自:http://blog.csdn.net/ch_soft/article/details/7381976

整理一些网络资源

第一部分

之前公司做的是音乐播放器,用到了AudioToolbox这个音频接口,总结下,希望对需要的朋友有帮助。AudioToolbox这个库是C的接口,偏向于底层,用于在线流媒体音乐的播放,可以调用该库的相关接口自己封装一个在线播放器类,AudioStreamer是老外封装的一个播放器类,有兴趣的朋友可以研究下。

      其实IOS库中有两个可以播放在线音乐的播放器类,AVPlayer和MPMusicPlayerController
这两个做简单的播放还不错,但是如果要做专业的音乐播放项目,功能还不够强大,例如:边听边存、断点续传、播放事件等等都无法满足。一下是以前做的笔记,仅供参考

播放流程图:


数据结构及接口说明:


C代码  
    •   数据类型  
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.可以实现播放进度可随便拉动
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表