Java编译过程及Jvm详解
一.Jvm简介1.JVM是什么?JVM是Java Virtual Machine(Java虚拟机)的缩写,也就是指的JVM虚拟机,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。众所周知,java语言是跨平台的,而JVM是java跨平台的关键之所在,JVM上执行java字节码,执行时这些字节码可以解释成具体平台的机器码,因此java拥有“一次编译,处处运行”这一跨平台能力。 2.JRE、JDK和JVM的关系JRE(Java Runtime Environment, Java运行环境)是Java平台,所有的JAVA程序都要在JRE下才能够运行,包括JVM和Java核心类库和支持文件。JDK(Java Development Kit,Java开发工具包)是用来编译、调试Java程序的开发工具包,包括Java工具(javac/java/jdb等)和Java基础的类库(java API )。JVM(Java Virtual Machine,...
使用FFmpeg命令对音视频进行基础的编辑
一.FFmpeg基础知识1.FFmpeg简介FFmpeg的名称来自MPEG视频编码标准,前面的“FF”代表“Fast Forward”,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为视频流的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换。它提供了录制、转换以及流化音视频的完整解决方案。 2.安装FFmpeg ffmpeg官网下载。 配置好环境变量,比如将c:\ffmpeg\bin路径配置到环境变量中去,这样bin下面的ffmpeg.exe就可以在命令行中使用了,可以用ffmpeg...
CI-CD工具之Jenkins
一.CI/CD(持续集成/持续部署)软件开发周期中需要一些可以帮助开发者提升速度的自动化工具。其中工具最重要的目的是促进软件项目的持续集成与交付。通过CI/CD工具,开发团队可以保持软件更新并将其迅速的投入实践中。CI/CD也被认为是敏捷开发的最重要实践之一。具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务通常被统称为”CI/CD 管道”,由开发和运维团队以敏捷方式协同支持。 1.持续集成Continuous Integration:持续集成,简称CI,是软件开发周期的一种实践,把代码仓库(Gitlab或者Github)、构建工具(如Jenkins)和测试工具(SonarQube)集成在一起,频繁的将代码合并到主干然后自动进行构建和测试。 2.持续交付Continuous...
Kotlin总结之二数组和集合容器
一 Kotlin中的数组1.数组的类型 kotlin java IntArray int[] ShortArray short[] LongArray long[] FloatArray float[] DoubleArray double[] CharArray char[] 2.数组的创建java创建数组的两种方式: 12int[] intArray = new int[6] //表达式:数据类型[] 标识 = new 数据类型[长度];String[] strArray = {"value0","value1"} //表达式: 数据类型[] 标识 =...
Android数据绑定DataBinding
一.DataBinding简介MVVM架构的核心就是数据驱动,数据驱动的意思就是,数据更新的时候,自动刷新UI。采用MVVM架构会节省大量的更新UI的代码,并且数据更新后主动出发UI更新这种方式,更难出错,鲁棒性更强。且不需要关注数据变化的时机,是需要关注数据变化的结果即可。 1.开启DataBinding功能 使用最新版的AndroidStudio,至少AS3.0以上。 在项目module下的build.gradle的android闭包下,配置 databinding{enabled=true}。 对于布局的xml文件,将原有的正常布局,外面用包裹作为跟节点。节点下存放用于xml布局的一些变量,工具类之类的。 打开布局文件,选中根布局的 ViewGroup,按住 Alt + 回车键,点击 “Convert to data binding layout”,就可以生成 DataBinding 需要的布局规则 2.DataBinding简单使用(1.)声明一个数据对象12package com.peng.databindingdemo.modeldata class...
Dart语言编程基础
一.Dart 简述在Dart中,一切都是对象,每个对象都是一个类的实例,所有对象都继承自Object。 Dart是强类型的,也有自动推断类型的机制。 二.变量。1.变量的声明。Dart中定义变量有两种方式,一种是静态类型语言常用的方式,显式指定变量类型,另一种则是动态语言的常用方式,不指定类型,由vm自动推断。 变量的默认值:未初始化的变量的初始值为null。甚至具有数字类型的变量最初也是null,因为在Dart中没有基础的数据类型,所有的都是对象类型.数字——就像dart中的其他东西一样是对象。 2. 显式指定类型来定义变量123456void main() { // 通过显式指定类型来定义变量 String name = "张三"; num age = 18; name = 1; //报错,显示指定的变量的类型是无法改变的} 3. 隐式推导变量.无需指定变量的数据类型,变量会根据值的类型进行推导.使用关键字var. 12345678void main()...
Flutter环境搭建及项目配置
一. 下载安装Flutter。1.1 下载安装包Flutter SDK 1.2 下载完成后进行解压: 1.3 配置环境变量。控制面板->系统和安全->系统->高级系统设置->环境变量->path->编辑->新建 1.4 安装flutter依赖并检查。cmd命令: 1flutter doctor 1.5 查看flutter版本。1flutter doctor -v 二. Android Studio安装配置。2.1 Android studio安装dart和flutter插件。 2.2 重启Android studio创建flutter工程。 三. VsCode配置。1. vscode添加flutter支持。 2. 创建一个flutter的项目。 3.使用模拟器调试。 四. 创建或者运行项目卡住问题创建项目一直卡在Creating Flutter Project没反应。运行项目一直卡在: 1Running Gradle task 'assembleDebug'... ...
Kotlin总结之一变量常量及流程控制
一.Kotlin中的变量1.var 与 val var 用此关键字声明的变量,可以多次重复赋值,可读且可写,相当于Java中普通变量。 val 用此关键字声明的变量表示只读变量,即可读但不可写。相当于Java中用final修饰的变量。123456var str: String = "" //str是变量名,String表明该变量是String类型变量,后面就是赋值语句。var str2= "" //省略了声明变量类型,它可以根据赋的值而自动推断出类型。str="1234" //var 声明的变量可以重新赋值。val str3= " " //val申明的变量不能够再次赋值str3= "123456 " //再次赋值会报错...
Android音视频开发总结之三网络直播技术
一. 直播流程总览目前主流的直播架构中主要有两种方案,即流媒体转发、P2P。流媒体转发,是一种在视频直播中以流的方式将连续的音、视频数据经编码压缩后传输到流媒体服务器,用户实时从服务器获取流媒体资源,而不必要等待整个文件下载文件完毕的C/S架构视频直播方案;P2P直播,是一种建立在P2P技术基础上的视频直播方案,它规定客户端之间使用一定协议来交换和共享直播数据,通过减少对服务器的数据请求,以降低服务端的I/O带宽等方面压力,从而削减服务器带宽成本,降低客户端卡播率。 一个直播功能通用的基础架构涉及三个部分,即音视频采集端、云服务端和音视频播放端。可以看到直播的流程可以分为如下几步: 音视频采集 —>音视频处理—>音视频编码和封装—>推流到服务器—>服务器流分发—>播放器流播放如下图,是一个APP直播功能的架构: 从上图中我们可以看到,每一个部分都有各自要处理的一些工作。 总体来说,视频直播类功能的整体流程包括以下内容: 音视频采集 音视频处理 音视频编码和封装 推流 流媒体服务器处理 拉流 音视频解码 音视频播放 二....
Android音视频开发总结之二Android平台采集、编码、解码
一. 音视频采集流程串联整个音视频录制流程,完成音视频的采集、编码、封包成 mp4 输出。通过摄像头和麦克风获得实时的音视频数据; 播放流程: 获取流—>解码—>播放。 录制播放路程: 录制音频视频—>视频处理—>编码—>上传服务器->别人播放。 直播过程 : 录制音视频—>编码—>流媒体传输—>服务器—>流媒体传输到其他客户端—>解码—>播放。 视频采样数据 : 一般都是 YUV 或 RGB 格式 音频采样数据 :一般都是PCM格式 二.音频采集1.Android如何采集音频Android SDK对于音频采集提供两套API:MediaRecorder和AudioRecorder。 AudioRecordAudioRecord输出是PCM语音数据,得到原始的一帧帧PCM音频数据。如果保存成音频文件,是不能够被播放器播放的,所以必须先写代码实现数据编码以及压缩。一般直播技术采用的就是 AudioRecorder 采集音频数据。PCM(Pulse Code...