自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 Android框架简介--Activity--Activity启动

以Activity A 启动 Activity B,Activity B所在进程未启动为例大体经过已经几个阶段:startActivity.png第一步 Activity A 调用AMS 启动接口这是一个binder通讯,正常启动Activity的方式,一般我们都会通过以下的方式启动一个新的ActivitystartActivity(new Intent(A_Activity...

2022-03-27 11:54:54 2460

原创 Android框架简介--启动过程--大体流程

Android设备的启动必须经历3个阶段,即Boot Loader,Linux Kernel和Android系统服务。严格来讲Android系统实际上是运行于Linux 内核上的一系列用户进程,并不算一个严格意义上的操作系统。一般面试问及启动流程都是从init进程开始启动过程.png重要的系统进程第一个系统进程--initinit进程的pid值为0.通过解析init.rc脚本来构...

2022-03-25 10:53:16 2094

原创 Android框架简介--启动过程--Zygote

Zygote是做什么的Zygote简单地说主要作用是两方面:启动SystemServer孵化应用进程Android中大多数应用进程和系统进程都是通过Zygote进程来生成。Zygote为孵化的应用程序提供了几个基础资源:常用类 :Android的Java 类库, 大部分来自于 Apache Hamony, 开源的Java API 实现,如 java.lang, java.util,...

2022-03-15 22:37:01 3534

原创 Android 利用V4L2 预览MJPEG格式 USB camera

介绍上一篇文章Android 利用V4L2 调用camera介绍了使用V4L2 接口预览camera的基本方法。目前接触过的usb camera支持的图像格式基本上只包括3种:YUVMJPEGH264其中YUV是原始数据,MJPEG和H264都是压缩编码的数据。所以对于MJPEG和H264需要先解码为原始图像数据,才能给到android显示。这篇文章主要介绍对MJPEG数据的处理准...

2022-01-18 18:03:19 3474 2

原创 Android 上层蓝牙enable流程

Android 蓝牙框架基于Android9.0 Amlogic代码分析,蓝牙应用通过 Binder 与蓝牙进程进行通信。蓝牙进程使用 JNI 与蓝牙堆栈通信,并向开发者提供对各种蓝牙配置文件的访问权限。下图显示了蓝牙堆栈的常规结构:应用框架client:frameworks/base/core/java/android/bluetooth/*servie:framework/base/services/core/java/com/android/server/BluetoothServic

2021-12-10 14:38:37 620

原创 Android 上层蓝牙框架

Android 蓝牙框架基于Android9.0 Amlogic代码分析,蓝牙应用通过 Binder 与蓝牙进程进行通信。蓝牙进程使用 JNI 与蓝牙堆栈通信,并向开发者提供对各种蓝牙配置文件的访问权限。下图显示了蓝牙堆栈的常规结构:fluoride_architecture.png应用框架client:frameworks/base/core/java/android/bl...

2021-12-09 16:26:19 1237

原创 H264系列--码流组成和分层结构

Android FFmpeg专题结构H264码流结构无论是解析视频文件或这通过网络传输, 其实都是一串字节序列. H264码流就是按照一定的规则组织排列的字节串.直观理解的角度按照从大到小分为: 视频序列, 图像帧, 片,宏块,子块码流功能的角度从码流功能的角度可以分为两层:NAL层和VCL层NAL网络提取层:负责以网络所要求的恰当的方式对数据进行打包和传送VCL视频编码层:包括核心压缩引擎和块,宏块和片的语法级别定义,设计目标是尽可能地独立于网络进行高效的编码码流解析的角度可以

2021-03-10 17:11:26 653

原创 H264系列--压缩编码技术

Android FFmpeg专题结构概述H264 无疑是目前应用最广泛的编码技术。一些比较优秀的开源库x264/openh264, ffmpeg等让人们处理h264编解码变得相对容易。为了能更好地理解和处理h264问题,还是有必要了解相关的原理H264压缩技术主要采用了以下几种方法对视频数据进行压缩:帧内预测压缩,解决的是空域数据冗余问题。帧间预测压缩(运动估计与补偿),解决的是时域数据冗徐问题。整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化。CABAC熵编码,

2021-03-04 10:09:43 595 1

原创 H264系列--简单的视频编码历史介绍

什么是视频编码所谓视频编码方式就是指通过压缩技术,将原始视频格式的文件转换成另一种视频格式文件的方式常见视频编码格式编码格式有很多,如下图:目前比较常用的编码有H26x系列 : 由ITU(国际电传视讯联盟)主导,侧重网络传输MPEG系列:由ISO(国际标准组织机构)下属的MPEG(运动图象专家组)开发PV8/PV9:VP8是类似于 H.264 的另一种视频编码,由 On2 公司开发。后来 Google 收购了 On2. 主要应用在webrtc中,音视频通话一般都是基于webrtc实现的

2021-01-22 16:09:52 903 2

原创 H264系列--压缩编码必要性和冗余

Android FFmpeg专题结构视频编码必要性视频是由一帧帧的图片组成. 以一个时长 1小时,帧率为30fps, 分辨率为1080P的视频举例, 一帧未压缩的图片(yuv420)大小为1920∗1080+1920∗1080/4+1920∗1080/4=3110400byte1920 * 1080 + 1920 * 1080 / 4 + 1920 * 1080 / 4 =3110400 byte1920∗1080+1920∗1080/4+1920∗1080/4=3110400byte视频总大小

2020-12-25 11:03:49 1123

原创 视频编码历史简单介绍

视频编码格式非常多,可谓百家争鸣。这个武林中,有两大门派 少林(ITU-T国际电信联盟)和武当(ISO 国际标准化组织)两大门派都有很强的实力,都试图一统武林,各自研发出来几大绝学少林(ITU-T)开发了H261,H262,H263等编码格式武当派(ISO)开发了mpeg1, mpeg2, mpeg4等编码格式经过10几年的比武斗争,两派决定联手组成同盟两派联合推出了 H.264 和H.265H.264 H.265是ITU-T的命名, AVC, HEVC是ISO的命名,两个其实是一样。

2020-11-29 20:04:34 189

原创 pcl-for-android 编译记录

使用的编译方法链接 https://github.com/bashbug/pcl-for-androidPCL官方链接 https://github.com/PointCloudLibrary/pcl下载工程git clone https://github.com/bashbug/pcl-for-android.git该工程没有包含pcl 代码, pcl代码是执行该工程脚本后去下载的.Installsudo apt install cmake git make ninja python3-pi

2020-10-30 15:19:29 1376 7

原创 播放器基础--颜色空间

颜色空间也称彩色模型(又称彩色空间或彩色系统)它的用途是在某些标准下用通常可接受的方式对彩色加以说明。对于播放器应用来说,可以理解为图片的颜色空间就是视频最终显示的数据,即解码后的原始数据颜色空间有许多种,常用有RGB,CMY,HSV,HSI, YUV等。播放器比较常接触到的就是RGB和YUV,经常是将视频解码成YUV格式的数据,再转换成RGB交给Android显示设备显示RGB颜色空间RGB(红绿蓝)是依据人眼识别的颜色定义出的空间,可表示大部分颜色。但在科学研究一般不采用RGB颜色空间,因为

2020-09-15 17:27:50 488

原创 MediaPlayer(二)--MediaPlayer基本框架

MediaPlayer涉及的的文件路径这里参考的是android8.1 的代码JAVA类的路径:frameworks/base/media/java/android/media/MediaPlayer.javaJNI路径:frameworks/base/media/jni/android_media_MediaPlayer.cpp编译为 libmedia_jni.sonative 层的接口frameworks/av/media/libmedia编译为 libmedia.sonative层

2020-09-15 16:49:48 594 1

原创 FFmpeg--简介

Android FFmpeg专题结构FFmpeg 是基于GNU General Public License 协议的开源多媒体软件项目。 FF意思是 Fast Forward - 播放器上的快进按钮, mpeg 是 Moving Pictures Experts Group的简称。FFmpeg 命令行工具ffmpeg快速音视频编解码ffplay播放器ffprob检测媒体文件的特性ffserver使用HTTP和RTSP协议的流媒体服务器FFmpe

2020-09-15 15:56:44 356 1

原创 Android 利用V4L2 调用camera

为何要使用V4L2进行开发出于安全原因,使用Android 原生的Camera接口,必须要使用可见的surface显示摄像头的preview图像,即必须要让用户看到你的应用正在使用摄像头。另外Android Camera framework经过层层封装,同时必须调用到显示和MediaPlayer两个模块,数据处理的环节比较多。在开发过程中,可能会有需求只需要去获取camera数据结合AI进行处理。通过V4L2接口可以直接从驱动获取camera数据,省去了很多中间环节,同时可以在后台处理数据,不需要作为前

2020-09-14 15:47:04 2738 6

原创 Android基础--利用ANativeWindow显示视频

Android FFmpeg专题结构利用Android 写视频显示应用时,经常会用到SurfaceView等控件来显示视频。在前面的文章Android基础–SurfaceView, Surface, SurfaceHolder中,也简单得提了一下SurfaceView和Surface的关系:SurfaceView提供了一个专门用于绘制的surface。java层实际上是利用SurfaceView将视频数据渲染到Surface上。而Native层要渲染视频可以通过ANativeWindow来渲染。Su

2020-09-11 17:18:20 1613

原创 rk3399 wifi和eth0 共存

需求项目中Android 板通过有线连接poe摄像头, android app通过wifi跟外部通讯。采用的Android 8.1的代码。网上搜索发现有不少实现该功能的文章,不过文章都有一些差异,对于不了解这些模块的人来说会不知道应该修改哪个。这里只简单记录下我的调试记录,还没深究现象这边照着网上几篇文章修改后,出现的现象是:eth0 处于Running的状态时, 去重连wifi, wifi只会显示saved,不会继续走configure流程调试最常见的的方法就是通过打印去了解信息,把涉及到N

2020-09-04 14:12:59 780

原创 rk3399 wifi和eth0共存 调试

需求项目中Android 板通过有线连接poe摄像头, android app通过wifi跟外部通讯。采用的Android 8.1的代码。网上搜索发现有不少实现该功能的文章,不过文章都有一些差异,对于不了解这些模块的人来说会不知道应该修改哪个。这里只简单记录下我的调试记录,还没深究现象这边照着网上几篇文章修改后,出现的现象是:eth0 处于Running的状态时, 去重连wifi, wif...

2020-09-04 14:12:14 973

原创 Android FFmpeg专题结构

由于在工作中碰到一个需求,需要在播放视频的过程中根据外部情况对视频画面进行旋转,Android 原生的MediaPlayer不具备该功能,所以采用ffmpeg来实现。在工作中由于时间关系,写得比较匆忙,想对代码进行整理和完善,自己也一直想能写点东西.所以有了写一个关于ffmpeg专题的想法, 同时对播放器进行完善,  使自己实现的播放器能和MediaPlayer简单切换。专题分为5个部分:播放器基础知识Android基础知识,主要是Android MediaPlayer会涉及到的一些知识

2020-07-22 16:31:11 147

原创 JNI回调Java

jclass、jobject、jmethodID 和 jfieldIDjni回调java是通过反射来实现的,这些反射的接口都定义在 JNIEnv中。jclassjava类引用可以通过FindClass来获取const char* className = "pri/tool/ffmediaplayer/MediaPlayer";jclass clazz;clazz = env->FindClass(className);另一种获取方法是已经知道对象/实例的引用,通过GetObject

2020-07-22 16:26:54 687

原创 JNI线程相关

注:Android develop中给的的编码建议是:尽可能避免在使用受管理编程语言编写的代码与使用 C++ 编写的代码之间进行异步通信。这样可使 JNI 接口更易于维护。通常,您可以采用与编写界面相同的编程语言保持异步更新,以简化异步界面更新。例如,最好使用 Java 编程语言在两个线程之间进行回调(其中一个线程发出阻塞 C++ 调用,然后在阻塞调用完成时通知界面线程),而不是通过 JNI ...

2020-07-22 09:48:28 213

原创 JNI函数加载

注册native函数当Java代码中执行Native的代码的时候,首先是通过一定的方法来找到这些native方法。JNI有如下两种注册native方法:静态注册根据函数名来找对应的JNI函数。这种方法需要Java的工具程序Javah参与:编写Java代码编译成.class文件;使用Javah,例(javah -o output packagename.classname),这样他会...

2020-07-21 16:17:31 362

原创 JNI介绍

1 JNI定义JNI(Java Native Interface),即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互.以下是oracle对JNI的定义JavaTM Native Interface (JNI) is a standard programming interface for writing Java nativ...

2020-07-21 14:47:19 479

原创 ffmpeg -- 时间基准

AV_TIME_BASEffmpeg中的内部计时单位(时间基),ffmepg中的所有时间都是于它为一个单位,AV_TIME_BASE定义为:#define AV_TIME_BASE 1000000其实是一种分数的表示形式,其中的1表示分子, AV_TIME_BASE 也就是1000000,表示的是分母,所以它其实就是1微秒,也就是 1/1000000 秒。比如一段时长为60s的视频,读出来 duration为60000000,即 duration/AV_TIME_BASE =

2020-06-24 16:04:38 496

原创 搭建ffmpeg player -- 整体思想介绍

project 采用 Android MediaPlayer生命周期 + Gstreamer pipeline的思想框架来构建.采用Android MediaPlayer生命周期的原因方便上层应用在Android MediaPlayer和project间进行切换, 至于为什么要切换有几方面的考虑:本人能力有限,做出来的东西比不上Android MediaPlayer大部分应用是基于MediaPlayer, 如果有需求MediaPlayer无法实现而本project提供了实现的方法,能够方便地切

2020-06-24 14:48:53 228

原创 播放器基础--OpenSL ES音频播放

介绍官网OpenSL ES (Open Sound Library for Embedded Systems)是针对嵌入式系统的一套无授权费,跨平台, 硬件加速的音频API。它提供了一套标准化,高性能,低延时的方法, 本地应用(C/C++)的开发者可以通过这套方对音频进行操作, 实现软/硬件音频性能的直接跨平台部署,降低执行难度,促进高级音频市场的发展NDK 软件包中包括 Khronos Group 开发的 OpenSL ES™ 1.0.1 API 规范的 An

2020-06-20 16:14:30 1424

原创 MediaPlayer--stop()流程

frameworks/base/media/java/android/media/MediaPlayer.java /** * Stops playback after playback has been started or paused. * * @throws IllegalStateException if the internal player engine has not been * initialized. */ public

2020-06-17 15:17:01 747

原创 播放器基础--YUV色彩模型

做过camera, 播放器,图片处理的对YUV都不会陌生,但是关于YUV有很多的格式YUV420, NV21, YUV420sp, YV12等等往往令人混乱介绍YUV色彩模型利用人类视觉对亮度的敏感度比对色度的敏感度高的特点获得较RGB色彩模型的优势.Y为亮度信息,UV为色差(Chroma)信息。U/V分别等于blue–luminance/red–luminance. Y信号分量为黑白灰度图。U、V信号分量为单色彩色图。如果只需获取灰度图,只要获取Y分量就好了.YUV主要用于优化彩色视频信号的传输,

2020-06-05 16:19:36 1481

原创 播放器基础--组成模块

一个播放器无论结构逻辑多么复杂, 都可以分成以下几部分: src, demux,decode, sinksrc 是指媒体数据输入源, 可以是磁盘上的文件或网络流等demux 是指解封装. 媒体文件和网络流是将音视频压缩编码后和其他数据一起打包传输的. 解封装即为上述的逆过程,将音视频流都分离处理.decode 是指解码. 原始的音视频数据是很大的,无论是网络传输还是作为文件保存起来,都需要对音视频raw data进行编码.解码是还原出原始数据,用于最后的显示播放sink 指音视频数据的终点. 比

2020-06-05 10:27:30 800

原创 播放器基础 -- 名词介绍

常见名词1 封装格式我们经常见到的mp4, avi,mkv等后缀的媒体文件,指的是文件的封装格式。是将已经编码压缩好的视频,音频,字幕等按照照一定的格式放到一个文件2 编码格式未经压缩的音视频原始数据是很大的,编码的目的即压缩数据量。比较常见的编码格式有MPEG(MPEG-2, MPEG-4)H.26X(H.263, H.264/AVC, H.264/HEVC)3 帧率 (frame rate)是以帧称为单位的位图图像连续出现在显示器上的频率。fps(frames per second)是

2020-06-04 15:42:15 317

原创 MediaPlayer(四)--MediaPlayer()流程

基于Android8.1代码#java MediaPlayer()先从源头开始看frameworks/base/media/java/android/media/MediaPlayer.java public MediaPlayer() { super(new AudioAttributes.Builder().build(), Aud...

2020-04-24 16:57:31 404

原创 搭建ffmpeg player(一)--搭建上层框架

工程地址https://github.com/yizhongliu/FFMediaPlayerbase commit:78cb1de4fa5f0b378d1fb2f533945638016a9388工程结构在前面的文章MediaPlayer–MediaPlayer基本框架 和 MediaPlayer–Android MediaPlayer的使用方法,了解了搭建mediaplayer的基本信...

2020-04-24 10:12:16 838

原创 MediaPlayer(总结)--从对象生命周期理解MediaPlayer状态

为了方便先重复贴一下MediaPlayer的状态图和MediaPlayer 的基本框架总的分为几个模块,为方便后续文章的书写,各模块后续统一用括号里面的名词java层MediaPlayer(MediaPlayer)jni层(jni)mediaplayer client端(mediaplayer)MediaPlayer service端 (MediaPlayerService)na...

2020-04-20 17:07:17 542

原创 MediaPlayer(十)--release()流程

release相比reset流程,多了一些处理MediaPlayer层将MediaPlayer的各种listener置为nulljni层减少了对surface的引用jni层销毁了mediaplayer的实例这里先偷懒,没详细分析 /** * Releases resources associated with this MediaPlayer object. ...

2020-04-20 16:22:53 926

原创 MediaPlayer(九)--reset()流程

frameworks/base/media/java/android/media/MediaPlayer.java /** * Resets the MediaPlayer to its uninitialized state. After calling * this method, you will have to initialize it again by se...

2020-04-20 16:11:08 2013

原创 MediaPlayer(八)--start()流程

frameworks/base/media/java/android/media/MediaPlayer.java /** * Starts or resumes playback. If playback had previously been paused, * playback will continue from where it was paused. If ...

2020-04-18 15:46:38 1488

原创 MediaPlayer(七)--prepareAsync

frameworks/base/media/java/android/media/MediaPlayer.java /** * Prepares the player for playback, asynchronously. * * After setting the datasource and the display surface, you need ...

2020-04-18 14:58:28 1115

原创 Android基础--SurfaceView, Surface, SurfaceHolder

SurfaceView, Surface, SurfaceHolderSurfaceHandle onto a raw buffer that is being managed by the screen compositor。即Surface是保存原始缓存区的句柄,也就是显示的像素数据SurfaceViewSurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘...

2020-04-14 10:27:03 272

原创 MeidaPlayer(六)--setDisplay流程

在Activity 的OnSurfaceCreate回调后,表示Surface已经创建成功,可以将surface传到native层playerframeworks/base/media/java/android/media/MediaPlayer.java public void setDisplay(SurfaceHolder sh) { mSurfaceHolder ...

2020-04-13 10:36:23 1780

gstreamer-sdk-tutorails

根据git://anongit.freedesktop.org/gstreamer/cerbero gstreamer-1.0 提供的测试apk tutorials

2016-02-15

qt3 mp3播放器

qt3做的mp3播放器,可实现播放,上/下首,停止,暂停,音量控制,进度条拖动,显示时间等。播放模式有单曲循环,顺序播放,循环播放。

2011-06-01

Linux常用命令全集.CHM

Linux常用命令全集,给出了常用到的命令

2011-05-29

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除