audio的获取途径和播放输出途径---播放输出

常见设备有哪些途径可以获取音频和播放输出音频的途径(代码模块)?
基于vlc3.0.6源码:
这里从vlc源码来分析例举一下,vlc,确实是一个功能齐全的多媒体处理系统,在wind、linux、android、ios都有提供相应的版本,其核心结构是共用的一套代码,采用插件的方式组合起来,可以方便扩展,重点是它是一个开源工程,随时下载查看其源码,这里从vlc源码来看下,支持哪些途径获取音频和播放输出音频。这些音频源途径和输出途径都是以一个插件的方式运作在vlc系统中,对于我们了解常见的音频通路有一定帮助:
输出:音频输出插件对应模块代码在 /modules/audio_output/目录下
(音频从decoder解码器解码出来,(源码在/src/input/decoder.c),调用 DecoderPlayAudio() => aout_DecPlay( p_aout, p_audio, i_rate ),即给到audio_output插件的play()接口进行播放,所有这些模块都是按照 vlc的audio_out接口编写,接口统一)
audio_output插件:
1.0 adummy.c  这是一个虚拟的输出插件,什么事都没做,没有实际价值,估计作为模块调试用。
2.0 alsa.c  linux下的alsa音频架构,这个插件使用的是alsa-lib 用户接口播放音频,linux下使用alsa-lib播放音频可参考此插件。
3.0 amem.c 这也是一个虚拟的输出插件,输出到内存中。
4.0 audiotrack.c  android 的audiotrack播放音频,不过vlc这里是通过c代码反过来调用android sdk的java代码,使用android sdk的audiotrack播放。
5.0 auhal.c 这个配合coreaudio_common.c文件,是ios中 CoreAudio,音频播放
6.0 decklink.cpp  decklink,音频采集卡,声卡,这估计是window上使用的,不清楚。
7.0 directsound.c wind上的DirectX微软公司创建的多媒体编程接口。由C++编程语言实现,玩游戏的安装游戏经常需要这个玩意
8.0 file.c  虚拟的,直接存文件。
9.0 jack.c jackaudio ???什么玩意?一个音频库。[JACK能使用ALSA、PortAudio、CoreAudio、FFADO和OSS作为硬件层的后端。此外, 还有一个虚拟的驱动(当不需要声音输出时是很有用的,例如离线渲染)和一个通过UDP协议的音频驱动(Audio-over-UDP driver)。它可以运行在Linux、Mac OS XSolarisWindowsFreeBSDOpenBSDNetBSD上] 摘自百度百科。
kai.c  。。。K Audio Interface audio output,恕见识少,找不到相关说明。
10.0 mmdevice.c  Windows Multimedia Device API audio output
11.0 opensles_android.c 安卓上的opensl标准库,在android开发者文档中可以找到相关介绍和demo,ndk提供的实现opensl标准的音频库,native层播放音频。
12.0 OOS 早期linux上的音频系统,从2.6版本开始ALSA成为Linux内核中默认的标准音频驱动程序集,OSS则被标记为废弃。
13.0 pulse.c  一个音频库,官网 https://www.freedesktop.org/wiki/Software/PulseAudio/ 相关介绍 https://www.linuxidc.com/Linux/2019-09/160687.htm[摘自百度百科]PulseAudio是一个声音服务器,一个后台进程从一个或多个音源(进程或输入设备)接受声音输入 然后重定向声音到一个或多个槽(声卡,远程网络PulseAudio服务,或其他进程)。PulseAudio的一个目的通过它是重定向所有声音流,包括那些试图访问硬件的进程(像那些遗留的基于OSS的软件)。PulseAudio通过提供适配器给那些使用不同的声音系统,像aRts和ESounD。Linux下的典型方案,用户提供配置ALSA来使用PulseAudio提供的虚拟设备。尽管应用使用ALSA会将输出的声音输出到PulseAudio,然后PulseAudio会使用ALSA它自己来访问真正的声卡. PulseAudio同样提供它自己的接口给应用程序,用来直接支持PulseAudio
14.0 sndio.c libsndfile 库,用于读写音频文件的一个c语言库 官网http://www.mega-nerd.com/libsndfile/ 这里估计是用来写文件。
15.0 tizen_audio.c Tizen,是一个操作系统https://www.tizen.org/about 。 针对于移动设备的开源嵌入式系统,类似于google的android, apple的ios, ”泰泽”是基于Linux的开源软件平台,可运行在智能手机、平板、上网本、车载信息系统和智能电视上。
泰泽的应用程序接口是基于HTML5和其它web开放标准。除了HTML5应用程序外,泰泽的SDK将包括原生开发工具包。从核心系统到核心应 用,泰泽的整个软件堆栈都会对外开放。 android使用java,tizen基于web。Tizen 1.0 SDK及源代码已于2012年4月30日发布。 这个tizen_audio就是tizen系统上的音频接口。长见识了,关于这个 Tizen系统,可以看下官网和百科,不知华为的鸿蒙系统会不会到时候也有支持☺。
16.0 waveout.c wind下的wavout api接口,用来播放音频。
其它。
上述列举出来的,涵盖了wind, linux, android, ios, tizen, 等系统平台,还包括一些其他的音频库作为输出。
在android上的播放途径,有两个,AudioTrack 用的是c调用java的api.   opensl, NDK native层 播放音频。
支持的功能和平台,是真的丰富。

发布了96 篇原创文章 · 获赞 27 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u012459903/article/details/103727581