自定义Spring Cache的key
在多租户系统中,为了统一处理系统缓存,需在缓存组件中加上租户Id,以下是自定义自定义Spring Cache的key步骤。 1、继承RedisCacheManager123456789101112131415public class RedisAutoCacheManager extends RedisCacheManager { public RedisAutoCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) { super(cacheWriter, defaultCacheConfiguration); } /** * 从上下文中获取租户ID,重写@Cacheable value值 * @param name * @return */ @Override public Cache getCache(String name)...
Vue实现跨域请求
一般解决跨域问题可以通过CORS跨域、JSONP和反向代理跨域。下面分别介绍这三种跨域方式: 1、CORS以netty为例,支持跨域请求需要配置的返回头信息。 1234567891011FullHttpResponse response = null;String responseStr = result.toString() + "xxxxx";response.headers().set("response", MD5Util.getMD5Code(responseStr, true));response.headers().set(HttpHeaderNames.ACCESS_CONTROL_EXPOSE_HEADERS, "response"); // 有增加头的配置response.headers().set(HttpHeaderNames.CONTENT_TYPE,...
重放攻击的实现方案
...
macOS下如何编译FFmpeg for macOS APP
我们今天来说说如何编译出适用于macOS APP的库,包括动态库和静态库。 一、基本编译1、首先我们下载一个最新的ffmpeg源码。 1git clone https://git.ffmpeg.org/ffmpeg.git 2、配置./configure选项,这个要注意需要设置对macOS最低版本的要求,否则是默认当前本机的最新系统如,这样的话在使用库的时候,如果是APP要运行在10.10及之下的系统时候,就会报错。 1--extra-cflags=-mmacosx-version-min=10.8 --extra-ldflags=-mmacosx-version-min=10.8 3、执行./configure内容如下: 1./configure --target-os=darwin --enable-static --enable-swscale --enable-nonfree --enable-gpl --enable-version3 --enable-nonfree --disable-programs ...
iOS直播技术分享-直播播放器(六)
随着互联网技术的飞速发展,移动端播放视频的需求如日中天,由此也催生了一批开源、闭源的播放器,但是无论这个播放器功能是否强大、兼容性是否优秀,它的基本模块通常都是由以下部分组成:事务处理、数据的接收和解复用、音视频解码以及渲染,其基本框架如下图所示: 针对各种铺天盖地的播放器项目,选取了比较出众的ijkplayer进行源码剖析。它是一个基于FFPlay的轻量级Android/iOS视频播放器,实现了跨平台的功能,API易于集成;编译配置可裁剪,方便控制安装包大小。 一、总体说明打开ijkplayer,可看到其主要目录结构如下: tool - 初始化项目工程脚本config - 编译ffmpeg使用的配置文件extra - 存放编译ijkplayer所需的依赖源文件, 如ffmpeg、openssl等ijkmedia - 核心代码  ijkplayer - 播放器数据下载及解码相关  ijksdl - 音视频数据渲染相关ios - iOS平台上的上层接口封装以及平台相关方法android -...
iOS直播技术分享-延迟优化(五)
音视频的直播系统是一个复杂的工程系统,要做到非常低延迟的直播,需要复杂的系统工程优化和对各组件非常熟悉的掌握。这里分享几个简单而常用的调优技巧。 编码优化1、确保 Codec 开启了最低延迟的设置。Codec 一般都会有低延迟优化的开关,对于 H.264 来说其效果尤其明显。很多人可能不知道 H.264 的解码器正常情况下会在显示之前缓存一定的视频帧,对于 QCIF 分辨率大小的视频(176 × 144)一般会缓存 16 帧,对于 720P 的视频则缓存 5 帧。对于第一帧的读取来说,这是一个很大的延迟。如果你的视频不是使用 H.264 来编码压缩的,确保没有使用到 B 帧,它对延迟也会有较大的影响,因为视频中 B 帧的解码依赖于前后的视频帧,会增加延迟。2、编码器一般都会有码控造成的延迟,一般也叫做初始化延迟或者视频缓存检验器 VBV...
iOS直播技术分享-推流和传输(四)
推流是直播的第一公里,直播的推流对这个直播链路影响非常大,如果推流的网络不稳定,无论我们如何做优化,观众的体验都会很糟糕。所以也是我们排查问题的第一步,如何系统地解决这类问题需要我们对相关理论有基础的认识。 推送协议 下面就先介绍一下都有哪些推送协议,他们在直播领域的现状和优缺点。RTMPWebRTC基于 UDP 的私有协议 1、RTMPRTMP 是 Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于 TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括 Adobe Media Server/Ultrant Media Server/red5 等。RTMP...
iOS直播技术分享-视频编码(三)
x264是一种免费的、具有更优秀算法的符合H.264/MPEG-4 AVC视频压缩编码标准格式的编码库。它同xvid一样都是开源项目,但x264是采用H.264标准的,而xvid是采用MPEG-4早期标准的。由于H.264是2003年正式发布的最新的视频编码标准,因此,在通常情况下,x264压缩出的视频文件在相同质量下要比xvid压缩出的文件要小,或者也可以说,在相同体积下比xvid压缩出的文件质量要好。它符合GPL许可证。 iOS视频编码分为硬编码和软编码:硬编码就是利用手机专用的硬件进行编码,软编码是用CPU进行编码。由于苹果在iOS8开放的硬编码的API,故现在大多数的直播应用都是采用的硬编码。 iOS硬编码从iOS8开始,苹果开放了硬解码和硬编码API,框架为 VideoToolbox.framework, 此框架需要在iOS8及以上的系统上才能使用。 此框架中的硬解码API是几个纯C函数,在任何OC或者 C++代码里都可以使用。使用的时候,首先,要把VideoToolbox.framework...
iOS直播技术分享-音频编码(二)
音频基础知识PCM格式pcm是经过话筒录音后直接得到的未经压缩的数据流数据大小=采样频率采样位数声道*秒数/8采样频率一般是44k,位数一般是8位或者16位,声道一般是单声道或者双声道pcm属于编码格式,就是一串由多个样本值组成的数据流,本身没有任何头信息或者帧的概念。如果不是音频的录制者,光凭一段PCM数据,是没有办法知道它的采样率等信息的。 AAC格式初步了解,AAC文件可以没有文件头,全部由帧序列组成,每个帧由帧头和数据部分组成。帧头包含采样率、声道数、帧长度等,有点类似MP3格式。 AAC编码初始化编码转换器123456789101112131415161718192021222324252627282930313233343536373839404142-(BOOL)createAudioConvert{ //根据输入样本初始化一个编码转换器 if (m_converter != nil){ return TRUE; } AudioStreamBasicDescription...
iOS直播技术分享-音视频采集(一)
1、iOS直播技术的流程直播技术的流程大致可以分为几个步骤:数据采集、图像处理(实时滤镜)、视频编码、封包、上传、云端(转码、录制、分发)、直播播放器。 数据采集:通过摄像头和麦克风获得实时的音视频数据; 图像处理:将数据采集的输入流进行实时滤镜,得到我们美化之后的视频帧; 视频编码:编码分为软编码和硬编码。现在一般的编码方式都是H.264,比较新的H.265据说压缩率比较高,但算法也相当要复杂一些,使用还不够广泛。软编码是利用CPU进行编码,硬编码就是使用GPU进行编码,软编码支持现在所有的系统版本,由于苹果在iOS8才开放硬编码的API,故硬编码只支持iOS8以上的系统; 封包:现在直播推流中,一般采用的格式是FLV; 上传:常用的协议是利用RTMP协议进行推流; 云端:进行流的转码、分发和录制; ...