7 徐福记456

尚未进行身份认证

互联网把世界联系在一起,智能硬件为人们增添科技元素,大数据悄然崛起,云计算从天而降,人工智能更是把世界推向前所未有的高度...

等级
TA的排名 6k+

NDK编译脚本:Android.mk or CMakeLists.txt

Android NDK以前默认使用Android.mk与Application.mk进行构建,但是在Android Studio2.2之后推荐使用CMake进行编译。Cmake是跨平台编译工具,全称为cross platform make,内建c、c++、java自动相依性分析功能,关于Cmake更多详情请参考官网:https://cmake.org/documentation/。下面我们对比下Android.mk与CmakeLists.txt的语法。一、Android.mk语法以动态库编译hell

2020-05-31 23:10:00

掌握这些概念,不用担心看不懂OpenGL ES着色语言了

在OpenGL ES图形学中,着色语言(Shading Language)是一门必修课。在看openGL代码时,都会有着色语言的身影,它有自己的一套语法和格式。提供给我们进行编程的包括顶点着色器和片元着色器,它们都遵循着色语言语法。...

2020-04-01 00:50:17

人生面试官:你今天学习了吗

这段时间正逢疫情蔓延全国,有些人在家办公,有些人延缓上班,却有那么一群人在一线与疫情战斗,成为最美丽的逆行者。

2020-02-21 16:01:58

FFmpeg之FFprobe检测多媒体格式

