Kotlin总结之三函数及函数式编程
一.Kotlin中的函数函数是执行特定任务的一段代码,程序通过将一段代码定义成函数,并为该函数指定一个函数名,就可以在需要的时候多次调用这段代码,代码复用的重要手段就是通过函数实现的。 1.函数声明定义格式为: 123权限修饰符 fun 函数名(参数名 :类型,...) : 返回值{ //函数执行体} 函数从参数角度,可以分为有参函数以及无参函数;从返回值角度,可以分为有返回值的函数以及没有返回值的函数。那么函数一共就有4种类型,无参无返回值、无参有返回值、有参无返回值、有参有返回值。 1234567891011121314151617181920212223242526272829//无参无返回值fun test() { println("test")} //无参有返回值fun test(): String { return"test"} //有参无返回值fun test(content: String) { ...
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...
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...
Android音视频开发总结之一理论基础
一. 音频技术基础概念1. 声音的物理性质众所周知,声音是由物体振动而产生的。声音是一种压力波,当演奏乐器或者说话时,它们的振动都会引起空气有节奏的振动, 使周围的空气产生疏密变化,由此就产生了声波,这种现象会一直延续到振动消失为止。 声波具有三要素: 音调:也叫音频,频率越高,波长就会越短,而低频声响的波长则较长。所以这样的声音更容易绕过障碍物。能量衰减就越小,声音就会传播的越远; 音量:就是振动的幅度。用不同的力度敲打桌面,声音的大小势必发生变换。在生活中,我们用分贝描述声音的响度; 音色:在同样的频率和响度下,不同的物体发出的声音不一样。波形的形状决定了声音的音色。因为不同的介质所产生的波形不同,就会产生不一样的音色。 2....