- 博客(56)
- 资源 (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
3182
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
1389
1
原创 mediacodec服务启动时加载media_codecs.xml
media.codec服务启动时,会创建 implementation::Omx 和 implementation::OmxStore,
2025-04-01 01:37:49
388
原创 【Android】MediaFramework小细节备忘
在这里插入图片描述](https://i-blog.csdnimg.cn/direct/386962ba13d1496a96e3bb0e3312d44f.png。getFlag的本质是,获取 persist.device_config.media_native.render_metrics_xxx 存放到 c.xxx变量中。XiaoMi 13 Ultra上返回空, 故 VideoRenderQualityTracker::Configuration c 仍然采用代码中默认的值。
2025-03-28 01:42:36
367
原创 多媒体术语扫盲备忘录
DRM: Digital Rights Management, 数字版权保护。广义上讲,能够保护数字版权(不单单是音视频)都可以叫做DRM。国外主要分为三大类, Google的Widevine, MicroSoft的 PlayReady, 以及 Apple的 FairPlay.更多细节请参考此。
2025-02-14 23:50:36
1064
原创 【深入理解FFMPEG】命令行阅读笔记
ffprobe -show_streams 查看文件的流信息, 如视频codec, 帧率,位深,nal_length_size, profile/level, has_b_frames等。ffplay -window_title “播放测试” rtmp://up.v.test.com/live/stream //实际播放不了。第一列 D表示支持解码,E表示支持编码,以及编码的音频/视频/字幕/数据/附件类型,或者只有I帧的编码压缩格式,以及有损和无损压缩类型。
2025-01-24 00:35:15
1808
原创 【Android】AHandler/AMessage/ALooper机制
以MediaCodec.cpp中, mCodecLooper 成员的使用来说明以下是具体的调用流程由于刚刚 registerHandler的对象是MediaCodec的 mCodec, 可能是ACodec,也可能是 CCodec,这里以 ACodec为例, 简单说明 AMessage 的post与 处理流程从图可知, AHandler post AMessage时, 最终会在新线程中调用AHandler (其子类)的 onMessageReceived() 函数来处理。
2024-10-24 23:55:15
623
原创 FFMPEG命令生成各国国旗
爱沙尼亚共和国国旗(英语:The National Flag of the Republic of Estonia,爱沙尼亚语:Eesti Vabariik Riigilipp),是爱沙尼亚共和国的国旗,呈长方形,长宽比为11∶7,旗面由自上而下的蓝、黑、白三色平行且面积相等的横长方形相连组成,在爱沙尼亚语中,国旗通常叫作“sinimustvalge”(意为“蓝色-黑色-白色”).俄罗斯联邦的国旗是横长方形的,其长和宽的比值大约为3:2。仅供技术交流,不代表任何意识形态。
2024-01-15 23:50:08
768
1
原创 【协议相关】一些可用的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
5100
原创 [效率提升]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
2488
原创 Android ACodec状态机模型
Android 的ACodec 用于管理底层各个Component的各种状态采用了设计模式中的状态机模式一共有九种状态,搞明白各种状态之间的转换逻辑,对于我们再去读代码会有比较好的帮助交互逻辑如下:...
2020-02-03 01:55:33
1198
原创 [算法相关]几种常用的排序算法
这里写自定义目录标题1. 冒泡排序法2. 选择排序法3.快速排序法1. 冒泡排序法冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会...
2019-12-14 22:38:42
273
原创 一种判断Android app窗口是否全屏的方法
app在手机上运行时,默认打开时是全屏的,所以获取的窗口尺寸为手机的屏幕尺寸如果手机连接到大屏上(如华为手机,锤子手机等),打开的app不一定是全屏的,获取的窗口尺寸就不是全屏尺寸,下面介绍一直方法,可以判断是否全屏WindowManager mWm = (WindowManager)this.getSystemService(Context.WINDOW_SERVICE);int mFu...
2019-07-14 19:43:53
2849
原创 Android布局控件之RelativeLayout
我们使用LinearLayout和TableLayout可以满足开发应用程序界面基本的要求。但是有时候实现界面的时候不够灵活,我们还可以使用另外一种控件RelativeLayout。RelativeLayout是一种相对布局的控件,这个容器内部的子元素们可以使用彼此之间的相对位置或者和容器间的相对位置来进行定位,类似于网页设计中的CSS。在指定控件的位置时,我们需要指定这个控件与其它控件之间的...
2019-07-08 14:59:42
1107
原创 Android Activity与Serivce的通信方式之一LocalBinder
Activity与Service的通信方式有三种:其中第一种也是最简单的一种, 即LocalBinder方式特点, Activity和Service位于同一个进程内, 简单,方便,可以实现activity和service之间的函数互相调用.service提供给activity的函数,我放到了接口 IManager中, 这样只需给activity暴露 IManager的接口函数即可, acti...
2019-06-22 12:54:19
1320
原创 [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
18268
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
495
原创 编译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
2504
原创 FFMPEG Filters模块调用概述
以 ffplay -i linmeimei.rm -vf “trim=duration=5[tmp], [tmp]reverse”详细说明 avfilter的使用步骤, 内部架构,以及数据的流向.第一步: 注册所有支持的Filtersavfilter_register_all();注意: 内部有锁保护机制,多个线程同时调用时,外部不需要再加锁保护.第二步: 创建 filtergraph...
2019-03-18 11:40:04
758
原创 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
430
原创 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
1237
翻译 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
1467
原创 QCom Decoder与GoogleDecoder输出buffer的分配方式
1、QComDecoder输出buffer的分配方式ACodec通过 allocateOutputMetadataBuffers接口来分别输出buffer,分配一个空的VideoGrallocMetadata 结构体,复制给OMX_BUFFERHEADERTYPE结构体中的pBuffer解码启动时,ACodec从NativeWindow中dequeue出ANativeWindowBuffer...
2019-02-15 19:47:36
513
原创 [Android Video FrameWork] OMXNodeIntance中动态控制log的一种方法
从事此行业N年,遇到问题上去先是一通王八拳,能把问题打死,就继续找下一个问题的茬,如果打不死,就再打一套王八拳,直至打死问题为止。王八拳(不成体系的定位方法和手段)对付问题有效果,但是效率低,我的王八拳主要是:加log,编译,替库,运行,看log, 加log,编译,替库,运行,看log……运用这种磨豆腐的磨劲,磨死了好多问题,但 碰到流程套路深的框架和体系,这个效率实在实在是太低了,有...
2019-02-03 14:31:56
3326
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
1932
原创 [Android Video Framework]ACodec加载OMX
OpenMAX确立了一套标准的接口,上层App直接调用这些接口,底层硬件厂商直接实现这些接口,从而实现了上层软件开发与底层芯片开发地彻底分离,加速了跨平台的多媒体组件的开发、整合和编程。Android上的MediaCodec是通过ACodec来加载openmax层,了解OMX加载过程,有助于我们更好的分析问题和解决问题加载过程还需从ACodec::UninitializedState::on...
2019-01-31 20:54:29
3151
原创 [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
4024
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
1284
原创 【Android开发入门】二:更名、换图标、实现主界面
1 修改app 图标和 name默认app图标特别丑, 假如我们要做一个自己的微信,网上搜索微信的icon,注意一定要下载png格式的图标因为png有alpha透明通道,这样微信图标可以很容易的和各个手机的背景主题融为一体,png和jpg的区别可以参考此文章素材可以从这里下载下载不同尺寸的微信图标后,我rename 为 icon.png,并放置于 res 下不同的 mipmap文件中...
2019-01-17 19:28:04
963
原创 【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
429
原创 go语言控制android.bp选择性编译
为了降低工作量以及考虑到产品的可维护性,大部分手机厂商采用了同一套android代码对应多个产品,编译时根据配置参数选择性编译不同模块的代码。最初android的编译脚本为Android.mk,采用了Makefile的语言为了控制编译,我们可以在不同产品的BoardConfig.mk中定义 MARCO之后在Android.mk中,根据是否使用MARCO来确定编译选项以及编译代码块ifeq ...
2019-01-10 13:17:42
14421
1
原创 [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
4747
原创 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
1117
原创 使用调用栈来调试Android代码
Android代码流程比较复杂,单纯看代码很容易跟丢,如果能在对应位置增加调用栈函数,运行时,我们可以根据调用栈来退出安卓代码的调用流程,可以事半功倍。1、java代码java代码中加调用栈方法很简单,抛一个异常即可。import android.util.Log;Log.i(TAG, Log.getStackTraceString(new Throwable()));注意,有的jav...
2018-11-30 20:37:06
816
MKV封装协议手册
2016-11-20
ISO-639-2 language查询手册
2016-11-20
AudioPolicyManager中loadHwModule流程
2018-11-27
mkv解析工具
2016-11-20
最新H.264编码协议(2017版)-T-REC-H.264-201704-I!!PDF-E.pdf
2018-01-02
测试视频1-linmeimei.rm
2019-03-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人