- 博客(46)
- 资源 (10)
- 收藏
- 关注
原创 产品.mk控制android.bp选择性编译
先前写了一篇文章介绍如何使用go语言去控制 Android.bp 选择性编译, 见https://blog.csdn.net/u012188065/article/details/86226934后来发现, go脚本中只能调用 build/soong/android/config.go 里面规定好的函数如果我们需要增加自己的函数, 就需要打通整个通路, 通路如下:...
2019-04-17 11:12:24 2952 1
原创 FFMPEG专题--常用命令
1、播放视频1.1 播放指定视频ffplay -i test.mp41.2 以特定大小的窗口播放视频如 以640x480的窗口来播放指定视频ffplay -x 640 -y 480 -i test.mp42、转码视频2.1 更改文件的封装格式如 mp4->mkv, 示例:ffmpeg -i test.mp4 -vcodec copy -acodec copy -f m...
2019-01-30 15:32:37 871 1
原创 FFMPEG命令生成各国国旗
爱沙尼亚共和国国旗(英语:The National Flag of the Republic of Estonia,爱沙尼亚语:Eesti Vabariik Riigilipp),是爱沙尼亚共和国的国旗,呈长方形,长宽比为11∶7,旗面由自上而下的蓝、黑、白三色平行且面积相等的横长方形相连组成,在爱沙尼亚语中,国旗通常叫作“sinimustvalge”(意为“蓝色-黑色-白色”).俄罗斯联邦的国旗是横长方形的,其长和宽的比值大约为3:2。仅供技术交流,不代表任何意识形态。
2024-01-15 23:50:08 523
原创 【协议相关】一些可用的RTMP,HTTP等源
端午在家看ffmpeg的推流拉流命令仿佛无意间发现了新大陆windows平台上下载了ffmpeg编译好的静态包可以直接播放http https rtmp等协议的流为了验证这些播放过程特地从网址搜集了一些亲测可用的url电脑联网后 cmd窗口中直接 ffplay + 这些url 测试即可参考链接中还有一些港澳台以及国外的流不知道是否需要梯子才可以验证 所以没有列出来rtmp直播流耀才证券: rtmp://202.69.69.180:443/webcast/bshdlive-pcCCTV-
2020-06-28 00:51:07 4691
原创 [效率提升]Linux下搭建OpenGrok
1. 搭建JDK环境上oracle官网下载jdk包https://www.oracle.com/sg/java/technologies/javase-downloads.html之后设置环境变量JAVA_HOME={jdk_dir}JAVA_JRE=${JAVA_HOME}/jre结果检验:命令行输入:java -version应当有类似如下打印:openjdk version...
2020-05-01 01:06:44 2283
原创 Android ACodec状态机模型
Android 的ACodec 用于管理底层各个Component的各种状态采用了设计模式中的状态机模式一共有九种状态,搞明白各种状态之间的转换逻辑,对于我们再去读代码会有比较好的帮助交互逻辑如下:...
2020-02-03 01:55:33 1107
原创 [算法相关]几种常用的排序算法
这里写自定义目录标题1. 冒泡排序法2. 选择排序法3.快速排序法1. 冒泡排序法冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会...
2019-12-14 22:38:42 187
原创 一种判断Android app窗口是否全屏的方法
app在手机上运行时,默认打开时是全屏的,所以获取的窗口尺寸为手机的屏幕尺寸如果手机连接到大屏上(如华为手机,锤子手机等),打开的app不一定是全屏的,获取的窗口尺寸就不是全屏尺寸,下面介绍一直方法,可以判断是否全屏WindowManager mWm = (WindowManager)this.getSystemService(Context.WINDOW_SERVICE);int mFu...
2019-07-14 19:43:53 2632
原创 Android布局控件之RelativeLayout
我们使用LinearLayout和TableLayout可以满足开发应用程序界面基本的要求。但是有时候实现界面的时候不够灵活,我们还可以使用另外一种控件RelativeLayout。RelativeLayout是一种相对布局的控件,这个容器内部的子元素们可以使用彼此之间的相对位置或者和容器间的相对位置来进行定位,类似于网页设计中的CSS。在指定控件的位置时,我们需要指定这个控件与其它控件之间的...
2019-07-08 14:59:42 935
原创 Android Activity与Serivce的通信方式之一LocalBinder
Activity与Service的通信方式有三种:其中第一种也是最简单的一种, 即LocalBinder方式特点, Activity和Service位于同一个进程内, 简单,方便,可以实现activity和service之间的函数互相调用.service提供给activity的函数,我放到了接口 IManager中, 这样只需给activity暴露 IManager的接口函数即可, acti...
2019-06-22 12:54:19 1168
原创 [Linux相关] mount(2) system call failed: Operation not supported 解决方案
新装了linux 18.04后, 挂载其他盘时,遇到了如下错误$sudo mount -t cifs -o username=xxx //172.16.x.xxx/SW_Test/ /media/SW_TESTmount: /media/SW_TEST: mount(2) system call failed: Operation not supported.后发现缺少 cifs-util...
2019-05-15 12:54:04 16719 2
原创 [git相关] 如何将开源代码包含git记录提到自己的git仓上
原理比较简单,就是让开源代码的远程仓指向要push的远程仓,之后再提交.以x264代码为例1. 下载x264代码git clone https://code.videolan.org/videolan/x264.git2. 查看x264代码远程指向$git remote -vorigin https://code.videolan.org/videolan/x264.git (fetc...
2019-03-25 16:06:48 448
原创 编译Android的x264 lib(附解决No working C compiler found 问题)
尝试编译android版本的x264 lib一 取 x264最新版的源码方法有二:1 直接 git clone 最新版的代码git clone https://code.videolan.org/videolan/x264.git2 上官网下载最新代码压缩包,解压到本地https://www.videolan.org/developers/x264.html二 写编译脚本#!/bi...
2019-03-23 17:07:16 2339
原创 FFMPEG Filters模块调用概述
以 ffplay -i linmeimei.rm -vf “trim=duration=5[tmp], [tmp]reverse”详细说明 avfilter的使用步骤, 内部架构,以及数据的流向.第一步: 注册所有支持的Filtersavfilter_register_all();注意: 内部有锁保护机制,多个线程同时调用时,外部不需要再加锁保护.第二步: 创建 filtergraph...
2019-03-18 11:40:04 684
原创 FFMPEG-Filter学习笔记-3
本文主要介绍audio filter 的用法以及一些fliter参数的感想Audio Filter7.1 acompressor - 音频压缩器7.1.1 level_in设置输入增益,默认为1, 可取范围为 [1/64, 64]具体表现为,增益越大,声音越高,但是相应的噪声也会被放大,有瑕疵音,类似低分辨率的图片转成高分辨率的图片后,会出现细节模块的现象。可以使用ffplay ...
2019-03-12 13:43:31 305
原创 FFMPEG-Filter学习笔记-2
本文主要介绍video filter 的用法Video Filter10.1 alphaextract - 提取 alpha通道的filter毋庸置疑,这个filter用于提取alpha通道的,当然只针对有alpha的视频才起作用,即颜色格式为 rgba, yuva422p等视频,我们一般使用ffmpeg命令转码获取带alpla通道的视频,其alpha均为255,所以使用ffplay ...
2019-03-08 19:16:59 968
翻译 FFMPEG-Filter学习笔记-1
1 DescriptionThis document describes filters, sources, and sinks provided by the libavfilter library.这个文件描述libavfilter库提供的filters, sources 和 sinks.2 Filtering IntroductionFiltering in FFmpeg is en...
2019-02-24 22:52:44 1346
原创 QCom Decoder与GoogleDecoder输出buffer的分配方式
1、QComDecoder输出buffer的分配方式ACodec通过 allocateOutputMetadataBuffers接口来分别输出buffer,分配一个空的VideoGrallocMetadata 结构体,复制给OMX_BUFFERHEADERTYPE结构体中的pBuffer解码启动时,ACodec从NativeWindow中dequeue出ANativeWindowBuffer...
2019-02-15 19:47:36 423
原创 [Android Video FrameWork] OMXNodeIntance中动态控制log的一种方法
从事此行业N年,遇到问题上去先是一通王八拳,能把问题打死,就继续找下一个问题的茬,如果打不死,就再打一套王八拳,直至打死问题为止。王八拳(不成体系的定位方法和手段)对付问题有效果,但是效率低,我的王八拳主要是:加log,编译,替库,运行,看log, 加log,编译,替库,运行,看log……运用这种磨豆腐的磨劲,磨死了好多问题,但 碰到流程套路深的框架和体系,这个效率实在实在是太低了,有...
2019-02-03 14:31:56 3164 3
原创 【多媒体基础】封装协议之AMR
AMR (Adaptive Multi-Rate) 是一种用于语音、演讲的音频压缩编码规范,同时也是一种封装amr帧的封装规范。我们主要介绍其封装协议。AMR主要分为两种, AMR-WB (宽带AMR, AMR Wideband) 和 AMR-NB(窄带 AMR, AMR Narrowband)。二者主要的区分在于采样率不同,AMR-WB的采样率是 16kHz, AMR-NB的采样率是8k...
2019-02-02 19:58:19 1412
原创 [Android Video Framework]ACodec加载OMX
OpenMAX确立了一套标准的接口,上层App直接调用这些接口,底层硬件厂商直接实现这些接口,从而实现了上层软件开发与底层芯片开发地彻底分离,加速了跨平台的多媒体组件的开发、整合和编程。Android上的MediaCodec是通过ACodec来加载openmax层,了解OMX加载过程,有助于我们更好的分析问题和解决问题加载过程还需从ACodec::UninitializedState::on...
2019-01-31 20:54:29 2991
原创 [Android Video Framework] MediaCodec.cpp详解
MediaCodec是Android Video Framework中一个很重要的类,可以被NuPlayer直接使用也可以被MediaCodec.java通过JNI的方式直接调用,可以赋予app很高的自由性,是多媒体开发中的一个很重要的类1、创建创建MediaCodec有两种方式,一种是 CreateByType, 根据应用或NuPlayer传递下来的MIME来创建;另一种是 Creat...
2019-01-31 17:59:18 3664 6
原创 常见NuPlayer错误log根因
1、 NuPlayerRenderer中 onDrainAudioQueue(): audio sink is not ready遇到情况是由于 AudioOutput::getPosition 返回err导致1.1 可能是由于 sp<MediaPlayerBase::AudioSink> mAudioSink 中的 mTrack 为 null当 NuPlayerDecoder ...
2019-01-22 17:17:02 1076
原创 【Android开发入门】二:更名、换图标、实现主界面
1 修改app 图标和 name默认app图标特别丑, 假如我们要做一个自己的微信,网上搜索微信的icon,注意一定要下载png格式的图标因为png有alpha透明通道,这样微信图标可以很容易的和各个手机的背景主题融为一体,png和jpg的区别可以参考此文章素材可以从这里下载下载不同尺寸的微信图标后,我rename 为 icon.png,并放置于 res 下不同的 mipmap文件中...
2019-01-17 19:28:04 849
原创 【Android开发入门】一:学会“Hello World”
随笔1、在Android Studio写第一个APP打开android studio, File-&amp;amp;gt;New-&amp;amp;gt;New Project设置 Application name(应用名), Company domain(公司域名), Project location(工程位置)一直默认next下去即可注意此处千万不要选择 Add No Activity,否则所有的资源布局等...
2019-01-17 13:52:20 363
原创 go语言控制android.bp选择性编译
为了降低工作量以及考虑到产品的可维护性,大部分手机厂商采用了同一套android代码对应多个产品,编译时根据配置参数选择性编译不同模块的代码。最初android的编译脚本为Android.mk,采用了Makefile的语言为了控制编译,我们可以在不同产品的BoardConfig.mk中定义 MARCO之后在Android.mk中,根据是否使用MARCO来确定编译选项以及编译代码块ifeq ...
2019-01-10 13:17:42 13558
原创 [Git相关] 常用git命令备忘
1、初始化git init 初始化git 仓git add &amp;amp;amp;amp;amp;amp;lt;file&amp;amp;amp;amp;amp;amp;gt; 添加改动文件至暂存区(stage)git commit -m &amp;amp;amp;amp;amp;amp;lt;message&amp;amp;amp;amp;amp;amp;gt; 提交改动文件至当前分支,并附着说
2019-01-07 15:41:07 4379
原创 Android上不可思议的MetaData::findInt32相关crash
Android上经常可以碰到一些不可思议的crash,初看没有什么思路,如果从持锁竞争角度来看,两个线程同时操作同一个变量,便会有不可思议的crash如:/system/lib/libc.so (abort+63) /system/lib/liblog.so (__android_log_assert+154) /system/lib/libstagefright_founda...
2018-12-12 20:08:37 1024
原创 使用调用栈来调试Android代码
Android代码流程比较复杂,单纯看代码很容易跟丢,如果能在对应位置增加调用栈函数,运行时,我们可以根据调用栈来退出安卓代码的调用流程,可以事半功倍。1、java代码java代码中加调用栈方法很简单,抛一个异常即可。import android.util.Log;Log.i(TAG, Log.getStackTraceString(new Throwable()));注意,有的jav...
2018-11-30 20:37:06 703
原创 【Android AudioFrameWork】AudioPolicyManager loadHwModule详解
AudioPolicyManager 构造函数中,第一步是解析audio policy相关的xml文件,第二部就是根据xml中hal的name来加载对应的audio hal,直接上loadHwModule的流程图(以android 8.1.0版本为例).局部函数详解:1、load 函数打开对应.so后,加载 struct audio_module HAL_MODULE_INFO_SYM ...
2018-11-27 20:16:45 1805 1
原创 linux 高效命令备忘录
在使用过程中,备忘各种高效的命令1、locate 命令最初在android代码中查找文件使用find命令,后来发现android代码越来越多,有时搞不准在哪个大目录下,只好在android代码的根目录下搜索,非常慢,非常影响工作效率,为了实现提高效率,早搬完砖早下班的心态,积极搜索其他高效命令,偶尔间发现了locate 命令,令人眼前一亮,三分到手。locate 命令用来查找linux的文...
2018-11-19 21:00:25 396
原创 常用android命令备忘录
1. 常用基本命令adb devices 查看当前挂载手机设备的信息adb root root userdebug版本的手机。adb remount 将 '/system' 目录改为可写入的模式,默认情况下 '/system' 部分是只读模式的。 这个命令只适用于已被 root 的设备, 即调用过 adb root之后。 注意,使用其他命令之前,最好先使用adb root和adb ...
2018-11-19 18:51:35 906
原创 audio_policy_configuration.xml 解析
android的audioserver 进程启动时,会创建AudioPolicyManager,洋洋洒洒数千行的其构造函数,第一步就是加载配置相关的xml。#define AUDIO_POLICY_XML_CONFIG_FILE_PATH_MAX_LENGTH 128#define AUDIO_POLICY_XML_CONFIG_FILE_NAME &amp;amp;amp;amp;amp;quot;audio_policy_config...
2018-11-15 16:31:18 8954 3
原创 Android手机gdb调试
众所周知,linux上gdb是一个功能非常非常强大的工具,纵然使用多年,回头一看,仍然觉得还是掌握了很小很小一部分的代码。android是基于linux的平台,所以google在android上开发了很多类linux的调试工具,如arm-linux-androideabi-gcc-ar, arm-linux-androideabi-gcc, arm-linux-androideabi-g++ 等等...
2018-11-06 13:58:04 6560 2
原创 C++中子类与父类的内存分别情况
1. unbunt上C++子类与父类内存的分别情况1.1 只有一个父类的情况1.1.1 上代码#include <stdio.h>class A {public: A() {}; ~A() {}; int a; int b;};class B : public A {public: ...
2018-11-02 14:05:47 1957
原创 【Android AudioFrameWork】 device的选择
Android AudioFrameWork中device的选择1 streamType简介2 routing_strategy 简介3 device简介4 device的选择策略4.1 固有device来源于xml:4.2 可增删设备来源于手机插拔上报事件手机上的音频模块是一个很复杂的系统,为了区分和管理,android中引入了streamType, routing_strategy和dev...
2018-10-24 15:55:56 2521
原创 常见问题解决方案
1、 git clone时,Recv failure: 连接被对方重设git clone https://android.googlesource.com/platform/frameworks/av 正克隆到 ‘av’… fatal: unable to access ‘https://android.googlesource.com/platform/frameworks/av/‘:...
2018-09-12 10:56:50 936
原创 今天犯了两个ffmpeg相关的错误
1、 av_dict_get 的正确用法正确用法1: AVDictionaryEntry *tag = NULL; tag = av_dict_get(st->metadata, “width”, tag, AV_DICT_MATCH_CASE); 正确用法2:AVDictionaryEntry *tag = av_dict_get(st->metadata, “wid...
2018-08-13 21:47:59 849
转载 生成过程中EVT, DVT, PVT分别是什么意思
转自 https://zhidao.baidu.com/question/216423280.htmlEVT: Engineering Verification Test 工程验证测试 产品开发初期的设计验证。设计者实现样品时做初期的测试验证,包括功能和安规测试,一般由RD(Research&amp;Development)对样品进行全面验证,因是样品,问题可能较多,测试可能会做N次。 ...
2018-07-16 10:43:10 14359
AudioPolicyManager中loadHwModule流程
2018-11-27
最新H.264编码协议(2017版)-T-REC-H.264-201704-I!!PDF-E.pdf
2018-01-02
ISO-639-2 language查询手册
2016-11-20
mkv解析工具
2016-11-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人