下面三种方式前两种区别不大,缺点是必须要等到系统加载差不多了才可以使用。Android系统启动时间很长,想要早点播放的话可以选择第三种,tinyalsa播放。

一. AudioTrack

final String TEST_NAME = "testPlaybackHeadPositionAfterFlush";
final int TEST_SR = 22050;
final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO;
final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
final int TEST_MODE = AudioTrack.MODE_STREAM;
final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;//-------- initialization --------------
int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE);
byte data[] = new byte[minBuffSize/2];
//--------    test        --------------
track.write(data, 0, data.length);
track.write(data, 0, data.length);
track.play();
Thread.sleep(100);
track.stop();
track.flush();
//-------- tear down      --------------
track.release();

二. MediaPlayer

在这里插入代码片

三. tinyalsa

struct pcm_config config;
struct pcm *pcm;
char *buffer;
unsigned int size, read_sz;
int num_read;memset(&config, 0, sizeof(config));
config.channels = channels;
config.rate = rate;
config.period_size = period_size;
config.period_count = period_count;config.format = PCM_FORMAT_S16_LE;
config.start_threshold = 0;
config.stop_threshold = 0;
config.silence_threshold = 0;pcm = pcm_open(card, device, PCM_OUT, &config);
if (!pcm || !pcm_is_ready(pcm)) {fprintf(stderr, "Unable to open PCM device %u (%s)\n", device, pcm_get_error(pcm));return;
}size = pcm_frames_to_bytes(pcm, pcm_get_buffer_size(pcm));
buffer = malloc(size);
do {read_sz = size < data_sz ? size : data_sz;num_read = fread(buffer, 1, read_sz, file);if (num_read > 0) {if (pcm_write(pcm, buffer, num_read)) {fprintf(stderr, "Error playing sample\n");break;}data_sz -= num_read;
} while (!close && num_read > 0 && data_sz > 0);free(buffer);
pcm_close(pcm);

好像还有第四种,使用openGL ES,这个没怎么研究过。

音视频开发之Android端native层播放音频三种方式相关推荐

  1. android获取自定义属性,android 自定义控件中获取属性的三种方式(转)

    第一种方法,直接设置属性值,通过attrs.getAttributeResourceValue拿到这个属性值. (1)在xml文件中设置属性值 android:layout_width="f ...

  2. Android Studio导入外部资源的三种方式

    在Android Studio打开导入外资源的路径:File->Project Structure- 第一步:选择Dependencies 第二步:选择要添加依赖的modules 第三步:为mo ...

  3. android 加阴影,Android设置控件阴影的三种方式

    释放双眼,带上耳机,听听看~! 第一种方式:elevation View的大小位置都是通过x,y确定的,而现在有了z轴的概念,而这个z值就是View的高度(elevation),而高度决定了阴影(sh ...

  4. Android音视频开发之,全网疯传

    int audioFormat, int bufferSizeInBytes, int mode, int sessionId) * streamType,Android手机上提供音频管理策略,按下音 ...

  5. android 混音 源码,FFmpegAndroid android 端基于 FFmpeg 实现音频剪切、拼接、转码、混音、编解码;视频剪切、水印、截图、转码、编 @codeKK c开源站...

    android 端基于 FFmpeg 库的使用 添加编译 ffmpeg.shine.mp3lame.x264 源码的参考脚本 目前音视频相关处理: 音频剪切.拼接 音频混音 音频转码 音视频合成 音频 ...

  6. 迅为RK3399开发板音视频开发之Debian9 多媒体测试

    iTOP3399平台 Debian 系统音视频部分应用层软件采用的是 Gstreamer,支持硬件编解码.本节所有的 示例均是基于 Gstreamer 命令行的形式. iTOP3399 平台内部有一个 ...

  7. java native函数库_Java 层调用 Native 层函数的两种方式

    概述 Java 层如何调用Native层函数,大家都应该知道使用JNI(Java 本地接口). 通过在java层声明native方法,然后遵守JNI规范命名Native函数,即可建立Java层nati ...

  8. 音视频系列四 ffmpeg配合opensl es播放音频

    文章目录 一 解码成PCM 二 opensl es创建引擎,混音器 创建引擎 创建混音器 创建播放器,注册回调函数 一 解码成PCM 流程其实和视频差不多,参考播放视频的代码,稍作增改 先定义后面需要 ...

  9. android 分屏投影,Android 双屏异显实现的三种方式

    在各种产品脑洞大开的时代,需求也是日益新异,笔者最近开发了一套双屏异显app.现在做一些总结 1.双屏异显第一种实现方式(官方提供的Presentation) Android 提供了一个叫 Prese ...

  10. android 编译宏,android 添加全局变量宏开关的三种方式

    开发的时候,我们经常会有这样的一种需求: 在什么位置(如db)保存一个变量,可以跨应用的读写此值. system.prop 我们可以在system.prop中定义一个宏开关,可以很好的实现此目的. 此 ...

最新文章

  1. eclipse adt如何切换到设计界面_APP界面设计模板|引导页该如何设计?
  2. druid配置数据库连接使用密文密码
  3. HDOJ--4821--String【弦hash】
  4. IntelliJ IDEA快捷键总结
  5. mantelhean.test r语言_请教如何将mantel test报告性的结果转化为表格。
  6. 【渝粤教育】广东开放大学 Python基础与应用 形成性考核 (21)
  7. 2012-1-31学习日记
  8. Axure8.0 安装 汉化 简单使用
  9. ligerui combobox ajax,jquery ligerUI中ligerComboBox 初始值有关问题
  10. Python实验、Pandas数据处理与分析
  11. log4j2:占位符引起的内存泄漏bug
  12. 过拟合的原因和解决方案
  13. 用python写情书_Fedora写给Python的情书
  14. kmeans算法c语言实现,能对不同维度的数据进行聚类
  15. 聚苯乙烯负载酸性离子液体(P[Vim-PS][HSO4])|活性炭(AC)负载酸性离子液体[Hmim-BS][HSO4]齐岳
  16. ci写微博php,php(CI框架)+ajax实现类似微博的东东
  17. Redhat linux 安装 gcc编译器,Gcc源码包,rpm包安装方法!
  18. Fiddler 抓包工具总结(转)
  19. 如何在零件层隐藏/显示SOLIDWORKS尺寸?
  20. c#html表格样式大全,如何在C#中以漂亮的表格格式表示数据?

热门文章

  1. 为什么要进行网站流量分析?从6个方面告诉你答案
  2. 第二十九章、containers容器类部件QFrame框架部件详解
  3. Mac下禁用开机自启软件
  4. winedit自动换行
  5. python floor函数_Python floor() 函数 - Python 教程 - 自强学堂
  6. Minimum supported Gradle version is 5.4.1. Current version is 4.10.1. If using the gradle wrapper
  7. 免费视频直播、点播H5播放器SkeyeWebPlayer适配移动端
  8. Testbench的激励添加和书写技巧
  9. ffmpeg+mencoder环境搭建和视频处理总结(4m/1/99)
  10. 华罗庚 计算机,华罗庚有关计算机的故事