重磅重构开源 让H5标签代替C++实时解码播放speex压缩协议的音频文件 【IM的福音】

栏目: C++ · 发布时间: 4年前

内容简介:这么牛逼的轮子,肯定要美图镇楼Speex是一套主要针对语音的开源免费,无专利保护的音频压缩格式。

重磅重构开源 让H5标签代替C++实时解码播放speex压缩协议的音频文件 【IM的福音】

这么牛逼的轮子,肯定要美图镇楼

Speex是一套主要针对语音的开源免费,无专利保护的音频压缩格式。

本轮子,适用超大型项目,因为库本身很大,当然本身 IM 项目就没有小项目吧

  • Speex(音标[spi:ks]) 是一套开源免费的、无专利保护的、针对语音设计的音频压缩格式。 Speex 项目通过以提供昂贵的专用语音编解码器的免费替代方案为目标,来降低语音应用程序的进入门槛。此外, Speex 非常适用于互联网应用程序,并提供了其他大多数编解码器中不存在的有用特性。最后, Speex是GNU 项目的一部分,可以在修订后的 BSD 许可证下使用。

编码流程

  • 使用 SpeexAPI 函数对音频数据进行压缩编码要经过如下步骤:
  • 定义一个 SpeexBits 类型变量 bits 和一个 Speex 编码器的内存指针变量 enc
  • 调用 speex_bits_init(&bits) 函数初始化 bits
  • 调用 enc = speex_encoder_init(&speex_nb_mode) 函数初始化 enc 。其中 speex_nb_modeSpeexMode 类型的变量,表示的是窄带模式。还有 speex_wb_mode 表示宽带模式、 speex_uwb_mode 表示超宽带模式。
  • 调用函数 int speex_encoder_ctl(void * state, int request, void * ptr) 来设定编码器的参数,其中参数state表示编码器的内存指针;参数request表示要定义的参数类型,如 SPEEX_GET_FRAME_SIZE 表示设置帧大小, SPEEX_SET_QUALITY 表示编码的质量等级;参数ptr表示要设定的值。
  • 初始化完毕后,对每一帧声音作如下处理:调用函数 speex_bits_reset(&bits) 重置 bits ,然后调用函数 speex_encode(enc_state,input_frame, &bits) 进行编码,参数bits中保存编码后的 Speex 格式数据帧。

编码结束后,调用函数 speex_bits_destroy(&bits),speex_encoder_destroy(enc_state) 来销毁 SpeexBits 和编码器。

解码流程

  • 对已经编码过的 Speex 格式音频数据帧进行解码要经过以下步骤:
  • 定义一个 SpeexBits 类型变量 bits 和一个 Speex 解码器的内存指针变量 dec
  • 调用 speex_bits_init(&bits) 函数初始化 bits
  • 调用 dec = speex_decoder_init(&speex_nb_mode) 函数初始化 dec
  • 调用函数 speex_decoder_ctl(void * state, int request, void * ptr) 来设定解码器的参数。
  • 调用函数 speex_decode(void * state, SpeexBits * bits, float * out) 对参数bits中的 Speex 格式音频数据帧进行解码,参数out中存放解码后的音频数据帧。
  • 调用函数 speex_bits_destroy(&bits), speex_decoder_destroy(void * state) 来销毁 SpeexBits 和解码器

说重点

当做即时通信产品,像微信这种的手机端,它们接受到很有可能就是 speex 协议压缩后的音频文件。当然,文件后缀是 wav 或者 ogg 都无关紧要

  • H5audio 标签可以播放

    • 音频格式及浏览器支持
    • 目前, <audio> 元素支持三种音频格式文件: MP3, Wav, 和 Ogg:
    • 浏览器 MP3 Wav Ogg
    • Internet Explorer 9+ YES NO NO
    • Chrome 6+ YES YES YES
    • Firefox 3.6+ NO YES YES
    • Safari 5+ YES YES NO
    • Opera 10+ NO YES YES
    • 音频格式的 MIME 类型
    • Format MIME-type
    • MP3 audio/mpeg
    • Ogg audio/ogg
    • Wav audio/wav

本开源库基于 speex 封装,抽取了必须要的文件后进一步封装,修改了在复杂环境下的兼容

  • 本源码支持环境

    • 原生 javaScriptHTML 环境
    • MVVM 框架
    • Electron React dva webpack 的跨平台复杂环境

特别警告:本源码不支持 AMD CMD commonJS ES6 以及任何模块化方案,只能通过script标签引入后调用函数使用

主要解决了即时通讯中的speex音频格式文件直接在H5中播放的问题

Electron + webpack +dva + React

欢迎 github 提交 issue ,这个轮子是经过整合别人代码后优化,后期会继续优化。 github仓库地址

npm i speex-in-h5 也可以下载,但是本项目不支持任何模块化方案,请手动引入 index 文件,仓库中有 Demo

路过点赞, 6天6次要9 --------- 996 的福报,马老师


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Twenty Lectures on Algorithmic Game Theory

Twenty Lectures on Algorithmic Game Theory

Tim Roughgarden / Cambridge University Press / 2016-8-31 / USD 34.99

Computer science and economics have engaged in a lively interaction over the past fifteen years, resulting in the new field of algorithmic game theory. Many problems that are central to modern compute......一起来看看 《Twenty Lectures on Algorithmic Game Theory》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码