- 博客(22)
- 收藏
- 关注
原创 Android 万能音频播放器 三 ffmpeg + opensl 实现声音的播放
Android 万能音频播放器三 ffmpeg + OpenSL 实现声音的播放前言在上几篇的文章中已经讲到了如何用OpenSL播放PCM数据,本篇文章主要讲解如何使用FFmepg 解码和重采样出PCM数据,并使用OpenSL 进行播放,主要知识点采样率:每秒对音频数据采样的个数(44100)采样位数:存储采样数据的位数(16bit 2字节)输出声道:单声道,立体声等重...
2018-07-09 15:31:25
1050
原创 Android OpenSL介绍 并实现播放PCM功能
目录Android 万能音频播放器 一 C++多线程解码音频数据 Android 万能音频播放器 二 C++队列存放AvPacket 前言简单来说OpenSL ES是一个嵌入式、跨平台、免费的、音频 处理库,本文旨在介绍OpenSL的使用方法和参数设置,绝大部分内容参考Android官方NDKdemo,地址为android NDK demo,想学NDK开发的伙伴可以去参考一下,...
2018-07-03 10:15:06
1703
原创 Android 万能音频播放器 二 C++队列存放AvPacket
Android 万能音频播放器 二 C++队列存放AvPacket前言本文为Android万能因音音频播放器的第二篇,是上一篇文章Android 万能音频播放器 一 C++多线程解码音频数据 的延续,本文的实现功能是蒋解码出的AvPacket放到队列中,为什么放到队列中呢?生产者消费者模式嘛,还有就是容易控制播放状态,如果是在音视频播放的过程中,还可以方便做音视频同步,如果对NDK中消费...
2018-07-01 15:57:14
1035
原创 Android 万能音频播放器 一 C++多线程解码音频数据
Android 万能音频播放器一 C++多线程解码音频数据前言如果对Android NDK 下的C++ 多线程不了解的话可以看这篇文章Android NDK 多线程 本系列将用到Android NDK,C++,FFmpeg等相关知识,努力做好SDK的封装,方便以后在项目中可以复用。本章实现FFmpeg在C++子线程中解码音频数据,得到数据包AVPacket AVPacket:存放...
2018-06-30 15:56:09
1386
原创 Android NDK C++ 实现生产者消费者模式(线程加减锁)
Android NDK C++ 实现生产者消费者模式(线程加减锁)前言生产者消费者模式是什么?可以自己百度查一下,谢谢,这里就不过多的介绍了,本文章只介绍容易出错点儿,和基本的用法,并实现一个简单的demo。相关函数介绍列表内容...
2018-06-26 21:38:43
838
原创 Android NDK C++ 子线程 调用java方法生成UUID
Android NDK C++ 子线程 调用java方法生成UUID前言众所周知c++代码生成UUID非常不方便,本章在讲解调用java代码的同时,也会讲解子线程在使用Env时需要注意的几个经常容易犯错误的点儿,如果你还对NDK中的多线程不了解,可以阅读上一篇文章Android NDK C++中的多线程...
2018-06-26 16:13:51
1293
原创 Android NDK C++中的多线程
Android NDK C++中的多线程前言 我们都知道Android是基于Linux内核的,而Linux是遵循POSIX线程标准的,POSIX线程库中有 一系列Pthreads API方便我们对Linux线程的操作。所以我们在Android中使用C/C++线程也就转到 了使用POSIX线程库。他们都在头文件“pthread.h”中。函数相关 1、pthread_t: 用于声明...
2018-06-25 23:20:49
4272
原创 Android ffmpeg 音频的解码和播放
Android ffmpeg 音视频的解码和播放FFmpeg在音视频开发的地位不必多说,它已经是行业的一个品牌标杆。本篇文章探讨使用FFmpeg进行音频解码,然后反射调用android系统自带的AudioTrack和OpenSL ES两种播放方式。首先谈下FFmpeg解码流程,步骤包括:注册组件、分配FormatContext、打开音频文件、获取输入文件信息、获取音频流索引位置、获取音频解...
2018-06-13 17:16:56
1544
原创 Android ffmpeg 音频解码并保存为PCM数据
PCM介绍 PCM(Pulse Code Modulation),脉冲编码调制。人耳听到的是模拟信号,PCM是把声音从模拟信号转化为数字信号的技术。原理是用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲(脉搏似的短暂起伏的电冲击),把这些脉冲的幅值按一定精度进行量化,这些量化后的数值被连续的输出、传输、处理或记录到存储介质中,所有这些组成了数字音频的产生过...
2018-06-13 15:10:58
1017
原创 Android ffmpeg ubuntu16.04下订制化的交叉编译
Android ffmpeg ubuntu16.04下订制编译知识准备ffmpeg是个重量级的音视频相关库,在编译ffmpeg之前需要对ffmpeg各部分的功能有所了解,这样才能订制化的编译出自己需要的so,你也不想编译出来的so加起来10M多吧 libavcodec 包含全部FFmpeg音频/视频编解码库。 libavformat:实现了流媒体协议(udp、rtp、rt...
2018-06-06 10:30:16
595
原创 Android音视频 原生api解码mp4并实现播放功能
原生api解码mp4并实现播放功能基础知识Android系统提供了三个类MediaExtractor,MediaFormat,MediaCodec来帮助用户实现音视频解码,接下来分别介绍一下各自的功能。MediaExtractor -Extractor抽油烟机,负责将指定类型的媒体文件从文件中找到轨道,并填充到MediaCodec的缓冲区中MediaFormat 封装描述媒体数...
2018-06-01 15:44:57
3538
2
原创 Android音视频 初始AudioTrack和PCM的录制与播放
初始AudioTrack和PCM的录制与播放Audio系统先看看Audio里边有哪些东西?通过Android的SDK文档,发现主要有三个:AudioManager:这个主要是用来管理Audio系统的AudioTrack:这个主要是用来播放声音的AudioRecord:这个主要是用来录音的其中AudioManager的理解需要考虑整个系统上声音的策略问题,例如来电话铃声,短信...
2018-06-01 11:13:54
536
原创 Android音视频 原生方法生成PCM 以及PCM转为wav
PCM介绍 PCM(Pulse Code Modulation),脉冲编码调制。人耳听到的是模拟信号,PCM是把声音从模拟信号转化为数字信号的技术。原理是用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲(脉搏似的短暂起伏的电冲击),把这些脉冲的幅值按一定精度进行量化,这些量化后的数值被连续的输出、传输、处理或记录到存储介质中,所有这些组成了数字音频的产生...
2018-05-31 16:47:12
3995
原创 android 6.0 动态权限获取
6.0中危险权限单单的manifest中注册一下是行不通了的,这是就需要代码去动态申请,步骤如下 1 在AndroidManifest文件中添加需要的权限。 这个步骤和我们之前的开发并没有什么变化,试图去申请一个没有声明的权限可能会导致程序崩溃。 2 检查权限if (ContextCompat.checkSelfPermission(thisActivity,
2017-04-18 13:52:59
379
原创 android中CountDownTimer的使用
在平时我们编程的时候,经常会用到倒计时这个功能,这时有人会使用handler+thread+递归实现这个功能。这样从内存优化上是不可取的,其实android早就为我们封装了CountDownTimer类用以实现这个功能,在一个TextView不断显示剩下的时间,代码如下: private TextView vertifyView; //第一个参数表示总时间,第二个参数表示间隔时间。
2017-04-17 14:07:27
489
原创 java中随机数的生成
在j2se里我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他就是个100以内的随机,这个在j2me中没有。 在java.util这个包里面提供了一个Random的类,我们可以新建一个Random的对象来产生随机数,他可以产生随机整数、随机float、随机double,随机long,这个也是我们
2017-04-17 13:58:08
554
原创 内存优化之图片优化
每当碰到一些大图片的时候,我们如果不对图片进行处理就会报OOM异常,这个问题曾经让我觉得很烦恼,后来终于得到了解决,那么现在就让我和大家一起分享一下吧。 这篇博文要讲的图片缓存机制,我接触到的有两钟,一种是软引用,另一种是内存缓存技术。先来看下两者的使用方式,再来作比较。除了加载图片时要用到缓存处理,还有一个比较重要的步骤要做,就是要先压缩图片。 压缩图片至于要压缩到什么状态就要看自己当时的处境了
2017-04-17 13:38:00
318
原创 android 浅入浅出看一下事件传递
事件传递三大方法dispatchTouchEvent (分发事件 retrue ture 分发,false 不分发)onInterceptTouchEvent (拦截事件 etrue ture 拦截,false 不拦截)onTouchEvent (触摸事件 return true 消费,false 不消费)浅入事件传递在这里空洞的解释,就好像玩游戏的时候,你女朋友各种找事儿一样,永远的无法理
2017-03-31 12:01:20
242
原创 LayoutInflater.inflater()参数解释
LayoutInflater.inflater()方法就是根据一个xml文件来生成一个view对象,注意跟getviewbyid的区别,后者是从view独享中找到指定的控件。在LayoutInflater中对inflater()有四种重载分别是public View inflate(int, ViewGroup)public View inflate(XmlPullParser, ViewGro
2017-03-30 17:18:31
752
原创 android 自定义view时,实现动起来的几种方法
前言在自定义view时如何让她动起来呢?本人在14年面世的时候就被问到了listview下拉刷新时,如何下拉如何上移,还记得本人当初的答案是使用属性动画,被人好好的鄙视了一番,说多了,好了拔剑吧offsetLeftAndRight(offsetX) or offsetTopAndBottom(offsetY)layout方法动态设置margin动态设置pading(专门试了一下可以使用)s
2017-03-29 17:24:38
1012
原创 自定义scrollview时,遇到的坑
最近要实现一个自定义scrollview,然后在完成后发现滑动时并不是预期的效果,检查了很多次代码都没有发现bug(确保ontouchevent()方法正确) 折腾了两个多小时,特此记录,以示后人首先看一下系统一般自定义view时习惯写的构造函数public Song(Context context) { this(context,null); } public So
2017-03-29 16:42:37
332
原创 Okhttp的简单封装
前言此处使用的Json解析框架为gson,版本为2.8.0,okhttp版本为3.2.0。*为什么封装封装啊,简单来说就是为了以后省事。正文终于到正题了,直接上代码, OkhttpHelper 代码public class OkhttpHelper { private static OkhttpHelper mOkhttpHelper; private OkHttpClient m
2017-03-29 16:12:47
279
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人