跨平台音频推流(mac, win)

前言

最近做了个项目,是个pc桌面应用,涉及到直播具体一点是音频直播,研究了好些框架 ffmpeg anyrtc等这些都具有跨平台的直播功能,但是对于我这个项目来说过于臃肿。比如ffmpeg 其实我只要用了它的推流功能其它的,然而要做功能阉割非常麻烦,因为ffmpeg功能太多太强大了,但是在里面学到了很多。 anyrtc比较好就是rtmp的推流跟拉流都有,但是我这个项目不需要video而且anyrtc也不支持mac,还有anyrtc的开源协议也。。。。。。 所以研究一段时间这两个框架,把录制,编码,推流的过程了解了一下最想用一些开源的框架也开发一套音频直播的小框架

准备

为了兼容win跟mac 于是研究了几个项目 portaudio mp3lame librtmp 这三个项目组合在一起就是我需要的东东了

portaudio

这是个跨平台的音频流框架,作用就是连接pc上的mic和喇叭可以进行音频的录制以及播放的功能,所以我用它在直播中充当录制的角色, 它的接口比较灵活可以定义回调接口返回采样数据(线性的pcm数据 左声道跟右声道的数据在数组里交替存放 同时可以定制位宽即每个声音值的字长), 可以定制每次采样样本的长度,以及格式 整型或者浮点型。录制的过程可以是异步并提供好相应的api

mp3lame

采集的数据是原始的pcm数据,所以需要压缩处理,学习ffmpeg的时候我了解ffmpeg的拓展mp3lame这个库,可以对pcm编码成mp3格式的,所以我选择它来当编码的角色

librtmp

这是rtmpdump项目里的一部分 也是在ffmpeg提及到的 主要是可以支持rtmp的一些衍生协议比如rtmps之类的 所以我主要是用来处理rtmp推流相关的操作, 需要注意一点是关于mp3数据的发送 rtmp数据包体第一个字节得是0x2f然后在跟上mp3的数据体

后话

把三个框架组合 加上一些逻辑控制就可以做成很存粹的一个音频直播框架,pc程序为了跨平台所以用的electron框架做的,所以还要写成一个nodejs的addons方便js代码直接使用


阅读量: