• 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.可以实现播放进度可随便拉动

  • 相关阅读:
    奇妙的 CSS shapes(CSS图形)
    正确的缩写document。querySelector
    Ajax异步获取html数据中包含js方法无效的解决方法
    关于前端开发中的“收口”思想
    说说JSON和JSONP,也许你会豁然开朗
    Ajax 完整教程(转载)
    GitHub与Git指令入门
    Vue.js——60分钟组件快速入门(下篇)
    Vue.js——60分钟组件快速入门(上篇)
    自定义构造函数
  • 原文地址:https://www.cnblogs.com/pinping/p/2185541.html
Copyright © 2020-2023  润新知