自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

猿诗人的博客

记录点点滴滴

  • 博客(66)
  • 资源 (2)
  • 收藏
  • 关注

原创 Android JNI开发--集成第三方SO

我们的应用需要调用第三方so中的方法,然后,第三方可以提供相应的SO文件和相应的头文件。SO文件:libFunction.so;头文件:function.h,如下:extern "C" { ...... int getResult(int index);}接下来就是如何使用这个SO和头文件function.h。调用SO内方法比如我们的源码文件为Test.cpp:#incl...

2020-03-16 11:54:07 533 1

原创 Android JNI开发--基本内容

前些天项目中有JNI开发的需求,突然发现竟然最基本的JNI的开发又忘了,只记得一些大概,还得搜半天。所以抽空再记录一下相关的内容,以及一些开发时候的想法(想法这东西像灵感一样,只有开发的时候才能想起来,时间长了就忘了,不记下来就浪费了),以便以后用到时可以快速的回忆起来。好记性不如烂笔头啊。有JNI需求的项目中,首先,大多数都需要有Java层面的调用需求,也就是从Java层需要调用JNI层的方法...

2020-03-13 11:36:50 334

原创 基于RTMP协议的音视频传输----RTMP协议消息分类

消息Message分类RTMP消息Message的格式如下: 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Message Type | ...

2019-12-23 19:38:38 366

原创 基于RTMP协议的音视频传输----RTMP协议消息与消息块的格式

少时诵诗书所所所所所所所所

2019-12-23 19:38:08 604

原创 基于RTMP协议的音视频传输----RTMP协议之握手

RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议。RTMP协议基于TCP协议,依靠TCP协议提供可靠的数据传输,因此数据在网络上传输不会出现丢包的情况。RTMP协议连接可靠,多路复用,延时容易受到网络状态的影响。握手...

2019-12-23 19:37:33 373

原创 OkHttp3源码解析--设计模式

来看一下OkHttp3使用到的编码中的设计模式:构造者模式;工厂模式;观察者模式;单例模式;策略模式;责任链模式;享元模式;分辨说一下这些设计模式运用。构造者模式这个设计模式运用的太多了,如OkHttpClient、Request、Response、MultipartBody、HttpUrl等都是用了构造者模式,如下:public class ...

2019-04-18 20:08:25 924

原创 OkHttp3源码解析--拦截器链

前面说到的同步请求RealCall和异步请求AsyncCall,在执行execute方法时都会执行下面一句:Response response = getResponseWithInterceptorChain();这一句就是调用了拦截器链,执行了一系列操作,完成了请求访问,并将结果返回。RealCall#getResponseWithInterceptorChain代码块Java...

2019-04-18 20:08:00 209

原创 OkHttp3源码解析--拦截器RetryAndFollowUpInterceptor

