- 博客(140)
- 资源 (5)
- 收藏
- 关注
原创 音频处理—SOX音效
音频处理目前软件开发中所做的音频处理主要包括:音频编解码3A(回声消除AEC,降噪ANC,增益AGC)混响,均衡器,压缩器等对于音频编解码,使用成熟的编解码开源库即可。对于3A算法,基本上借鉴webRTC上的3A算法扩展即可。但是对于混响,均衡器,压缩器等音效处理确是没有一种明确的处理方案,目前已知的比较靠谱的开源库就是(SOX,openAL)SOX介绍SOX:一款自称是音频处...
2019-09-27 10:37:14 7359 4
原创 Android——直播推流SDK
概述:好像有三个月没有更新博客了,年前实在是忙的累成狗啊。。。本想直播功能稳定了就没那么多事了,没想到又要搞魔法短视频功能,马丹,短视频玩成了花啊,撸起袖子干。 现在把我们项目中的直播SDK开源出来,我们是境外直播平台,百万用户,经过半年迭代,SDK已经相当稳定,大家可以放心使用。https://github.com/WangShuo1143368701/WSLiveDemo 这个sdk是...
2018-02-27 19:00:32 33271 32
原创 openGL ES进阶教程(五)制作一个简单的VR播放器,播放全景视频
之前写过全景(VR)图片,和用openGL ES+MediaPlayer 渲染播放视频+滤镜效果这一篇就在之前的基础上实现一个最简单的VR播放器,播放全景视频。概述:全景视频是一种用3D摄像机进行全方位360度进行拍摄的视频,用户在观看视频的时候,可以随意调节视频上下左右进行观看。展示:“身临其境的枪战” 可见晃动手机,视图也跟着转! 原理:1.用OpenGL绘制一个球。 2.MediaPl
2017-08-01 20:44:51 8033 5
原创 ffmpeg实战教程(十)ffmpeg/camera实现最近很火的视频壁纸,相机壁纸
本篇实现一个有意思的玩意儿,视频壁纸,相机壁纸 这玩意好像现在还都是国外版本,哈哈先上图: 视频壁纸 相机壁纸 1.动态壁纸制作的知识:每一个动态壁纸都继承自WallpaperService,其中必须实现的抽象方法onCreateEngine,返回一个Engine对象,实际上所有的绘图与刷新都是由engine完成。如下public class VideoLiveWallpaper exten
2017-05-16 10:19:50 6933 1
原创 国际化开发 - 时区知识
时区概念:时区是地球上具有统一的法定标准时间的区域。由于区域的法律定义可能千差万别且经常更改,因此通常需要数据库或查找表才能正确应用时区规则。时区数据库目前通常使用两种不同的时区数据库:1.Microsoft Windows时区数据库由Microsoft维护在Windows平台实现。Windows API获取本机时区key示例: "China Standard Time"2.IANA /奥尔森时区数据库也称为ZoneInfo,TZDB或TZ数据库,国际标准时区在Linux,Ma
2020-07-09 16:57:15 1075
原创 Android 音频系统播放延迟时间获取(latency)
1.系统AudioManager类里面有一个隐藏接口:可以用反射获取到系统播放硬件延迟 AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); Method m = am.getClass().getMethod("getOutputLate...
2020-03-16 16:22:30 4584 1
原创 ExoPlayer+FFMpeg软解
概述ExoPlayer是Google开源的Android平台媒体播放器。 它是Android的MediaPlayer API的替代品。相比于IJKPlayer,EXOPlayer更易于拓展,功能更多,bug更少。ExoPlayer虽然不支持软解但是为开发者扩展软解预留了接口。网上竟然搜不到ExoPlayer+软解的扩展实现,那就有必要来一篇了hhh。预先准备:1.下载NDK(要下载NDK...
2019-05-21 17:06:48 10762 5
原创 Android 耳返实践 OpenSL ES AAudio Oboe
耳返概述:耳返主要实现监听的功能,在低延时的情况下可以给主播一个比较真实音频的反馈,在演唱会等专业场景里比较常用。技术实现上来说就是要时时的把录制进的音频数据立刻播放出去,当然这个过程要低延迟。AudioRecord,AudioTrack在Android系统上做耳返,实现一个高性能的音频录制音频播放是一件很痛苦的事;因为我们并不能直接使用系统的AudioRecord,AudioTrack。...
2019-02-27 19:39:49 7064 4
原创 视频录制与编辑架构设计
视频录制模块视频录制由视频预览、伴奏播放、视频录制/暂停、倍速/半速录制四部分组成。(1)视频预览在Android&IOS平台我们可以使用自己的Camera+OpenGL ES进行视频的预览,这里的预览过程一般就是从相机获取纹理ID并进行诸如美颜、贴纸等特效的处理,之后再绘制到相应的View上。(2)伴奏播放伴奏播放是指将一个伴奏文件以m4a或mp3形式下载到本地,随后对文件进...
2018-09-29 10:10:37 2639
原创 MediaCodec+MediaExtractor+TextureView+AudioTrack实现简易视频播放器
MediaCodec,MediaExtractor,TextureView这三个类的作用就不说了。 https://blog.csdn.net/column/details/15450.html主要思路流程:MediaExtractor解封装,拿到H264数据。 MediaCodec把数据解码到Surface中。 TextureView展示Surface中的数据。当然这个还可以用...
2018-07-28 17:30:46 2964 4
原创 Android消息传递机制总结
由于直播项目的推流SDK,拉流SDK已经稳定。所以这段时间一直开发业务层新需求。业务层的核心灵魂就是层层的消息传递,今天就来总结一下andorid的应用层的各种消息传递。1.线程间通讯 ——— Handler,HandlerThread等。 2.组件间通信 ——— BroadcastReceiver,接口回调等。 3. 第三方通信 ——— EventBus,rxBus 4.进程间通
2017-11-23 15:43:38 1777
原创 openGL ES进阶教程(六)美颜滤镜之美白,磨皮,红润
网上搜罗了一堆的美颜滤镜效果,可惜尽不如人意。最后偶然看到ios上提供了一个用OC写的美颜滤镜,好吧,改写成Java的试试。好在大学时期搞过一段时间IOS开发,用自己的半吊子的水平,没想到还真改成功了。先上效果图:网上搜涨痘痘的图片,搜到刘涛了,罪过罪过~原图:美颜后:可见有四个可滑动的bar,从上到下分别是,磨皮度,磨皮值,美白,红润。美颜原理磨皮:本质就是让像素点模糊,可以使用高斯模糊,但是可能
2017-09-01 20:17:12 18874 9
原创 ffmpeg实战教程(十三)iJKPlayer源码简析
要使用封装优化ijk就必须先了解ffmpeg,然后看ijk对ffmpeg的C层封装! 这是我看ijk源码时候的笔记,比较散乱。不喜勿喷~ijk源码简析:1.ijkplayer_jni.c 封装的播放器JNI层 API,对应java层调用。2.ijkplayer.c 封装的播放器API,对应给JNI层调用3.ff_ffplay_options.c 参
2017-07-01 10:34:15 6893
原创 openGL ES进阶教程(四)用openGL ES+MediaPlayer 渲染播放视频+滤镜效果
之前曾经写过用SurfaceView,TextureView+MediaPlayer 播放视频,和 ffmpeg avi解码后SurfaceView播放视频 ,今天再给大家来一篇openGL ES+MediaPlayer来播放视频。。。。当年也曾呆过camera开发组近一年时间,可惜那时候没写博客的意识,没能给自己给大家留下多少干货分享。。。上个效果图吧:用openGL着色器实现黑白(灰度图)效果
2017-05-27 09:50:55 9684 7
原创 AndroidN DisplayManagerService源码简析,亮屏流程分析
PowerManagerService源码分析 :http://blog.csdn.net/king1425/article/details/70224476 Android的亮屏流程从android系统结构层次来分可以分为三个流程。App应用唤醒源;Framework层Power结合Display,Light服务做亮屏绘制准备工作;底层驱动点亮背光灯。这里重点分析一下Framework层亮屏的一
2017-05-25 19:34:24 3743 1
原创 openGL ES进阶教程(三)用openGL实现动态壁纸,就是这么简单
网上动态壁纸的实现教程有很多,但是用openGL实现动态壁纸的教程却是寥寥无几,那么今天就带领大家学习用openGL实现动态壁纸,起一个抛砖引玉吧。在之前曾写过一篇 ffmpeg/camera实现最近很火的视频壁纸,相机壁纸 ,动态壁纸的实现套路已经写了,今天就不追述了。老规矩,先看效果图让大家有个概念:大家也看出来了,没错,是基于上篇openGL ES进阶教程(二)之全景图片 实现的。下面就具体说
2017-05-24 20:18:57 4015 2
原创 ffmpeg实战教程(十二)为视频添加/更换背景音乐
2017年,各种关于视频处理的功能层出不穷,现在基本上大多APP都有视频上传播放功能。 然而上传,播放可用的优秀框架有很多,我们在此就不说了。 本篇我们就做一个用ffmpeg给视频添加/更换背景音乐的功能UI界面有两个输入框,第一个填入要加背景音乐的视频文件,第一个要添加音乐的文件。 然后点击按钮。 可见在手机根目录生成了一个合成的视频文件。试播一下,发现已经有了背景音乐。 其实现原理主要是
2017-05-22 17:59:14 11433 11
原创 ffmpeg实战教程(十一)手把手教你实现直播功能,不依赖第三方SDK
直播,2016最火的技术之一了,更多的关于直播的知识:http://blog.csdn.net/king1425/article/details/72489272 …这篇我们就不依赖任何集成好的SDK,自己搭建服务器,用ffmpeg+nginx实现手机直播功能先上图:推流的手机拉流的网页和VL播放器拉流的手机客户端对于nginx服务器的搭建之前有写过:ffmpeg实战教程(九)windows下ff
2017-05-19 20:24:01 18836 9
原创 关于音视频直播技术的总结
流媒体协议 流媒体协议是服务器与客户端之间通信遵循的规定。当前网络上主要的流媒体协议如图所示。直播平台参数对比 主流互联网视音频平台直播服务的参数对比如图所示:直播技术架构图:可以看到直播的流程可以分为如下几步:采集 —>处理—>编码和封装—>推流到服务器—>服务器流分发—>播放器流播放1.音视频采集采集是整个视频推流过程中的第一个环节,它从系统的采集设备中获取原始视频数据,将其输出到下一个环节
2017-05-18 19:41:15 13890
原创 openGL ES进阶教程(二)之全景图片
全景又被称为3D实景,是一种新兴的富媒体技术,其与视频,声音,图片等传统的流媒体最大的区别是“可操作,可交互”。 全景分为虚拟现实和3D实景两种。虚拟现实是利用maya等软件,制作出来的模拟现实的场景,代表有虚拟紫禁城等;3D实景是利用单反相机或街景车拍摄实景照片,经过特殊的拼合,处理,让作者立于画境中,让最美的一面展现出来。全景顾名思义就是给人以三维立体感觉的实景360度全方位图像~ 此图像最大
2017-05-17 20:13:27 6766 1
原创 openGL ES进阶教程(一)之粒子光束
2016AR/VR喊的火热,这些在Android上的实现或多或少与openGL 有关。OpenGL能做的事情太多了!很多程序也看起来异常复杂。更有可能因为某一步的顺序错误导致最后渲染出错,这是因为,OpenGL和我们现在使用的C++、java这种面向对象的语言不同,OpenGL中的大多数函数使用了一种基于状态的方法。你可以看到Android中的播放器原理,就是API改变播放状态,逻辑性非常强~本
2017-05-17 09:12:46 5561 1
原创 ffmpeg实战教程(九)windows下ffmpeg命令+nginx + rtmp实现推流,拉流。
概述Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 nginx-rmtp-module是Nginx服务器的流媒体插件。nginx通过rtmp模块提供rtmp服务, ffmpeg推送一个rtmp流到nginx, 然后客户端通过访问nginx来收看实时视频流。先介绍一下windows下搭建nginx + rtmp有两种方案: (一) 1.下载ng
2017-05-15 14:41:14 21013 9
原创 ffmpeg实战教程(八)Android平台下AVfilter 实现水印,滤镜等特效功能
上一篇我们实现了Android平台解码avi并用SurfaceView播放。 ffmpeg实战教程(七)Android CMake avi解码后SurfaceView显示 本篇我们在此基础上实现滤镜,水印等功能。对ffmpeg不熟的客官看这里:ffmpeg源码简析(一)结构总览 先上两张效果图: 黑白:const char *filters_descr = “lutyuv=’u=128:v=12
2017-05-11 11:52:35 5168 4
原创 ffmpeg实战教程(七)Android CMake avi解码后SurfaceView显示
在上一篇文章中实现了Android平台MP4解码YUV数据, 本篇我们实现Android平台解码avi并用SurfaceView播放。先上图看效果:思路: 1.把封装好的视频数据解码为YUV 2.YUV数据转化为RGB。 3.一帧一帧的传给SurfaceView显示出来PS: 其实YUV数据可直接在SurfaceView显示,在研究Android系统多媒体框架的stagefright视频显
2017-05-10 09:30:58 4763 5
原创 ffmpeg实战教程(六)Android CMake实现解码(MP4转YUV)
在前面的文章中我们用ffmpeg在windows上实现了多种功能,下面系列的文章我们将移植到Android系统上实现。我们将使用最新版:最新版ffmpeg ffmpeg3.3 新版Android studio Android studio2.3 新版JNI编译方式 CMake对于Android开发者或许对C/C++/J
2017-05-09 11:55:49 10035 3
原创 ffmpeg源码简析(十三)ffmpeg API变更 2009-03-01—— 2017-05-09变更
Add:新增的Change/Rename:修改的Deprecate:过时的。以后很有可能删除。Remove:删除的The last version increases were:libavcodec: 2015-08-28libavdevice: 2015-08-28libavfilter: 2015-08-28libavformat: 2015-08-28libavr
2017-05-09 10:43:32 32080 3
原创 学openGL必知道的图形学知识
OpenGL基本原理OpenGL是将用数学语言和色彩等信息描述的三维空间物体通过计算转换成二维图像并显示出来的程序库。三维空间中的对象被描述成一系列的顶点(用来定义几何对象)或像素(用来定义图像)。 OpenGL对数据进行几个步骤的处理将其转换成像素,这些像素存放帧缓冲区中形成最终需要的图形。OpenGL 纹理介绍OpenGL 中的纹理可以用来表示图像、照片、甚至由一个数学算法生成的分形数据。每个
2017-05-08 17:23:10 5657
原创 JNI高阶知识总结
JNI与NDK的关系NDK可以为我们生成了C/C++的动态链接库,JNI是java和C/C++沟通的接口,两者与android没有半毛钱关系,只因为安卓是java程序语言开发,然后通过JNI又能与C/C++沟通,所以我们可以使用NDK+JNI来实现“Java+C”的开发方式。JNIEnv与JavaVMJNIEnv 概念 : 是一个线程相关的结构体, 该结构体代表了 Java 在本线程的运行环境 ;
2017-05-08 12:24:31 2221
原创 ffmpeg实战教程(五)libswscale,libavfilter实践指南
1.libswscale实现YUV转RGBlibswscale里面实现了各种图像像素格式的转换。libswscale使用起来很方便,最主要的函数只有3个: (1) sws_getContext():使用参数初始化SwsContext结构体。 (2) sws_scale():转换一帧图像。 (3) sws_freeContext():释放SwsContext结
2017-05-05 16:59:18 4387 1
原创 ffmpeg实战教程(四)格式转换如MP4转MKV等
知识延伸:I,P,B帧和PTS,DTS的关系基本概念:I frame :帧内编码帧 又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。P frame: 前向预测编码帧 又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信
2017-05-05 10:37:47 8222 1
原创 ffmpeg实战教程(三)音频PCM采样为AAC,视频YUV编码为H264/HEVC
音频PCM采样数据编码为压缩码流(MP3,WMA,AAC等)简单介绍一下流程中各个函数的意义:av_register_all():注册FFmpeg所有编解码器。avformat_alloc_output_context2():初始化输出码流的AVFormatContext。avio_open():打开输出文件。av_new_stream():创建输出码流的AVStream。avcodec_find_
2017-05-04 20:28:15 5733 2
原创 ffmpeg实战教程(二)用SDL播放YUV,并结合ffmpeg实现简易播放器
我们先实现用SDL播放YUV数据先来了解一下基本概念SDL基本函数: [初始化] * SDL_Init(): 初始化SDL。 * SDL_CreateWindow(): 创建窗口(Window)。 * SDL_CreateRenderer(): 基于窗口创建渲染器(Render)。 * SDL_CreateTexture(): 创建纹理(Texture)。[循环渲染数据] *
2017-05-04 15:33:08 5364
原创 ffmpeg实战教程(一)Mp4,mkv等格式解码为h264和yuv数据
FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。而网上对这些功能的使用大多是基于命令行的。这不利于我们深入学习定制化ffmpeg,今后我将写一系列的用代码实现这些功能的教程供大家学习。这系列的前部分我打算写在windows上的实现,后部分写移植到Android系统上实现。 代码实现的前提是对ffmpeg源码有一定的了解,如果你不了解可以看这里 ffmpeg源
2017-05-04 12:16:41 21125 15
原创 ffmpeg源码简析(十二)FFMPEG中的主要结构体总结
FFMPEG中结构体很多。最关键的结构体可以分成以下几类:a) 解协议(http,rtsp,rtmp,mms)AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。每种协议都对应一个URLProtocol结构。(注意:FFMPEG中文件也被当做一种协议“file”)b)
2017-05-02 14:54:21 1548
原创 android源码分析——事件输入流程MotionEvent事件处理流程
Input事件输入系统之应用MotionEvent触摸事件处理流程 输入事件一般分为KeyEvent按键事件,和MotionEvent触摸事件,也就是我们平时说的touch事件,事件的传递流程相当复杂庞大, 我们先暂时绕开那个庞大的系统来谈谈上层应用如何接收到MotionEvent事件然后处理的,在讲这个之 前我们先提几个相关类: Window,WindowManager,PhoneWind
2017-05-02 09:52:16 2691
原创 细数Android5.0到Android7.X 多媒体技术新特性
Android 5.0 行为变更媒体播放如果您要实现显示媒体播放状态或传输控件的通知,请考虑使用新的 Notification.MediaStyle 模板,而不是自定义 RemoteViews.RemoteView 对象。无论您选择使用哪个方法,请务必将通知的可见性设为 VISIBILITY_PUBLIC,以便可通过锁定屏幕访问您的控件。请注意,从 Android 5.0 开始,系统不再将 Remo
2017-04-28 16:23:26 4520
原创 Android Multimedia实战(六)音频 MediaRecorder和AudioRecord录音与MediaPlayer和AudioTrack播放
录制声音MediaRecorder和AudioRecord 区别MediaRecorder和AudioRecord都可以录制音频,区别是MediaRecorder录制的音频文件是经过压缩后的,需要设置编码器。并且录制的音频文件可以用系统自带的Music播放器播放。 而AudioRecord录制的是PCM格式的音频文件,需要用AudioTrack来播放,AudioTrack更接近底层。 在用Med
2017-04-28 15:25:23 2880
原创 Android Multimedia实战(五)MediaCodec编码解码实例解析
MediaCodec概述MediaCodec是一个Android原生的编解码器。 简单的来说,MediaCodec可以把摄像头采集的数据流编码为H264格式,这个过程是压缩过程。也可以把H264格式解码在surface类的控件上显示。我们先来看一下Android系统中解码器的命名,软解码器通常是以OMX.google开头的。硬解码器通常是以OMX.[hardware_vendor]开头的,比如TI
2017-04-28 12:00:46 4786 1
原创 Android Multimedia实战(四)MediaProjection实现截图,与MediaMuxer实现录屏为MP4,Gif格式
MediaProjection可以用来捕捉屏幕,具体来说可以截取当前屏幕和录制屏幕视频 (5.0以上)先总结下系统是如何实现组合键截屏的: 都应该知道Android源码中对按键的捕获位于文件PhoneWindowManager.java中 当满足按键条件时会用一个mHandler 开始post一个runnable,进入这个runnable中执行takeScreenshot()方法。使用AIDL
2017-04-27 15:15:43 8656 1
ant以及UiAutomatorHelper封装test封装
2016-10-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人