自定义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如果接口需要携带 Cookie、Authorization 等凭证,后端不能把 Access-Control-Allow-Origin 直接设置为 *,必须返回具体允许的 Origin,并同时设置 Access-Control-Allow-Credentials: true。如果不需要凭证,才适合使用 * 简化配置。 以 Netty 为例,支持跨域请求需要配置返回头信息。 1234567891011FullHttpResponse response = null;String responseStr = result.toString() + "your-secret-salt";response.headers().set("response", MD5Util.getMD5Code(responseStr,...
重放攻击的实现方案
最近系统上线之前需要做安全测试,安全测试人员指出了系统存在重放攻击,由于之前项目没有遇到过这样的问题,在这里就详细探讨一下重放攻击。 所谓重放攻击,就是攻击者把目标主机已经接收过的请求再次发送给服务器,从而达到重复执行或欺骗系统的目的,常见于身份认证、支付、状态变更等场景。攻击者可以通过网络监听、日志泄露、恶意客户端等方式拿到一次有效请求,然后重新发送。 需要注意的是,生产环境应使用 HTTPS,并使用 HMAC-SHA256、RSA/ECDSA 等签名方案校验请求完整性;不要用简单的 md5(参数拼接) 作为安全签名。下面的代码片段用于说明流程,实际落地时还要使用常量时间比较,避免签名比较过程泄露信息。 1、基于timestamp的方案每次 HTTP 请求都需要带上 timestamp 参数,然后把 timestamp 和其他关键参数一起参与签名。因为一次正常的 HTTP 请求从发出到到达服务器通常不会超过 60 秒,所以服务器收到请求后,先判断时间戳与当前时间的差值是否超过 60 秒;如果超过,则认为是非法请求。假如攻击者通过抓包得到了我们的请求...
macOS 下如何编译 FFmpeg for macOS App
本文写于 2017 年,示例重点是 FFmpeg 在 macOS App 场景下的编译思路。实际项目建议固定 FFmpeg、x264、fdk-aac 等依赖版本,避免直接使用最新主干导致构建结果不可复现。 我们今天来说说如何编译出适用于 macOS App 的库,包括动态库和静态库。 一、基本编译1、首先下载 FFmpeg 源码。生产项目建议切换到明确的 tag 或 release 分支。 1git clone https://git.ffmpeg.org/ffmpeg.git 2、配置 ./configure 选项。这里要注意设置 macOS 最低版本要求,否则可能会按当前构建机系统版本生成库文件;如果 App 需要运行在更低版本 macOS 上,就可能出现兼容性问题。 1--extra-cflags=-mmacosx-version-min=10.8 --extra-ldflags=-mmacosx-version-min=10.8 3、执行 ./configure,示例如下: 1./configure --target-os=darwin...
iOS直播技术分享-直播播放器(六)
随着互联网技术的飞速发展,移动端播放视频的需求如日中天,由此也催生了一批开源、闭源的播放器,但是无论这个播放器功能是否强大、兼容性是否优秀,它的基本模块通常都是由以下部分组成:事务处理、数据的接收和解复用、音视频解码以及渲染,其基本框架如下图所示: 针对各种铺天盖地的播放器项目,选取了比较出众的ijkplayer进行源码剖析。它是一个基于FFPlay的轻量级Android/iOS视频播放器,实现了跨平台的功能,API易于集成;编译配置可裁剪,方便控制安装包大小。 一、总体说明打开ijkplayer,可看到其主要目录结构如下: tool - 初始化项目工程脚本config - 编译ffmpeg使用的配置文件extra - 存放编译ijkplayer所需的依赖源文件, 如ffmpeg、openssl等ijkmedia - 核心代码  ijkplayer - 播放器数据下载及解码相关  ijksdl - 音视频数据渲染相关ios - iOS平台上的上层接口封装以及平台相关方法android -...
iOS直播技术分享-延迟优化(五)
本文初写于 2016 年,主要讨论当时常见 RTMP/HLS 直播链路中的延迟优化。当前低延迟直播还会结合 LL-HLS、WebRTC、SRT、QUIC 或云厂商私有协议,具体选型需要按端侧兼容性、延迟目标、成本和网络条件综合判断。 音视频直播系统是复杂的工程系统。要做到低延迟,需要同时优化采集、编码、传输、服务端分发和播放器缓冲策略。这里分享几个常见调优方向。 编码优化1、确保 Codec 开启了低延迟设置。部分编码器和解码器会因为重排序、参考帧和缓冲策略在显示前缓存视频帧。对于 H.264/H.265 来说,B 帧需要依赖前后参考帧,通常会增加编码和解码延迟;低延迟直播常见做法是减少或禁用 B 帧,并使用合适的 profile、GOP 和码控参数。2、编码器一般都会有码控造成的延迟,一般也叫做初始化延迟或者视频缓存检验器 VBV...
iOS直播技术分享-推流和传输(四)
本文初写于 2016 年,主要记录直播推流与传输协议的基础概念。当前直播链路已经出现更多低延迟方案,RTMP 仍常用于推流接入,但播放侧和互动场景会更多结合 HLS、DASH、WebRTC、SRT 或平台私有协议。 推流是直播的第一公里,对整个直播链路影响很大。如果推流网络不稳定,无论后续如何优化,观众体验都会受到影响。因此,排查直播问题时通常要先关注推流侧。 下面介绍几类常见推流或实时传输方案,以及它们在直播领域的优缺点: RTMP WebRTC 基于 UDP 的私有协议 1、RTMPRTMP 是 Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于 TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括 Adobe Media Server/Ultrant...
iOS直播技术分享-视频编码(三)
本文初写于 2016 年,主要用于理解 iOS 上 H.264 硬编码的基本流程。当前视频编码生态已经扩展到 H.265/HEVC、AV1 等格式,实际选型请结合设备兼容性、码率成本和播放链路判断。 x264 是一个开源的 H.264/MPEG-4 AVC 视频编码库。它和 Xvid 一样都是开源项目,但 x264 采用 H.264 标准,而 Xvid 采用 MPEG-4 Part 2 标准。在相同主观画质下,H.264 通常能比早期 MPEG-4 Part 2 获得更好的压缩效率。x264 使用 GPL 许可证。 iOS 视频编码分为硬编码和软编码:硬编码使用系统硬件编码器,软编码主要使用 CPU。苹果从 iOS 8 开始开放 VideoToolbox 硬编码 API,因此直播场景中通常优先使用硬编码来降低 CPU 占用和功耗。 iOS硬编码从iOS8开始,苹果开放了硬解码和硬编码API,框架为 VideoToolbox.framework, 此框架需要在iOS8及以上的系统上才能使用。 此框架中的硬解码 API 是一组 C 函数,在...
iOS直播技术分享-音频编码(二)
音频基础知识PCM格式pcm是经过话筒录音后直接得到的未经压缩的数据流数据大小=采样频率采样位数声道*秒数/8采样频率一般是44k,位数一般是8位或者16位,声道一般是单声道或者双声道pcm属于编码格式,就是一串由多个样本值组成的数据流,本身没有任何头信息或者帧的概念。如果不是音频的录制者,光凭一段PCM数据,是没有办法知道它的采样率等信息的。 AAC格式初步了解,AAC文件可以没有文件头,全部由帧序列组成,每个帧由帧头和数据部分组成。帧头包含采样率、声道数、帧长度等,有点类似MP3格式。 AAC编码初始化编码转换器123456789101112131415161718192021222324252627282930313233343536373839404142-(BOOL)createAudioConvert{ //根据输入样本初始化一个编码转换器 if (m_converter != nil){ return TRUE; } AudioStreamBasicDescription...
iOS直播技术分享-音视频采集(一)
本文初写于 2016 年,部分协议和编码器生态已经变化。下面内容主要用于理解 iOS 直播链路的基础流程,具体选型请结合当前业务和平台能力判断。 1、iOS直播技术的流程直播技术的流程大致可以分为几个步骤:数据采集、图像处理(实时滤镜)、视频编码、封包、上传、云端(转码、录制、分发)、直播播放器。 数据采集:通过摄像头和麦克风获得实时的音视频数据; 图像处理:将数据采集的输入流进行实时滤镜,得到我们美化之后的视频帧; 视频编码:编码分为软编码和硬编码。H.264 仍是兼容性很好的常用编码格式,H.265/HEVC 在同等画质下通常压缩效率更高,但需要考虑设备、系统版本和业务链路的支持情况。软编码主要利用 CPU,硬编码由系统硬件编码器完成;苹果从 iOS 8 开始开放 VideoToolbox 相关硬编码 API; 封包:传统 RTMP 推流中常见封装格式是 FLV; 上传:传统直播推流常用 RTMP,也可以根据低延迟需求选择 WebRTC、SRT...




