• AudioToolbox学习(转)


    AudioToolbox这个库是C的接口,偏向于底层,用于在线流媒体音乐的播放,可以调用该库的相关接口自己封装一个在线播放器类,AudioStreamer是老外封装的一个播放器类,有兴趣的朋友可以研究下。 
          其实IOS库中有两个可以播放在线音乐的播放器类,AVPlayer和MPMusicPlayerController 
    这两个做简单的播放还不错,但是如果要做专业的音乐播放项目,功能还不够强大,例如:边听边存、断点续传、播放事件等等都无法满足。一下是以前做的笔记,仅供参考;

    播放流程图:

    数据结构及接口说明:

     1     •   数据类型  
     2 1.AudioFileStreamID             文件流  
     3 2.AudioQueueRef                     播放队列   
     4 3.AudioStreamBasicDescription   格式化音频数据  
     5 4.AudioQueueBufferRef             数据缓冲  
     6   
     7     •   回调函数  
     8 1.AudioFileStream_PacketsProc       解析音频数据回调  
     9 2.AudioSessionInterruptionListener  音频会话被打断  
    10 3.AudioQueueOutputCallback          一个AudioQueueBufferRef播放完  
    11   
    12     •   主要函数  
    13 0.AudioSessionInitialize (NULL, NULL, AudioSessionInterruptionListener, self);  
    14 初始化音频会话  
    15   
    16 1.AudioFileStreamOpen(  
    17                         (void*)self,                            
    18                         &AudioFileStreamPropertyListenerProc,   
    19                         &AudioFileStreamPacketsProc,            
    20                         0,                                      
    21                         &audio_file_stream);              
    22 建立一个文件流AudioFileStreamID,传输解析的数据  
    23   
    24 2.AudioFileStreamParseBytes(  
    25                           audio_file_stream,  
    26                           datalen,  
    27                           [data bytes],  
    28                           kAudioFileStreamProperty_FileFormat);   
    29 解析音频数据  
    30   
    31 3.AudioQueueNewOutput(&audio_format, AudioQueueOutputCallback, (void*)self, [[NSRunLoop currentRunLoop] getCFRunLoop], kCFRunLoopCommonModes, 0, &audio_queue);  
    32 创建音频队列AudioQueueRef  
    33   
    34 4.AudioQueueAllocateBuffer(queue, [data length], &buffer);  
    35 创建音频缓冲数据AudioQueueBufferRef  
    36   
    37 5.AudioQueueEnqueueBuffer(queue, buffer, num_packets, packet_descriptions);  
    38 把缓冲数据排队加入到AudioQueueRef等待播放  
    39   
    40 6.AudioQueueStart(audio_queue, nil);    播放  
    41 7.AudioQueueStop(audio_queue, true);  
    42  AudioQueuePause(audio_queue);          停止、暂停  
    43   
    44     •   断点续传  
    45 1。在http请求头中设置数据的请求范围,请求头中都是key-value成对  
    46     key:Range           value:bytes=0-1000  
    47     [request setValue:range  forHTTPHeaderField:@"Range"];  
    48 可以实现,a.网络断开后再连接能继续从原来的断点下载  
    49             b.可以实现播放进度可随便拉动  

     

     

  • 相关阅读:
    兼容性和工程化
    对象
    用JavaScript实现学生管理系统
    用JavaScript实现视频弹幕发送
    数据结构
    数据结构和函数
    JavaScript的基本语法
    JS概括及基本语法
    MongoDB数据库的简单安装与使用
    epxress 的安装与配置
  • 原文地址:https://www.cnblogs.com/hellocby/p/2765865.html
Copyright © 2020-2023  润新知