FFmpeg里面有一个模块FFprobe(https://ffmpeg.org/ffprobe.html)专门用来检测多媒体格式数据,它的作用类似Android中的MediaMetadataRetriever。FFprobe支持检测format、streams、frames,用法与FFmpeg类似,我们可以单独使用,也可以结合在一起使用,下面举例说明一下:1、format仅是显示forma...

2020-01-12 23:43:50

Android播放器拖动进度条的小图预览

播放器拖动预览,让用户提前了解视频的波澜迭起情节,先走马观花看一遍精彩部分,满足一下好奇心,这就是拖动预览的意义所在。那么我们该如何打造高性能、高效率、高可靠的拖动预览呢?首先,小图预览强调足够小,因为预览画面分辨率没必要高清,分辨率越小解码速度越快、占用内存与CPU资源越低;其次,硬解优先,绑定Surface,解码后直接渲染到Surface上;另外,不必要解码音频,视频帧也可以选择性解码,比如只...

2019-11-19 00:09:45

Android悬浮窗播放视频

大家应该很喜欢这样的场景:一边打游戏一边看视频,生活娱乐两不误。这样应该怎么去实现呢?Android有提供悬浮窗API,使用悬浮窗播放视频,可以悬浮在其他应用上。有人可能会说,悬浮窗是不是会遮挡界面,导致用户体验不够好。总是有办法解决的,我们可以设计一个灵活的悬浮窗,窗口可以随时调整大小、任意拖动位置,这样就完美了。让我们看看小窗口播放效果。首先,需要在Manifest.xml里申请权限:...

2019-08-02 01:03:18

我们需要掌握的Kotlin之各种函数

Kotlin的函数可以定义在文件顶部,也就是说不需要创建一个类来持有一个函数。另外,Kotlin函数还包括:本地函数、成员函数、扩展函数、内联函数、高阶函数、泛型函数、递归函数。一、本地函数本地函数是函数内部包含另一个函数,也就是函数嵌套,示例代码如下:fun dfs(graph: Graph) { fun dfs(current: Vertex, visited: Set&...

2019-05-26 23:50:46

Flutter之我们需要掌握的知识点

Flutter是一套高效的跨平台免费开源SDK,可支持在移动端的Android、iOS进行开发,也支持Web桌面端、嵌入式界面开发。现在已经更新到1.5版本,下面来介绍Flutter概念、Flutter能够做什么、Flutter使用什么语言开发、Flutter框架、Flutter构建原理、Flutter如何在Android与iOS运行等等。一、Flutter是什么Flutter是Googl...

2019-05-12 22:31:01

Android Q之气泡弹窗

在AndroidQ中,用户可以借助气泡,轻松地在设备上任何位置进行多任务处理。气泡内置于“通知”系统中,它会浮动在其他应用的上层,并会跟随用户的移动而移动到屏幕的任何位置,用于取代SYSTEM_ALERT_WINDOW。气泡可以展开显示应用功能和信息,并在不使用时折叠起来。当设备处于已锁定状态或始终保持活动状态,气泡会像通知那样显示。气泡弹窗效果如下图:一、气泡配置信息气泡是一种可...

2019-05-11 23:51:54

Android Q沙盒机制之分区存储

为了让用户更好地控制自己的文件,Android Q更改了应用访问设备外部存储空间中文件的方式。Android Q用更精细的媒体特定权限来替换READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,并且无需特定权限,应用即可访问自己在外部存储设备的文件。1、针对应用私有文件的隔离存储沙盒对于每个应用,Android Q 都会创建一个“隔离存储沙盒”,以限...

2019-05-11 12:56:48

Android Q的全新特性与隐私权限

在前几天的Google I/O 2019大会上,发布了Android Q版本(Android 10)。Android Q带来了许多新特性,也增强安全隐私保护,包括支持折叠屏、非SDK接口限制、共享内存、分区存储、系统二进制文件映射到只执行内存、WLAN直连广播、全屏Intent的权限变更、夜间主题模式等等。1、非SDK接口限制为了确保应用稳定性与兼容性,Android平台开始限制我们的应用...

2019-05-10 23:50:53

Android开发中Bitmap的全面总结

Bitmap称为位图,内部结构是像素矩阵排列。它由A、R、G、B通道组成,其中A代表Alpha,R代表Red,G代表Green。我们在开发中,通常把图片转为Bitmap来处理。一、Bitmap结构类型Bitmap按照内部结构,分为6种类型Config:ALPHA_8、RGB_565、ARGB_4444、ARGB_8888、RGBA_F16、HARDWARE。常用类型是RGB_565和ARG...

2019-03-20 17:31:41

基于IjkPlayer的多路投屏直播

本文介绍的多路投屏直播,主要是智能交互会议、多人同时投屏的应用场景,但不限于此。现实生活中,早已经出现多路视频监控的应用领域。为了提高开会沟通效率,多人协同、多路投屏互动的场景应运而生。会议投屏对实时性要求非常高,目前可以做到1080P的视频流直播延时130ms左右,比游戏直播、主播直播的延时要求高很多。因此,需要基于IjkPlayer做二次修改,从缓冲队列、解码耗时、渲染队列三个方面优化。关...

2019-03-01 02:33:29

Android Jetpack之ViewModel详解

ViewModel类设计用于,以存在生命周期的方式来存储和管理UI相关的数据。ViewModel允许数据保存于配置发生变化的情况,例如屏幕旋转。ViewModel优点在于:共享数据、保存临时数据、视图解耦、利于UI更新。Android框架管理UI控制器的生命周期,例如activities、fragments。框架可能会销毁或者重新创建UI控制器,为了响应用户动作事件,或者设备事件已经不受控制了...

2019-01-01 20:14:25

Android Jetpack的分页库

Android Jetpack最近推出分页库:Paging Library,它结合RecyclerView来加载大量数据与分页显示。这意味着我们不用再手动去分页请求,也不用担心加载大量数据导致而页面ANR。分页库可以帮助我们应用程序观察和每次加载合理的数据,这样带来的优势包括:数据请求占用更少带宽、更少系统资源;在数据更新或者刷新的同时,应用程序可以快速响应用户交互。分页库的关键组件是Page...

2019-01-01 01:45:57

RTSP直播延时的深度优化

现在ijkPlayer是许多播放器、直播平台的首选,相信很多开发者都接触过ijkPlayer,无论是Android工程师还是iOS工程师。我曾经在Github上的ijkPlayer开源项目上提问过:视频流为1080P、30fps,如何优化RTSP直播的延时为大约100ms呢?发现大家对RTSP直播延时优化非常感兴趣,纷纷提问或者给出自己的观点。本文主要是总结,也是与大家探讨RTSP直播的延时优化。...

2018-12-26 02:09:22

从FFmpeg源码去解决IJKPlayer直播花屏问题

IJKPlayer是一个非常优秀的播放器,支持rtmp、rtsp、http等协议直播,也支持Android、iOS跨平台使用。我在使用IJKPlayer做rtsp直播时,发现分辨率在达到1080P甚至是4K时,由于数据量比较大,有时出现花屏,影响用户体验。那么,我们需要做的是避开花屏,增大拉流缓冲区防止溢出、丢掉不完整帧、不渲染解码出错帧。一、增大拉流缓冲区我们默认是使用udp去拉流,在u...

2018-12-21 01:58:21

Android系统定制的完整升级流程

Android系统升级分为:全量升级和增量升级。全量升级一般是首次安装,需要打全量OTA升级包;而增量升级,可以打增量OTA升级包,也可以通过静默安装来实现升级。这里主要介绍增量升级的全流程:获取升级包—>验证升级包—>版本对比—>压缩包解压—>升级—>进度监听—>重启系统。一、获取升级包获取升级包一般有两种方式:从网络下载和SD卡读取。这里介绍的是从S...

2018-11-23 01:24:49

Android系统定制的导航侧边栏

Android手机的导航栏一般都放在底部,导航按键包括返回键、home键、最近任务键。而有些Android设备希望把导航栏放在左右两边,也就是改成侧边栏,这时候就需要二次定制开发。首先,把原生的底部导航栏屏蔽掉。然后,通过WindowManager添加悬浮的侧边栏,组合按键除了返回键、home键、最近任务键,还可以自定义添加其他按键。为了响应按键点击事件,我们需要重写自定义View的onTou...

2018-11-16 11:06:06

Android三种方式截取任意界面屏幕

一、使用MediaProjectionManagerAndroid5.0之后,开放截取屏幕的API,也就是利用MediaProjectionManager创建VirtualDisplay,传入与ImageReader关联的Surface,这样就可以从ImageReader中获取到Image,然后把Image的像素数组拷贝到Bitmap,如果要保存为图片,就用得到的Bitmap压缩为JPEG格式...

2018-11-07 19:18:34

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。