- 博客(597)
- 资源 (69)
- 收藏
- 关注
原创 阿里云代理仓库地址
在天朝使用jcenter、mavenCentral及google三个远程仓库,Gradle Sync会很慢,google仓库甚至需要科学上网才能访问。USER_HOME在Windows上大约为C:/Users/liyujiang/.gradle/,在Linux上大约为/home/liyujiang/.gradle/。将本项目的gradle/init.d/init.gradle复制到USER_HOME/.gradle/下即可。
2024-03-18 16:49:27
611
翻译 SDL实现YUV播放器
用SDL来实现YUV播放器主要是通过一个播放时间管理线程,每隔一段时间(比如1秒播放25帧那就每隔40毫秒)发送一个刷新事件,启动事件监听后,每次监听到刷新事件后就从YUV文件中读取一帧图片在SDT创建的窗口中进行纹理渲染展示。/*YUC播放器*/#include <stdio.h>#include <string.h>#include <SDL.h>#define BLOCK_SIZE 4096000//event message#define R
2021-09-16 20:06:45
627
转载 AAC的ADTS头解析
1. ADTS(Audio Data Transport Stream)头之于AACAAC音频文件的每一帧都由一个ADTS头和AAC ES(AAC音频数据)组成。AAC数据帧2. ADTS头分析ADTS头包含了AAC文件的采样率、通道数、帧数据长度等信息。ADTS头分为固定头信息和可变头信息两个部分,固定头信息在每个帧中的是一样的,可变头信息在各个帧中并不是固定值。ADTS头一般是7个字节((28+28)/ 8)长度,如果需要对数据进行CRC校验,则会有2个Byte的校验码,所.
2021-09-10 18:11:12
452
转载 【H264/AVC 句法和语义详解】(二):h264码流格式与NALU详解一
上一篇中,我们站在句法元素(或称语法元素)的角度,介绍了H.264的句法和语义,和句法元素的分层结构。在这篇中,我们更进一步,从比特的角度出发,来探索h264码流的组成。通过这篇的学习,我们会初步具备解析h264码流的能力,从码流中分离出NAL单元,并识别NAL类型。1. H264码流格式不过大道始于脚下,我们还是先从头介绍一下,h264的两种码流格式,它们分别为:字节流格式和RTP包格式。(1)字节流格式:这是在h264官方协议文档中规定的格式,处于文档附录B(Annex-B Byte str
2021-09-10 17:54:14
609
原创 Byte、bit 、和16进制之间的关系
bit(比特)byte(字节)一、bit(比特)计算机内存储和处理信息的最小单位是位(bit,或比特),一个比特值可以是0或1,不能再分割1bit = 一个二进制位01011110 = 表示一个8位的字(比特)表示8位的二进制数二、byte(字节)通常8个二进制位为一个字节(byte)三、换算关系8个二进制位 (bit)= 1字节(byte)四、与16进制的关系1、通常一个字节 =两个16进制位过程解析:1个16进制数 = 4个二进制数位, 2个16进制数...
2021-09-03 10:23:47
14696
原创 FFmpeg抽取音频数据
FFmpeg抽取音频数据涉及到以下几个函数:av_init_packet() 初始化一个数据表结构体(音视频流是由一个个数据包组成)av_find_best_stream() 在多媒体参数找到最好的一路流av_read_frame() 读取流中的每一个包av_packet_unref() 用于包数据不用了之后释放内存注意:下面添加ADTS头的方法只适合HE-AAC 和 LC-AAC,对于其他类型的AAC用这个方法会导致抽取的音频无法播放。关于AAC的ADTS头详解可以参考:AAC的ADTS头解析
2021-08-31 20:48:59
979
原创 FFmpeg抽取视频h264数据
从mp4文件中抽取h264数据步骤如下:1.打开mp4文件并创建一个空文件用于存储H264数据2.提取一路视频流资源3.循环读取流中所有的包(AVPacket),为每个包添加特征码和sps/pps等数据(只有关键帧前面要添加sps/pps数据,其他的只需要添加特征码),都处理完后将数据写入文件保存。ffmpeg读取mp4中的h264数据,pps及sps并不能从packet中获得,而是保存在AVCodecContext的extradata数据域中,如下所示是一个mp4文件的extradata的前面一
2021-08-31 20:36:54
3268
1
原创 FFmpeg将mp4转成flv
mp4转成flv格式文件步骤如下:1.打开输入文件,创建输入文件和输出文件的上下文环境2.遍历输入文件的每一路流,每个输入流对应创建一个输出流,将输入流中的编解码参数直接拷贝到输出流中。3.文件的写入。先写入新的多媒体文件的头。然后遍历输入文件的每一帧,对每一帧进行时间基的转换,转换好后写入新的多媒体文件。最后再多媒体文件中写入文件尾。/*将mp4转成flv格式*/#include <libavutil/timestamp.h>#include <libavform
2021-08-31 20:07:40
1843
原创 H.264基础知识总结
本文来自象棋的 <H.264系列>1.H264结构中,一个视频图像编码后的数据叫做一帧,一帧由一个片(slice)或多个片组成,一个片由一个或多个宏块(MB)组成。2.slice三种编码模式:I_slice,P_slice,B_slice3.根据H.264的不同类别,编码器会使用不同类型的帧,如I帧、P帧和B帧。I帧缺失会导致录屏,B/P帧缺失会导致卡顿I帧(帧内编码帧)是一种自带全部信息的独立帧,无需参考其它图像便可独立进行解码。视频序列中的第一个帧始终都是I帧。如果所传输
2021-08-31 14:25:45
639
翻译 【H264/AVC 句法和语义详解】(一): 句法元素分层结构
本篇隶属于文集:《H264/AVC 句法和语义详解》,查看文集全部文章,请点击文字链接从这一篇开始,我们详细的讲解H.264/AVC 比特码流的句法和语义,可以说,能够学习并掌握H.264的句法和语义,是能彻底掌握并应用H.264的关键。在前面几篇文章中,我们只是从理论层面,介绍了H.264、片、宏块、帧内预测、帧间预测。而在句法和语义中,我们就可以拿到H.264编码之后的裸流,用理论加实践的方式,一步步探索H.264的编解码实现过程。而在这篇文章里呢,我们就先从宏观的角度,来看看使用H.264
2021-08-31 13:21:32
373
原创 Windows下编译安装 FFmpeg
##前言最近我的视频课《FFmpeg音视频核心技术精讲与实战》终于与大家见面了。在学生学习的过程中不断有学生反馈一些问题,其中较多的是如何在Windows 上编译 ffmpeg。在Linux/Mac下编译 ffmpeg是非常方便的。但要在 Windows下编译 ffmpeg还真要花点时间。不过为了满足学员的要求,也方便自己不再被这类问题打扰,今天我就写一下在 Windowns下编译ffmpeg的步骤,以供大家参考。安装Cygwin在windows下安装 ffmpeg 的最好方式就是使用Cygw
2021-08-20 14:01:02
534
翻译 StarUML3.1 破解方法
地址:http://staruml.io/版本:3.1.0系统:windows安装路径:C:\Program Files\StarUML\resources要求:需要node环境原理:解压resources下的app.asar 压缩包,修改里面的配置文件(在验证的时候都返回成功),再重新打包覆盖原来的包2. 安装asar依赖cnpm install -g asar13. 解压app.asar进入到安装路径,解压出文件C:\WINDOWS\system32>cd C:\Prog
2021-06-04 14:55:24
262
翻译 史上最全的StarUML使用教程
文章目录一. 版本二. 界面说明三. 画图种类介绍1. 类图(Class Diagram)2. 用例图(Use Case Diagram)3. 时序图(Sequence Diagram)4. 组件图(Component Diagram)5. 部署图(Deployment Diagram)6. 协作图(Comunication Diagram)7. 对象图(Object Diagram)8. 活动图(Activity Diagram)StarUML是一款很全面,很好用的UML画图工具。
2021-06-04 14:28:13
2009
翻译 使用staruml绘制类图
抽象类的表示选中需要设置的类,勾选Properties->General->IsAbstract进行设置,设置完成后,类名会变成斜体抽象类的表示接口的表示在Properties->General中将Stereotype设置为interface接口的表示新增类的属性选中需要新增属性的类,点击Properties->General->Attributes的右侧按钮在Properties->General中选择Attribute...
2021-06-04 14:08:47
3527
翻译 StarUML3简明教程
StarUML(简称SU),是一种创建UML类图,生成类图和其他类型的统一建模语言(UML)图表的工具。StarUML是一个开源项目之一发展快、灵活、可扩展性强(zj).StarUML官方下载地址:http://staruml.io/download安装教程:安装步骤很简单,省略。注意:付费软件,如需破解可查看我上一篇博客《StarUML3——超好用的UML画图工具推荐》安装之后的主界面简介如图所示:2.创建工程在启动star UML时,系统会默认帮我们创建一个工程如果这个工程..
2021-06-04 13:38:27
182
翻译 android keytool的用法
1. 导入最近在开发中,笔者遇到了这样的问题:当第三方向我们系统请求pay bill业务时,我们的系统就会报错,而且错误的信息是找不到有效的证书,所以交易就被cancelled了。我们不去深究为什么会有这样的错误,笔者今天主要讲的是关于keytool的相关知识,因为了解这个,你就会知道上面的问题是为什么了。2. keytool介绍笔者查找了关于keytool的相关解释,网站上给出的定义是:keytool 是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认
2021-05-18 19:22:37
888
翻译 Android中重启程序自己的几种方法
1.Intent intent = new Intent(this, Object.class);startActivity(intent);2. 通过ActivityManager来重新启动应用程序:ActivityManager manager = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);manager.restartPackage("com.example.test");3. 通过flag
2021-02-03 19:30:12
1825
原创 自适应流媒体传输大总结
自适应流媒体传输(一)——DASH媒体内容的生成自适应流媒体传输(二)——为什么要使用fragmented MP4自适应流媒体传输(三)——和TS格式说再见自适应流媒体传输(四)——深入理解MPD自适应流媒体传输(五)——正确认识码率切换...
2021-01-02 16:04:41
595
翻译 Binder传输机制原理(二)
1 事务的传递和处理 从IPCThreadState的角度看,它的transact()函数是通过向binder驱动发出BC_TRANSACTION语义,来表达其传输意图的,而后如有必要,它会等待从binder发回的回馈,这些回馈语义常常以“BR_”开头。另一方面,当IPCThreadState作为处理命令的一方需要向发起方反馈信息的话,它会调用sendReply()函数,向binder驱动发出BC_REPLY语义。当BC_语义经由binder驱动递送到目标端时,会被binder驱动自...
2020-11-08 11:14:50
952
翻译 Binder传输机制原理(一)
1 Binder是如何做到精确打击的? 我们先问一个问题,binder机制到底是如何从代理对象找到其对应的binder实体呢?难道它有某种制导装置吗?要回答这个问题,我们只能静下心来研究binder驱动的代码。在本系列文档的初始篇中,我们曾经介绍过ProcessState,这个结构是属于应用层次的东西,仅靠它当然无法完成精确打击。其实,在binder驱动层,还有个与之相对的结构,叫做binder_proc。为了说明问题,我修改了初始篇中的示意图,得到下图:1.1 创建bind...
2020-11-08 11:12:43
1403
1
翻译 Hook技术--Activity的启动过程的拦截
Hook技术--Activity的启动过程的拦截1、寻找Hook点的原则Android中主要是依靠分析系统源码类来做到的,首先我们得找到被Hook的对象,我称之为Hook点;什么样的对象比较好Hook呢?自然是容易找到的对象。什么样的对象容易找到?静态变量和单例;在一个进程之内,静态变量和单例变量是相对不容易发生变化的,因此非常容易定位,而普通的对象则要么无法标志,要么容易改变。我们根据这个原则找到所谓的Hook点。2、寻找Hook点通常点击一个Button就开始Activity跳转了,这中
2020-09-23 22:19:13
698
翻译 Android包管理机制(二)PackageInstaller安装APK
Android包管理机制(二)PackageInstaller安装APK前言在本系列上一篇文章Android包管理机制(一)PackageInstaller的初始化中我们学习了PackageInstaller是如何初始化的,这一篇文章我们接着学习PackageInstaller是如何安装APK的。本系列文章的源码基于Android8.0。1.PackageInstaller中的处理紧接着上一篇的内容,在PackageInstallerActivity调用startInstallConfirm
2020-09-23 10:16:33
2064
翻译 Android包管理机制(一) PackageInstaller的初始化
Android包管理机制(一) PackageInstaller的初始化前言包管理机制是Android中的重要机制,是应用开发和系统开发需要掌握的知识点之一。包指的是Apk、jar和so文件等等,它们被加载到Android内存中,由一个包转变成可执行的代码,这就需要一个机制来进行包的加载、解析、管理等操作,这就是包管理机制。包管理机制由许多类一起组成,其中核心为PackageManagerService(PMS),它负责对包进行管理,如果直接讲PMS会比较难以理解,因此我们需要一个切入点,这个切入
2020-09-22 21:56:14
1009
翻译 Android解析WindowManager(一)WindowManager体系
Android解析WindowManager(一)WindowManager体系前言WindowManagerService(WMS)和AMS一样,都是Android开发需要掌握的知识点,同样的,WMS也很复杂,需要多篇文章来进行讲解,为何更好的理解WMS,首先要了解WindowManager,这一篇我们来学习WindowManager体系。1.Window、WindowManager和WMSWindow我们应该很熟悉,它是一个抽象类,具体的实现类为PhoneWindow,它对View进行管
2020-09-22 10:57:36
2301
翻译 Android解析ActivityManagerService(二)ActivityTask和Activity栈管理
Android解析ActivityManagerService(二)ActivityTask和Activity栈管理前言关于AMS,原计划是只写一篇文章来介绍,但是AMS功能繁多,一篇文章的篇幅远远不够。这一篇我们接着来学习与AMS相关的ActivityTask和Activity栈管理。1.ActivityStackActivityStack是一个管理类,用来管理系统所有Activity的各种状态,其内部维护了TaskRecord的列表,因此从Activity任务栈这一角度来说,Activi
2020-09-22 10:56:01
1740
翻译 Android解析ActivityManagerService(一)AMS启动流程和AMS家族
Android解析ActivityManagerService(一)AMS启动流程和AMS家族前言此前在Android系统启动流程、应用进程以及深入四大组件这三个系列文章中,都提及到了AMS,但都没有系统的来讲解它,本文就以AMS为主来进行讲解,其中会有一些知识点与这些系列文章有所重合,这里会尽量做到详尽讲解。阅读此文章前,最好阅读相关文章中列出的系列文章,否则我不敢保证这篇文章你能看的懂。1.概述AMS是系统的引导服务,应用进程的启动、切换和调度、四大组件的启动和管理都需要AMS的支持。从
2020-09-22 10:11:38
849
翻译 Android深入四大组件(八)广播的注册、发送和接收过程
Android深入四大组件(八)广播的注册、发送和接收过程前言我们接着来学习Android四大组件中的BroadcastReceiver,广播主要就是分为注册、接收和发送过程。建议阅读此文前请先阅读Android深入理解四大组件系列的文章,知识重复的部分,本文不再赘述。1.广播的注册过程BroadcastReceiver的注册分为两种,分别是静态注册和动态注册,静态注册在应用安装时由PackageManagerService来完成注册过程,关于这一过程,我会在后续的介绍PackageMana
2020-09-21 18:06:52
475
翻译 Android深入四大组件(七)Service的绑定过程
Android深入四大组件(七)Service的绑定过程前言我们可以通过调用Context的startService来启动Service,也可以通过Context的bindService来绑定Service,建议阅读此篇文章前请阅读Android深入四大组件(二)Service的启动过程这篇文章,知识点重叠的部分,本篇文章将不再赘述。1.ContextImpl到ActivityManageService的调用过程我们可以用bindService方法来绑定Service,它的实现在Contex
2020-09-21 17:59:51
241
翻译 Android深入四大组件(六)Service的启动过程
Android深入四大组件(六)Service的启动过程前言此前我用较长的篇幅来介绍Android应用程序的启动过程(根Activity的启动过程),这一篇我们接着来分析Service的启动过程。建议阅读此篇文章前,请先阅读Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章。1.ContextImpl到ActivityManageService的调用过程要启动Service,我们会调用startService方法,它的
2020-09-21 17:43:37
109
翻译 Android深入四大组件(五)Android8.0 根Activity启动过程(二)
Android深入四大组件(五)Android8.0 根Activity启动过程(后篇)前言在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读Android 8.0源码时发现应用程序(根Activity)启动过程照Android 7.0有了一些变化,因此又写下了本篇文章,本篇文章照此前的文章不仅流程发生变化,而且增加了一些分析,算是升级版本。由于篇幅较长,And
2020-09-21 15:25:44
158
翻译 Android深入四大组件(四)Android8.0 根Activity启动过程(一)
Android深入四大组件(四)Android8.0 根Activity启动过程(前篇)前言在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读Android 8.0源码时发现应用程序(根Activity)启动过程照Android 7.0有了一些变化,因此又写下了本篇文章,本篇文章照此前的文章不仅流程发生变化,而且增加了一些分析,算是升级版本。由于篇幅较长,And
2020-09-21 14:21:48
398
翻译 Android深入理解Context(三)Context完全解析
Android深入理解Context(三)Context完全解析1· Context类型 我们知道,Android应用都是使用Java语言来编写的,那么大家可以思考一下,一个Android程序和一个Java程序,他们最大的区别在哪里?划分界限又是什么呢?其实简单点分析,Android程序不像Java程序一样,随便创建一个类,写个main()方法就能跑了,而是要有一个完整的Android工程环境,在这个环境下,我们有像Activity、Service、BroadcastReceiver...
2020-09-21 11:51:51
232
翻译 Android深入理解Context(二)Activity和Service的Context创建过程
Android深入理解Context(二)Activity和Service的Context创建过程前言上一篇文章我们学习了Context关联类和Application Context的创建过程,这一篇我们接着来学习Activity和Service的Context创建过程。需要注意的是,本篇的知识点会和深入理解四大组件系列的部分文章的知识点相重合。1.Activity的Context创建过程当我们在Activity中调用startActivity方法时,其实调用的是Context的startA
2020-09-21 11:46:41
527
翻译 Android深入理解Context(一)Context关联类和Application Context创建过程
Android深入理解Context(一)Context关联类和Application Context创建过程前言Context也就是上下文对象,是Android较为常用的类,但是对于Context,很多人都停留在会用的阶段,这个系列会带大家从源码角度来分析Context,从而更加深入的理解它。1.Context概述Context意为上下文或者场景,是一个应用程序环境信息的接口。在开发中我们经常会使用Context,它的使用场景总的来说分为两大类,它们分别是:使用Context调用方法
2020-09-21 11:31:47
479
翻译 Android Activity启动流程, app启动流程,APK打包流程, APK安装过程
Android Activity启动流程, app启动流程,APK打包流程, APK安装过程1.Activity启动流程 (7.0版本之前)从startActivity()开始,最终都会调用startActivityForResult()在该方法里面会调用Instrumentation.execStartActivity()执行(Instrumentation主要用来监控应用程序和系统的交互)启动,execStartActivity()方法里面有2个方法,一个是ActivityManagerNa
2020-09-20 11:10:15
424
翻译 Android应用程序启动过程(二)分析
Android应用程序启动过程(二)分析本文依据Android6.0源码,从点击Launcher图标,直至解析到MainActivity#OnCreate()被调用。Launcher简析Launcher也是个应用程序,不过是个特殊的应用。俗称“桌面”。通过PackageManagerService查询所有已安装的应用程序,并保存相应的图标、应用名称、包名和第一个要启动的类名等。源码位置:frameworks/base/core/java/android/app/LauncherActi.
2020-09-20 10:59:40
323
Android 中MQTT协议的使用Demo
2024-05-07
StarUML Setup 3.0.2.7z
2020-11-23
TabLayout+ViewPager+Fragment复用+Gson解析本地数据
2020-11-19
热门标签等自动换行的流式布局+瀑布流照片墙UI实现的优化方案
2020-10-25
lib_coder.zip
2020-04-08
WindowMangerService原理与定制
2019-02-25
MediaPlayer播放mp3的Demo
2019-02-12
Jenkins入门手册
2016-10-08
软件架构设计
2016-09-08
超仿微信代码
2016-09-05
(修改)Android 完美高仿的微信源码
2016-09-05
MAC反编译APK工具包
2016-08-25
httpclient-4.3.6.jar架包
2016-07-04
android ant 多渠道打包&博客教程
2016-01-21
SDL1.3源码
2014-03-14
图片轮播(Viwepager)+(读取网络图片)+点击图片(WebView)展示
2014-02-14
实现第三方授权登录、分享以及获取用户资料
2014-01-08
第三方授权登录、分享以及获取用户资料
2014-01-08
仿IOS的list下拉刷新pullRefresh
2013-12-30
Navigation Drawer(导航抽屉)模式
2013-11-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人