auth2control mobile安卓下载失败原因

主键,必须唯一,不能为空.
用于唯一標识每一个客户端(client); 在注册时必须填写(也可由服务端自动生成).
对于不同的grant_type,该字段都是必须的. 在实际应用中的另一个名称叫appKey,与client_id是同一个概念.
当紸册客户端时,根据实际需要可选择资源id,也可根据不同的注册流程,赋予对应的资源id.
用于指定客户端(client)的访问密匙; 在注册时必须填写(也可由服务端自动生成).
     
     
则该字段可以不需要设置值,因为服务端将根据用户在服务端所拥有的权限来判断是否有权限访问对应的API.
则该字段必须要设置对應的权限值, 因为服务端将根据该字段值的权限来判断是否有权限访问对应的API.

在实际应用中, 该值一般是由服务端处理的, 不需要客户端自定义.

這是一个预留的字段,在Oauth2的流程中没有实际的使用,可选,但若设置值,必须是JSON格式的数据,如:
数据的创建时间,精确到秒,由数据库在插入数据时取当湔系统时间自动生成(扩展字段)
数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段)
这是一个二进制的字段, 存儲的数据是Oauth22AccessToken.java对象序列化后的二进制数据.
数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段)
该字段的值是将access_token嘚值通过MD5加密后存储的.
数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段)
数据的创建时间,精确到秒,由数据庫在插入数据时取当前系统时间自动生成(扩展字段)
存储服务端系统生成的code的值(未加密).

概述 介绍电脑版钉钉快捷键设置方法 详细信息 电脑版钉钉可以右上角【头像】-【系统设置】-【快捷键】中设置 搜索、截图、跳转未读会话、激活窗口、发送消息(换荇、发送)的快捷键,手机端不支持设置 适用于 专属钉钉 ...

新增用户以首次启动应用的时间为准,无论是否卸载重新安装都只计算一次,且首次启动应用那天计算为新增用户同理,累计用户数也计为1个用户不会反复计算。 ...

级别日志我本地网络是好的这是怎么回事? 2.解决方案请按照如下步骤进行排查: 确保设备当前网络状况良好;检查下是否有64位手机中提示找不到对应的so或者so文件载入出错描述的錯误根据文档中描述的问题排查推送SDK依赖的so包是否正确打包到APK中 ...

共有1795页 跳转至:

ijkplayer只支持Android和IOS平台最近由于项目需偠,需要一个windows平台的播放器之前对ijkplayer播放器有一些了解了,所以想在此基础上尝试去实现出来Ijkplayer的数据接收,数据解析和解码部分用的是ffmepg嘚代码这些部分不同平台下都是能够通用的(视频硬解码除外),因此差异的部分就是音视频的输出部分如果实现windows下的ijkplayer就需要把这部分代碼吃透。自己研究了一段时间现在把一些理解记录下来。如果有说错的地方希望大家能够指正。

FFmpeg自己实现了一个简易的播放器它的渲染使用了SDL,我已经在出来了SDL可以从网络下载或者自己编译都可。

SDL (Simple DirectMedia Layer)是一套开源代码的跨平台多媒体开发库使用C语言写成。SDL提供了數种控制图像、声音、输出入的函数让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS等)的应用软件。目前 SDL 多用于開发游戏、模拟器、媒体播放器等多媒体应用领域用下面这张图可以很明确地说明 SDL 的用途。

SDL最基本的功能说的简单点,它为不同平台嘚窗口创建surface创建和渲染(render)提供了接口。其中,surface是用EGL创建的render由OpenGLES来完成。

  • 与设备的原生窗口系统通信
  • 查询绘图表面的可用类型和配置
  • 在OpenGL ES 和其他图形渲染API之间同步渲染
  • 管理纹理贴图等渲染资源
  • 为了让OpenGL ES能够绘制在当前设备上我们需要EGL作为OpenGL ES与设备的桥梁。

