自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (2)
  • 收藏
  • 关注

原创 Android MediaCodec 解码H264码流播放

视频编解码,编的是什么码?解的又是什么码?有没有想过?现在主流的就是H264码流,Android 采集摄像头原始帧数据 这篇博客讲解的是如何从摄像头从提取YUV画面色值,然后由MediaCodec进行编码压缩,最后生成的就是H264码流,我们先了解下H264码流格式。 可以看到一个个NALU单元组成了H264码流,NALU单元又包含头数据部分和帧数据部分。 每一个头开始都包含0x ...

2018-08-05 22:43:40 5171 6

原创 Android 用MediaCodec ,MediaExtractor解码播放MP4文件

上一篇讲了如何采集摄像头画面并且进行编码,再进行封装成MP4格式文件,如需了解可以看 安卓采集摄像头画面生成MP4文件 本篇博客,主要讲解如何对MP4文件进行解封装,再进行解H264码流,进行画面显示。 Android 使用MediaCodec进行视频编解码工作,这里解码当然还由其来完成,那从MP4文件中提取出H264码流的工作,由MediaExtractor完成 MediaExtrac...

2018-08-05 21:56:28 5832 6

原创 安卓采集摄像头画面生成MP4文件

主要用的安卓类有MediaCodec和MediaMuxer,MediaCodec负责视频数据编解码,MediaMuxer负责将编码后的数据封装成MP4文件,采集摄像头用的是camera,并且用surfaceview进行预览 1、初始化surfaceview与camera,预览摄像头的画面 private void initSurfaceHolder() { sur...

2018-08-05 18:16:30 4212 4

原创 Android 源码分析 Activity的启动模式

一直想抽空针对AMS进行源码分析,无奈一方面因为很忙,另外AMS很复杂,涉及的知识点也比较多,今天利用五一假期对AMS的一个方面,Activity的启动模式进行源码分析,这里面包括了ActivityRecord,TaskRecord,ActivityStack等概念,写这篇博客之前,我也百度了不少朋友的启动模式介绍和分析,有些讲的不清楚,少数从源码角度分析了,但是都看的非常麻烦,很难理解,我也一直...

2019-05-04 22:49:16 1617 2

原创 Android Visca 协议控制电子云镜(Android ndk)

项目是个教学类TV应用,有一个功能是要控制摄像机的云台控制,就是控制跟踪摄像机的方向(上,下,左,右);摄像机的焦距(远和近),预制位调用等功能。与跟踪摄像机的通信基于sony 的visca协议,visca协议是我自己封装,用C++代码实现,所以本篇博客主要...

2019-04-09 21:18:17 1171

原创 项目疑难杂症记录(五):fragment生命周期都回调了,却不见其页面展示

继续记录我的疑难bug解决过程,这次要说的bug相比前几篇来说,更难定位,因为影响较大,直接导致不解决这个bug,根本就没有办法出版本,两三个同事定位了半天也没有结果,最后我自告奋勇的暂时放下手中的工作任务,去解决,因为我确实很喜欢解决疑难的bug,哈哈,这里面小小自吹一下哈~~主要的现象是一些操作之后,添加fragment,正常应该会显示fragment中的页面,但是这个bug奇怪的地方就是f...

2019-03-28 15:30:28 788

原创 Android 7.0后 播放U盘中的视频文件的解决方案

背景介绍:TV项目的系统是Android N,里面有个产品需求:是做一个视频文件管理器,检测到U盘插入之后,读取里面的视频文件,展示出来,并且支持点击播放,就是如下样式(项目实际运行展示的效果)我们知道,如果要播放一个视频文件,必须要给播放器 设置一个路径或者Uri,一般是Uri uri=Uri.parse(…)或者是 Uri uri=Uri.fromFile(…)等,如果是这样的话,在An...

2019-03-02 12:57:00 4577 12

原创 项目中的一个技术方案替换历程(surfaceview+fragment 变成悬浮窗window)

背景:项目中UI层有SurfaceView,其渲染展示的是摄像机等采集画面,但是测试提了一个问题单,如果在当前页面中跳出到其他页面,会crash,经过log分析,是由于surfaceview 在失去焦点的时候会走到onDestroy方法,也就是surfaceview会失效。解决思路:surfaceview不失去焦点就可以了,改用悬浮窗实现。UI层 最主要的页面结构如下:<?xml v...

2019-02-18 20:16:55 1409 2

原创 项目疑难杂症记录(四):Activity被重新创建的原因分析

在项目中遇到一个奇怪的Bug,插上带有升级包固件的U盘,选择升级框中的放弃按钮,Activity被onDestroy,随后又重新onCreate,相应的图片和日志如下:【一】 现象和日志1、升级框2、点击放弃按钮3.日志如下: 1528 D MainActivity: onCreate 1528 1528 D MainActivity: onResume 15...

2019-01-31 13:58:15 1468

原创 项目疑难杂症记录(三):EditText获取不到焦点了?

本篇依然讲的是焦点方面的问题,还是老样子,先看下出问题的现象,gif走起~从动图上可以看到,进入二级页面,焦点向下移动,编辑框没有获取到焦点,后向上移动焦点,才获取到,是不是很神奇?我们知道EditText和Button一样,是默认可获取焦点的,但是这里面没有获取到,这里面页面不是listview,第一个item是封装了EditText的控件,下面的其他item是单独另一种风格封装的控件。...

2018-12-16 21:30:24 1353

原创 项目疑难杂症记录(二):焦点移动不了

本篇讲焦点移动不了的问题,先下下图效果。进入“添加网络摄像机”页面后,遥控器按下往右的按键,焦点只落在第一个框上面,再也移动不了,页面拍的不是很清楚,需要仔细看下。正常焦点移动,是系统根据某个具体的方向去查找,然后判断每个可以获取焦点的view的坐标是否是最合适获取焦点的经过定位:发现是三个框子的view是代码动态生成的,坐落于屏幕中的位置是通过setTranslationX确定的。下面...

2018-12-11 20:52:55 534

原创 项目疑难杂症记录(一):fragment单例导致的界面异常

前言:之前项目中也会遇到一些头疼的问题或者难解的bug,有些可能花费不少时间精力解决了,但是没有记录,打算从本篇博客开始,记录下项目中遇到的我认为的疑难杂症,算是对自己学习的总结,如果凑巧你也看到了,并且对你有一定的帮助,那将会是一件很有意义的事情。最近同事做Tv项目,遇到了界面上一个奇怪的并且百思不得其解的现象,请我帮忙分析解决,先看下面的一个出现问题的效果图进去注册页面,每个控件的值不...

2018-12-08 15:57:18 2017

原创 GridView xml中设置android:focusable="false"无效的原因

最近Tv项目中有个小问题,需要gridview展示内容,但是不可获取焦点,于是xml中设置android:focusable=“false”,设想会成功,但是实际操作,发现还是可以获取焦点,只有在代码中设置setFocusable(false)才起作用,这个问题当时有点搞不懂,带着这个问题,我去从源码中寻找答案。思路分析:普通的view在xml设置android:focusable=false...

2018-12-02 16:08:00 1836 1

原创 GLSurfaceView源码分析以及简单使用

GLSurfaceView源码分析以及简单使用一、GLSurfaceView 如果我们没有使用过,从名字可以看出其与OpenGL以及Surfaceview有关,GLSurfaceView有以下特点:1、管理surface,一块特别的内存区域给Android 视图系统。2、管理EGL展示,能够保证OpenGL渲染到Surface上。3、接收自定义的Render,这个Render做实际的渲染...

2018-09-20 20:01:42 919

原创 从源码角度理解 FragmentTransaction实现

谈到fragment的使用,肯定绕不过FragmentTransaction事务,对fragment的操作必定用到它,其提供show,hide,add,remove,replace等常用的fragment操作,最后commit操作,这么强大的管理类,它内部是如何实现的呢?为什么可以连续调用多个api,最后一次要commit操作?1、创建FragmentTransaction对象: Fr...

2018-09-04 14:12:22 645

原创 源码角度解释fragment的坑(二)

如果你已经使用过fragment,我先提出几个问题。1、按返回键的时候,如果当前的fragment是加入到栈的(其实这个说法不是很准确,因为真正加入栈的是操作fragment的事务),那么这个fragment会被remove掉,而如果没有加入栈,那么回退按键对这个fragment一点反应也没有?2、加入到栈的fragment在被remove的时候,其生命周期走到onDestroyView而...

2018-09-03 18:06:11 353

原创 从源码角度解释 fragment 坑(一)

fragment 自从被Android官方推出以来,就得到了广泛的应用,很多项目中都会使用多个fragment代替Activity进行页面展示,但是由于fragment使用起来相对复杂,如果不是很熟悉,使用起来就会存在一些问题,很难定位,下面我就举出一些我之前项目中存在的部分问题,并且从源码角度进行分析。 1、按返回键,明明fragment应该被销毁,为什么fragment又出来呢,onC...

2018-09-01 14:38:53 405

原创 AudioTrack 播放PCM音频数据

AudioTrack 可以用来播放PCM数据,上一篇博客我讲了AudioRecord可以录制PCM数据 AudioTrack实例可以在两种模式下运行:静态或流式传输。 在Streaming模式下,应用程序使用write()方法之一将连续的数据流写入AudioTrack。当数据从Java层传输到native层并排队等待回放时,这些是阻塞和返回。在播放音频数据块时,流模式最有用,以下情形适用于流模...

2018-08-28 16:21:05 2170 3

原创 AudioRecord 采集音频PCM数据

AudioRecord 可以用来采集音频原始数据(PCM)格式,使用起来非常简单。 主要就是构造函数的定义 AudioRecord(int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes) 1、audioSource = MediaRecorder.Aud...

2018-08-28 15:08:01 1404

原创 MediaCodec 编码时间戳问题

在MediaCodec 的编码时候,需要调用queueInputBuffer( int index, int offset, int size, long presentationTimeUs, int flags) 函数,将装有待编码的帧字节数组传给编码器,第四个参数 代表的编码时间戳,这个编码时间戳非常重要,单位是 微秒,不传或者传错,都会导致解码错误甚至播放不了。 1、不要赋值0,网上好多...

2018-08-28 11:34:50 6165 5

原创 RK 3399 切换以太网卡

背景: 项目开发用的是RK3399开发板,由于在测试网络中发现RK自身的有线网卡存在一些问题,所以需要使用USB转网卡过渡下。 【1】、查看当前设备中存在哪些网卡可用 可以看到目前有线网卡只有 eth0可用,我们需要切换成 eth1,并且使其能够配置ip。 进入 /sys/class/net/下查看当前有哪些网卡。 【2...

2018-06-04 17:45:47 3708 3

原创 Android 蓝牙遥控器的连接

项目是TV端的,产品要求不经过设置界面,开机进入引导页,自动搜索蓝牙遥控器并且建立连接。 刚开始接手的时候以为会很快完成,无非就是调用API吗?可是事实不是这样,前后花了一些时间,才解决。 好了,当时尝试了Socket连接以及低功耗连接BLE,事实证明都不可行,后来就在想设置界面是怎么连接的呢,终于找到了答案。 蓝牙设置界面入口在BluetoothSettings.java,这个Bluetoo

2017-09-20 16:02:02 3817 2

原创 View事件分发

注:本文基于自己的理解,水平比较有限,欢迎指出不对的地方,不喜勿喷。 上文讲了ViewGroup事件分发,http://blog.csdn.net/zxd_android/article/details/78019600,本文讲下View的事件分发。我们先来看下View的dispatchTouchEvent方法: /** * Pass the touch screen motion e

2017-09-18 17:28:15 461

原创 ViewGroup 事件分发

网上关于安卓事件分发的文章多如牛毛,本文仅基于自己的理解,可能不够深入。 首先,事件从Activity中开始分发。 public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { onUserInteraction(

2017-09-18 15:24:40 447

Visca 协议Android

在Android平台上,基于Visca协议控制电子云镜,包括云台方向控制,焦距控制,预制位设置等。

2019-04-09

Android MediaCodec,MediaMuxer综合场景使用Demo

1、采集摄像头画面预览,生成MP4文件; 2、解码MP4文件播放; 3、解码H264文件播放;

2018-08-05

空空如也

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

TA关注的人

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