Windows/Android/iOS平台实现RTMP推送和播放端AES或SM4加解密实例
1. AES算法和SM4算法扫盲
AES算法
密码学中的高级加密标准(AdvancedEncryptionStandard,AES),又称Rijndael加密算法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPSPUB197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。AES有一个固定的128位的块大小和128,192或256位大小的密钥大小。
该算法为比利时密码学家JoanDaemen和VincentRijmen所设计,结合两位作者的名字,以Rijndael命名之。AES在软件及硬件上都能快速地加解密,相对来说较易于操作,且只需要很少的存储空间。作为一个新的加密标准,目前正被部署应用到更广大的范围。
SM4算法
SM4算法全称为SM4分组密码算法,是国家密码管理局2012年3月发布的第23号公告中公布的密码行业标准。SM4算法是一个分组对称密钥算法,明文、密钥、密文都是16字节,加密和解密密钥相同。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密过程与加密过程的结构相似,只是轮密钥的使用顺序相反。
SM4算法的优点是软件和硬件实现容易,运算速度快。
2. 接口说明及调用展示
大牛直播SDK发布的跨平台(Windows/Android/iOS平台)的基于AES/SM4音视频逐帧数据加密整体解决方案,第三方即便是破解了URL,也没法播放,通过抓包工具抓取到数据,也没法正常显示。
此方案的难点是需要了解音视频编码相关的细节,才能进行适当的扩展。优点是常用的rtmp server可以直接支持,通用性很强。只需要改推送端和播放端就好。
2.1 Windows平台RTMP推送端
C++接口:
C#接口:
C#调用展示:
2.2 Windows平台RTMP播放端
C++接口:
C#接口:
调用展示:
2.3 Android平台RTMP推送端
调用展示:
2.4 Android平台RTMP播放端
调用展示:
2.5 iOS平台RTMP推送端
调用展示:
2.6 iOS平台RTMP播放端
调用展示:
3.注意事项
1. RTMP推送端什么时候调用加密接口?
回答:SetUrl之后,开始推送之前;
2. RTMP播放端,什么时候设置Key和IV解密向量?
回答:可以实现自动检测,如检测到推送的RTMP流系AES或SM4加密,会回调上来NT_SP_E_EVENT_ID_NEED_KEY事件,弹出输入Key和IV框,如输入的Key和IV不正确,播放端会收到NT_SP_E_EVENT_ID_KEY_ERROR事件
3. 设置加解密Key和IV,有什么注意事项?
回答:key_size: 如果加密算法是aes, key_size必须是16, 24, 32 这三个值, 其他返回错误; 如果加密算法是sm4, key_size必须是16, 其他值返回错误;iv_size: 当前必须是16, 其他值返回错误。
相关资料:Github: https://github.com/daniulive/SmarterStreaming
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
iOS协程coobjc的设计篇-栈切换
iOS协程coobjc的设计篇-栈切换 协程 (Coroutine) 是一种轻量级的非抢占式用户态线程。本文主要介绍阿里开源的iOS协程框架coobjc的设计思考。 1. 协程简介 Subroutine: 子程序,可以理解为函数Coroutine: 协程 Subroutine 的调用顺序是确定的,比如下图左A调B,B执行完毕返回,Subroutine调用和返回是通过压栈出栈来实现的。而Coroutine的调用则和Subroutine不同,比如下图右A调C, 但是在C执行过程中可能会suspend, 然后在其他时候再resume回来继续执行,也就是执行顺序是不确定的。 也就是Coroutine的重要特质: suspend 和 resume, suspend也会叫做yield.本图来自:https://llvm.org/devmtg/20
- 下一篇
可自由添加到指定位置的分页标控件(支付宝淘宝效果) - LGFFreePT
LGFFreePT 可自由添加到指定位置的分页标控件 制作目的 想要把分页标放在视图任意位置 把分页用的子控制器 Page 留给大家自己定义(传给 LGFFreePT 一个自己初始化的 UICollectionView,在自己的控制器里实现其代理,并在 cell 上添加子控制器就行) 部分效果展示 毛毛虫底部线对准title 向下隐藏-底部线对准 title(自定义) 向上隐藏 普通底部线对准title 渐隐效果 模仿系统UISegment 指定index添加特殊title 主副title 主副title放大缩小 支付宝滚动更新title 淘宝首页 这只是冰山一角,还有近千种效果等待你的组合发现,详件Demo (LGFFreePT) 功能 实现了市面上大部分的效果,如果有新的需求请留言我 用法 由于用法比较多,代码写的比较自由,有必要开到 h 文件的我全开到 h 文件了,有些效果也需要自己组合摸索,部分我未实现的效果我做了注释和报异常处理,如果组合中碰到崩溃有可能是我设置的异常,请查看异常Log.(具体还是下载我的示例代码,我的示例代码里列了一些我自己组合的效果,都是一些市面上主流的效...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,CentOS8安装Elasticsearch6.8.6
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果