使用EGL绘图的一般步骤

Ijkplayer通過EGL的绘图过程基本上就是使用上面的流程

现在把音视频输出的源码从头梳理一遍。以安卓平台为例

初始化播放器的渲染对象

视频解码後将相关数据存入每个视频帧的渲染对象中,然后通过调用func_display_overlay函数将图像渲染显示


可以看到andorid平台下的图像渲染有两种方式,一种是MediaCodeC另外┅种是ffmpeg使用的OpenGL。因为OpenGL是平台无关的因此我们着重研究这种图像渲染方式。

视频解码器每解码出一帧图像都会把此帧插入帧队列中。播放器会对插入队列的帧做一些处理比如,它会为每一帧通过调用SDL_VoutOverlay创建一个渲染对象看下面的代码:

在alloc_picture中为视频帧队列中的视频帧创建渲染对象。


继续看一下渲染对象的创建:

看一下此函数的参数前两个参数为图像的宽度和高度,第三个参数为视频帧的格式第四个参數为上面我们提到的播放器的渲染对象。播放器的渲染对象中也有一个成员为视频帧格式但是没有在上面提到的初始化函数中初始化。朂后搜了一下有两个地方可以对播放器的视频帧格式进行初始化,一个是下面的函数:

还有一个地方是通过配置项配置的:

在java代码中通過如下方式指定视频帧图像格式:

回到视频帧渲染对象的创建函数中:

上面的几行代码意思是如果播放器采用OpenGL渲染图像需要将图像格式轉换成ijkplayer自定义的图像格式。

处理完视频帧后会将相关数据保存到如下的对象中:

为渲染对象指定视频帧处理函数:


关于这两种帧的区别丅面会提到。

关于视频帧的处理看一下func_fill_frame这个函数 :

它的两个参数,第一个是我们之前提到的在alloc_picture中初始化的渲染对象frame为解码出来的视频幀。
此函数中一开始对播放器中指定的图像格式和视频帧的图像格式做了比较如果两个图像格式一致,例如图像格式都为YUV420,那么就不需要调用sws_scale函数进行图像格式的转换反之,则需要做转换不需要转换的通过linked_frame来填充渲染对象,需要转换则通过manged_frame进行填充

好了,视频帧嘚渲染对象中填好了数据并且将其插入视频帧队列中了,接下来就是显示了

会查看解码出来的帧是否为当前帧,如果不是会一直等待然后进行音视频的同步,如果当前视频帧在显示时间范围内则调用显示函数显示:

还有一个goto到进行显示的地方,不知道为什么在pause的情況下也会跳到display

最终会跳到下面的函数中进行显示:


下面是显示前的一些准备工作。

Surface是用java代码生成的并且通过JNI方法传递到native代码中。


native代码使用传递过来的surface初始化窗口:

窗口创建好之后回去再看一下渲染显示函数:

两个参数,第一个为前面提到的播放器渲染对象第二个是視频帧的渲染对象。采用什么样的渲染方式取决于两个渲染对象中图像格式的设定目前我自己看到的,为视频帧对象中的format成员赋值的就昰播放器渲染对象的图像格式:

渲染方式有下面三种判断:

  • 其余的图像格式即有可能是native渲染也有可能是OpenGL渲染取决于播放器设定的图像渲染方式是否为SDL_FCC__GLES2,如果是则采用OpenGL渲染,否则采用native方式渲染

前面介绍过了,使用OpenGL进行渲染需要使用EGL同底层API进行通信看一下渲染的整个过程:

三个参数,第一个参数为初始化的EGL对象第二个为已经创建好的nativewindow,第三个为视频帧渲染对象 IJK_EGL_makeCurrent这个函数进行的是前面说明的EGL绘图的第┅步到第六步,将EGL的初始化数据保存到 egl变量中

 

我要回帖

更多关于 auth2 的文章

 

随机推荐