看一下OkHttp内置的第一个拦截器RetryAndFollowUpInterceptor:RetryAndFollowUpInterceptorpublic final class RetryAndFollowUpInterceptor implements Interceptor {​ private static final int MAX_FOLLOW_UPS = 20; //...

2019-04-18 20:06:30 298

原创 OkHttp3源码解析--拦截器ConnectInterceptor-相关类

经过上面的缓存拦截器,如果没有获取到可用的缓存,还是需要建立Socket连接。为当前请求找到合适的连接,可能复用已有连接也可能是重新创建的连接。接下来就看一下ConnectInterceptor:ConnectInterceptorpublic final class ConnectInterceptor implements Interceptor { public final Ok...

2019-04-18 20:06:20 186

原创 OkHttp3源码解析--拦截器ConnectInterceptor-处理流程

依旧再看一下ConnectInterceptor的intercept方法:public final class ConnectInterceptor implements Interceptor { public final OkHttpClient client;//已经创建的OkHttpClient对象 //构造器中传入OkHttpClient对象 public ConnectI...

2019-04-18 20:06:10 363

原创 OkHttp3源码解析--OkHttpClient和Request创建过程

OkHttp3的分析过程将以以下代码调用过程进行://步骤1:创建OkHttpClient对象OkHttpClient client = new OkHttpClient.Builder() .readTimeout(5, TimeUnit.SECONDS) .build();//步骤2:创建Request对象Request request = new Request.Builde...

2019-04-18 20:06:02 1718

原创 OkHttp3源码解析--拦截器CallServerInterceptor

这是做后一个拦截器,ConnectInterceptor已经连接到服务器了,接下来我们就是写入请求数据以及读出返回数据了:写入请求头写入请求体读取响应头读取响应体看一下代码:/** This is the last interceptor in the chain. It makes a network call to the server. */public f...

2019-04-18 20:05:53 256

原创 OkHttp3源码解析--拦截器CacheInterceptor

CacheInterceptor顾名思义,它是和缓存的管理和获取相关的:从缓存中匹配Request的请求响应结果,根据缓存策略,如果能找到可用的缓存,直接返回;将服务器返回的请求结果,写入到缓存中;更新现有缓存;设置缓存//缓存文件夹File cacheFile = new File(getExternalCacheDir().toString(),"cache");...

2019-04-18 20:05:43 176

原创 OkHttp3源码解析--拦截器BridgeInterceptor

桥拦截器的作用有:负责把用户构造的请求转换为发送给服务器的请求,把服务器返回的响应转换为对用户友好的响应;转换的过程就是添加一些服务端需要的header信息;在Request阶段配置用户信息,并添加一些请求头。在Response阶段,进行gzip解压。将我们创建的请求对象转成网络访问需要的请求对象,其实就是添加一些头部;然后,将网络访问对象传递出去;最后,将网络...

2019-04-18 20:05:33 152

原创 OkHttp3源码解析--Call异步请求

来看一下异步请求的源码流程,先看一下异步请求使用流程://步骤1:创建OkHttpClient对象OkHttpClient client = new OkHttpClient.Builder() .readTimeout(5, TimeUnit.SECONDS) .build();//步骤2:创建Request对象Request request = new Request.Buil...

2019-04-18 20:05:22 663

原创 OkHttp3源码解析--Call同步请求

前面创建了Call对象,接下来就是执行。执行又分为了同步执行和异步执行,先看同步执行过程。还是之前的过程://步骤1:创建OkHttpClient对象OkHttpClient client = new OkHttpClient.Builder() .readTimeout(5, TimeUnit.SECONDS) .build();//步骤2:创建Request对象Request...

2019-04-18 20:05:13 631

原创 OkHttp3源码解析--Call创建过程

再来看之前的过程://步骤1:创建OkHttpClient对象OkHttpClient client = new OkHttpClient.Builder() .readTimeout(5, TimeUnit.SECONDS) .build();//步骤2:创建Request对象Request request = new Request.Builder() .url("ht...

2019-04-18 20:05:02 330

原创 OkHttp3简介与使用

OkHttp是一个非常高效的Http客户端,近年来几乎所有的Android应用都会使用它作为网络访问的框架。它有以下几个重要的特点:支持HTTP/2;支持连接复用;内部维护连接池;支持GZIP压缩,节省流量;维护缓存,提高响应效率;支持自动重连;等等同步GET请求String url = "http://wwww.baidu.com";OkHtt...

2019-04-18 20:04:53 881

原创 Android USB设备通信--读写操作

进行读写操作的前提:获取UsbDeviceConnection对象,即建立连接;正确获取到所需要的UsbInterface对象,并占用这个通信接口;正确获取到所需要的Endpoint,包括读Endpoint和写Endpoint;创建相应的数据缓存区,包括读写数据缓存区。protected byte[] mReadBuffer = new byte[DEFAULT_READ_BUFFER_...

2019-04-18 20:04:08 8676 1

原创 Android USB设备通信--连接设备

Android设备检测到USB设备插入,用户授予连接权限后,即可进行设备的连接流程。/**连接设备*/private void connectDevice(UsbDevice usbDevice){//Android标准的api,判断设备是否有连接权限if (mUsbManager.hasPermission(usbDevice)){//Android标准的API,打开设备,返回...

2019-04-18 20:03:41 2534 2

原创 Android USB设备通信--插拔监测

电子秤和读卡器都可以通过usb口和pos通信。设备插拔,系统广播插入或者拔出usb设备时,Android系统都会发出广播,我们可以通过广播监听者BrocastReceiver监听相应的广播,进行相应的初始化或者资源释放。共有三种广播:设备插入广播设备授权广播设备播出广播public class UsbDeviceHelper extends BroadcastReceiver {//...

2019-04-18 20:03:31 1903

原创 H264视频传输、编解码----FFmpeg软解码

记录一下之前项目的实际使用过程。 将按照Java层——>JNI接口——>JNI代码中使用FFmpeg解码。 首先Java层:public class CodecWrapper {//加载FFmpeg的动态so库 static { System.loadLibrary("codec"); System.loadLibrary("avutil-55

2019-04-18 20:00:49 2494 2

原创 H264视频传输、编解码----MediaCodec硬解码

public class RtspDecoder { private static final String TAG = RtspDecoder.class.getSimpleName(); //处理音视频的编解码的类MediaCodec private MediaCodec video_decoder; //显示画面的Surface private S...

2019-04-18 20:00:21 2408

原创 H264视频传输、编解码----RTP/RTCP/RTSP协议数据传输基于UDP or TCP

用一句简单的话总结:RTSP发起/终结控制流媒体、RTP传输流媒体数据、RTCP对RTP数据进行控制,同步。一般情况下,RTSP协议采用TCP协议传输控制流媒体的指令,RTP/RTCP协议采用UDP方式传输控制指令。但是有时候RTSP协议数据也可以使用UDP,或者RTP/RTCP也可以使用TCP;1、RTSP协议采用TCP协议传输控制流媒体的指令,RTP/RTCP协议采用UDP方式传输控...

2019-04-18 19:59:37 2751

转载 H264视频传输、编解码----RTSP认证

Rtsp认证主要分为两种:基本认证(basicauthentication)和摘要认证(digestauthentication )。基本认证是http 1.0提出的认证方案,其消息传输不经过加密转换因此存在严重的安全隐患。摘要认证是http 1.1提出的基本认证的替代方案,其消息经过MD5哈希转换因此具有更高的安全性。下面主要介绍摘要认证:1.基本认...

2019-04-18 19:59:19 1589

原创 H264视频传输、编解码----RTP/RTCP协议

RTSP对流媒体提供了控制方法,使得实时流数据变得可控。但是它并不负责实时流数据的传输。实时流数据的传输和传输过程的同步、优化由RTP/RTCP来负责。实时传输协议RTP( Real-time Transport Protocol)和实时传输控制协议(Real-timeControlProtocol,RTCP),在RTP会话期间,每个会话参与者周期性地向所有其他参与者发送RTCP控制信息包,...

2019-04-18 19:58:48 1192

原创 H264视频传输、编解码----RTSP协议

RTSP(Real Time Streaming Protocol), 实时流传输协议, 它是TCP/IP协议体系中的一个应用层协议它是对流媒体进行控制 的网络控制协议,可以对流媒体提供诸如播放、暂停、快进、停止等操作,它负责定义具体的控制消息、操作方法、状态码等,此外还描述了与RTP间的交互操作。但是,实时流的传输并不是它负责,而是交给RTP、RTCP协议。RTSP发送的指令一般通过

2018-01-28 17:43:52 17778 2

原创 H264视频传输、编解码----H264帧类别

视频其实就是播放一系列连续的图片,让人眼产生连续运动的感觉; 视频的传输,如果是全部的进行图片的传输,对当前的网络和存储来说是不可接受的。其实视频连续的几帧数据之间有很多重复数据,如果将重复的数据在发送端去掉,那么可以节约很多带宽和存储空间。因此有了各种视频压缩标准,比如H.264,H.265,MJPEG等。减少数据量的基本方法可以减少一帧图像内或者一系列图像帧之间的不必要的重复数据,但是这样会造

2018-01-07 18:12:39 6969

原创 Android JNI开发(10)--实例

写那么多不如来点代码实在!!! Java代码:public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s

2017-12-04 16:56:14 397

转载 Android JNI开发(9)--JNI中防止内存泄漏

文章 https://www.ibm.com/developerworks/cn/java/j-lo-jnileak/index.html

2017-12-04 16:37:48 418

原创 Android JNI开发(8)--JNI出坑指南

JNI可以提高应用程序的性能,但是破坏了程序的可移植性,换平台的话,需要重新编译本地代码。 下面说一下JNI本地程序编写中的一些坑,以及避坑的方法;局部引用超限当我们通过FindClass,NewStringUtf等获取jclass或jobject,如果没有调用DeleteLocalRef删除局部引用,可能会出现内存泄漏或局部引用超限(local reference table overflow)

2017-12-04 15:54:25 865

原创 Android JNI开发(7)--mk文件编写

作为一个Android应用开发者,也经常会遇到编写mk文件的问题,也应该掌握各种类型的mk文件的编写。其实这东西不难,只是我们不了解。 根据例子,由浅入深的了解第一个例子首先,看一个最简单的mk文件,也是hello jni级别的:LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := he

2017-09-22 16:37:40 757

原创 Android JNI开发(6)--JNI中使用线程

JNI中线程是基于Linux的线程,包含头文件 #includepthread_mutex_t mutex;//互斥锁pthread_cond_t cond;//条件变量pthread_mutex_init(&mutex, NULL); pthread_mutex_lock(&mutex);pthread_mutex_trylock(&mutex)pthread_mutex_unloc

2017-09-21 14:29:28 2234

原创 Android JNI开发(5)--数据传递

首先JNI中的数据类型有基本数据类型和引用类型: 基本数据类型为:Java类型 JNI类型 描述boolean jboolean unsigned 8 bitsbyte jbyte signed 8 bitschar jchar unsigned 16 bitssh

2017-09-21 08:50:10 1308

原创 Android JNI开发(4)--访问Java的实例变量和静态变量

啥都不说了,上代码:/* * 访问Java实例变量的值 */ JNIEXPORT void accessInstanceField (JNIEnv *env, jclass cls, jobject obj) { jclass clazz; jfieldID fid; jstring j_str; jstring j_newStr;

2017-09-20 14:42:49 426

原创 Android JNI开发(3)--引用类型

NDK开发中的引用类型分为三种:局部引用(Local Reference)、全局引用(Global Reference)、弱全局引用(Weak Global Reference)1、 局部引用通过NewLocalRef和各种JNI接口创建(FindClass、NewObject、GetObjectClass和NewCharArray等)。会阻止GC回收所引用的对象,不能跨函数使用,不能跨线程使用。函

2017-09-20 10:41:34 408

原创 Android JNI开发(2)--native方法调用Java方法

很多时候,我们在JNI代码中获取到了我们想要的值,需要返回到Java层,简单的情况下可以使用return某个值来实现。但是复杂情况下,我们需要不断地获取JNI中返回的值,我们就可以在JNI中主动去找Java中的方法,然后调用,并把JNI中的值作为Java方法的参数传入。如下://native方法将调用Java方法JNIEXPORT void JNICALL nativeCallJava(JNIEn

2017-09-19 16:35:45 1000

原创 Android JNI开发(1)--JavaVM和 JNIEnv 动态注册本地方法

这里说的JNI不是初学Android JNI时的那种,而是使用NDK相应的API进行相应的开发工作。一、JNI中获取JavaVM和 JNIEnvJavaVM是虚拟机在JNI中的表示,一个虚拟机中只有一个JavaVM对象,这个对象是线程共享的。 JNIEnv类型是一个指向全部JNI方法的指针。该指针只在创建它的线程有效,不能跨线程传递。多线程无法共享。 使用JNI_OnLoad方法,

2017-09-18 18:03:35 1739

原创 Java泛型学习总结

感觉在Java的世界里,我永远是初学者。还是有好多东西需要总结学习。 Java泛型:泛型类、泛型接口和泛型方法1、泛型类出现的必要性泛型类出现的原因之一为容器类的使用,看下面的代码:public class Container { private String key; private String value; public Container(String k, Str

2017-03-28 11:46:36 274

原创 Java反射机制总结学习--通过反射机制了解泛型本质

public class Demo4 {public static void main(String[] args) { ArrayList list = new ArrayList<>(); ArrayList<String> list_str = new ArrayList<String>(); list_str.add("hello");// list_str.

2017-03-06 15:02:55 224

flv_tag.docx

FLV tag格式的表格呈现。包括Video tag,Audio tag,Script Tag等。格式,字段,字段长度等。供学习flv格式的开发者。

2019-12-27

flvData.FLV

Flv文件,可以再NotePad++上面查看里面的数据格式。分析里面的Video Tag,Audio Tag,Script Tag等。作为学习flv格式的重要文件。

2019-12-26

空空如也

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

TA关注的人

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