图解系列 图解直播推拉流流程

news2024/12/25 12:54:44

文章目录

    • 流程
      • 推流流程
        • 扩展
      • 拉流流程
    • 文件加密
      • 流程

常用开源流媒体服务器为SRS和MTX

流程

涉及到的组件

  • 主播(推流端)
  • 观众(播放器)
  • 业务服务【持有一些私有Key,如rtmpKey等】
  • 流媒体服务器【SRS/MTX】
  • CDN【持有公钥】

推流流程

1.主播登录系统

2.主播点击发起直播,业务系统返回一个可用的推流地址,其携带认证token(token直接使用JWT也行)。

  • token = now time + random + ttl + signature md5(now time + random + ttl + rtmpKey) 【自己验自己只用一个key即可】

  • 示例:

    • signature = md5(now time + random + ttl + rtmpKey) = 88195f8943e5c944066725df2b1706f8
    • rtmp://192.168.1.10/live?time=1402307089&expire=3600&signature =88195f8943e5c944066725df2b1706f8

    加签是为了放篡改,把防止篡改的信息都参与加签

3.主播用上一步返回的可用推流地址进行推流。

4.根据地址会连接到SRS/MTX。

后面都以SRS举例,在SRS上提前配置http回调,回调到我们的业务系统

  • on_connect http://127.0.0.1:8085/api/v1/on_connect;

当客户端连接到指定的vhost和app时会触发这个callback。

5.我们在业务系统拿到token去校验, 按同样的算法验证,如果md5变了就返回错误,srs就会拒绝连接。如果返回0就会接受连接。

6.流媒体服务器就可以根据我们的配置在内存中生成flv或者在文件系统生成ts文件

扩展

1.ts文件移动,移动到OSS或其他位置

on_hls:当SRS获取HLS的ts文件时触发 POST请求

当切片生成时,回调这个url,使用POST回调。用来和自己的系统集成,譬如实现切片移动等。

{
"action": "on_hls",
"client_id": 1985,
"ip": "192.168.1.10", 
"vhost": "video.test.com", 
"app": "live",
"stream": "livestream", 
"param":"?token=xxx&salt=yyy",
"duration": 9.36, // in seconds
"cwd": "/usr/local/srs",
"file": "./objs/nginx/html/live/livestream/2015-04-23/01/476584165.ts",
"url": "live/livestream/2015-04-23/01/476584165.ts",
"m3u8": "./objs/nginx/html/live/livestream/live.m3u8",
"m3u8_url": "live/livestream/live.m3u8",
"seq_no": 100, "server_id": "vid-werty"
}

2.触发CDN上ts文件的缓存预热

on_hls_notify:当SRS获取HLS的ts文件时触发,用于将文件推送到CDN网络,通过从CDN网络获取ts文件。该请求是一个GET请求,请求地址为格式:

当切片生成时,回调这个url,使用GET回调。用来和系统集成,可以使用[ts_url]变量,实现预分发(即下载一次ts片,预热)。

  • https://127.0.0.1:8085/api/v1/hls/[app]/[stream]/[ts_url]?[param]

[server_id]服务器ID
[app]应用名称
[stream]流名称
[ts_url]url
[param]参数

拉流流程

1.观众根据需要可登录也可不登录到系统。

2.业务系统返回一个可用的播放地址,这个播放地址是CDN的临时的(10分钟过期)

  • 播放地址可以是Http-flv地址,也可以是hls的m3u8地址。
  • 每次请求都会返回一个不一样的CDN临时URL。
    • 如果是涉密的流,管理好这个临时URL即可,例如只有登录的人才返回这个URL。
  • 例如:http://cdn.com/stream.m3u8?timestamp=1456213&ttl=600&random&signature=md5hash(timestamp,ttl,random+CDNKey)
    • 跟推流时候的临时签名一样。
    • 防篡改 + 临时有效性10分钟。
  • 注意这个地址也是业务系统加签但是验签是CDN回源的时候业务系统自己也会验
    • 这里因为是2个系统加签,验签流程,所以可以采用私钥加签,公钥验签逻辑,业务系统用私钥加签CDN用共钥验签。(可以用多套密钥对,参数传递密钥对ID)
    • 也可以用对称算法加签验签。
    • 无论什么算法,都要去CDN上传你的key。

3.当用户拿着加了CDN的临时url访问时,CDN会鉴权,会验证是否过期是否篡改

  • CDN节点对鉴权URL中的鉴权信息(包括鉴权字符串、时间戳等)进行验证,判断请求的合法性。

  • 鉴权失败,拒绝访问请求。

  • 鉴权通过,正常响应合法请求。

4.如果CDN有cache则直接返回,否则CDN请求源站,即回源操作。

5.回源服务器鉴权保护,我们可以将源站设置为仅允许 CDN访问,而拒绝客户端的直接回源。

  • 同样鉴权URL中的鉴权信息(包括鉴权字符串、时间戳等)进行验证,判断请求的合法性,是否过期是否篡改

  • 在 CDN Origin 设置时,添加自定义 Header 字段及值,源站对请求中的字段检查,若不含有该 Header 字段及值,则返回错误码。

  • 验证请求IP白名单,只运行CDN的IP放行请求。

    • AWS的CloudFront的IP段:https://ip-ranges.amazonaws.com/ip-ranges.json
  • 源站为OSS存储桶

    在OSS存储桶策略中设置,仅允许CDN从存储桶中获取内容。

文件加密

背景信息

HLS(HTTP Live Streaming的缩写)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。HLS协议基于HTTP协议,客户端按照顺序使用HTTP协议下载存储在服务器上的文件。HLS协议规定,视频的封装格式是TS(Transport Stream),除了TS视频文件本身,还定义了用来控制播放的M3U8文件(文本文件)。HLS协议的工作原理是把整个视频流分割成一个个小的TS格式视频文件来传输,在开始一个流媒体会话时,客户端会先下载一个包含TS文件URL地址的M3U8文件(相当于一个播放列表),给客户端用于下载TS文件。

HLS基本字段

  • #EXTM3U:M3U8文件头,必须放在第一行。
  • EXT-X-MEDIA-SEQUENCE :第一个TS分片的序列号,一般情况下是0,但是在直播场景下,这个序列号标识直播段的起始位置; #EXT-X-MEDIA-SEQUENCE:0
  • #EXT-X-TARGETDURATION:每个分片TS的最大的时长; #EXT-X-TARGETDURATION:10 ,表示每个分片的最大时长是10秒。
  • #EXT-X-ALLOW-CACHE:是否允许cache,#EXT-X-ALLOW-CACHE:YES#EXT-X-ALLOW-CACHE:NO,默认情况下是YES。
  • #EXT-X-ENDLIST:M3U8文件结束符。
  • #EXTINF:extra info,分片TS的信息,如时长,带宽等;一般情况下是 #EXTINF:<duration>,[<title>] 后面可以跟其他的信息,逗号之前是当前分片的TS时长。分片时长要小于 #EXT-X-TARGETDURATION 定义的值。
  • #EXT-X-VERSION:M3U8版本号。
  • #EXT-X-DISCONTINUITY:该标签表明其前一个切片与下一个切片之间存在中断。
  • #EXT-X-PLAYLIST-TYPE :表明流媒体类型。
  • #EXT-X-KEY:是否加密解析。例如:#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/video.key?token=xxx" 加密算法是AES-128,密钥通过请求 https://example.com/video.key?token=xxx 来获取,密钥请求回来以后存储在本地,并用于解密后续下载的TS视频文件。

示例

#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-MEDIA-SEQUENCE:13
// 在这里  全部
#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/keyfile.key",IV=0x1234567890ABCDEF1234567890ABCDEF
#EXT-X-TARGETDURATION:15
#EXTINF:10.147, no desc
livestream-13.ts
#EXTINF:10.007, no desc
livestream-14.ts
// 或者在这里 局部
#EXT-X-KEY:METHOD=AES-128,URI="livestream-15.key",IV=0x175D2375FEBAE7ED8E92A7E6A64F5113
#EXTINF:10.216, no desc
livestream-15.ts
#EXTINF:10.170, no desc
livestream-16.ts
#EXTINF:11.378, no desc
livestream-17.ts
#EXTINF:9.668, no desc
livestream-18.ts

流程

切片加密

1.流媒体服务器在推流端连接上时,从业务服务端获取key和IV

2.流媒体服务器在生成ts文件时,使用Key和IV加密TS文件

切片解密

1.索引m3u8文件含有获取解密匙URI,大致如下:

#EXT-X-KEY:METHOD=AES-128,URI=“https://example.com/keyfile.key”

2.URI部分就是去获取解密匙的http请求,进行边解密边播放。
3.KeyURI可以加token或者Cookie进行权限控制.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/988905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023-大数据应用开发-电商可视化结果汇总

电商可视化 任务一&#xff1a;用柱状图展示消费额最高的省份 编写Vue工程代码&#xff0c;根据接口&#xff0c;用柱状图展示2020年消费额最高的5个省份&#xff0c;同时将用于图表展示的数据结构在浏览器的console中进行打印输出&#xff0c;将图表可视化结果和浏览器conso…

JavaWeb_LeadNews_Day11-KafkaStream实现实时计算文章分数

JavaWeb_LeadNews_Day11-KafkaStream实现实时计算文章分数 KafkaStream概述案例-统计单词个数SpringBoot集成 实时计算文章分值来源Gitee KafkaStream 概述 Kafka Stream: 提供了对存储与Kafka内的数据进行流式处理和分析的功能特点: Kafka Stream提供了一个非常简单而轻量的…

使用python爬取网站html代码

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言一、Requests是什么&#xff1f;二、使用步骤1.引入库2.创建一个Faker对象&#xff1a;3.设置要访问的目标网站的URL&#xff1a;4.定义HTTP请求头部&#xff1a;6.…

【python手写算法】正则化在线性回归和逻辑回归中的应用

多元线性回归&#xff1a; # codingutf-8 import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3Dif __name__ __main__:X1 [12.46, 0.25, 5.22, 11.3, 6.81, 4.59, 0.66, 14.53, 15.49, 14.43,2.19, 1.35, 10.02, 12.93, 5.93, 2.92,…

day 51 |● 503.下一个更大元素II ● 42. 接雨水

503.下一个更大元素II 显示的是循环链表&#xff0c;所以需要遍历两遍。 用i%len(nums)保证循环两遍即可。 func nextGreaterElements(nums []int) []int {res : make([]int, len(nums))for i : 0; i < len(nums); i{res[i] -1}stack : make([]int, 0)stack append(stac…

VoxWeekly|The Sandbox 生态周报|20230904

欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布&#xff0c;对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容&#xff0c;欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter&#xff0c;并加入 Discord 社区&#xf…

便利连锁店这波操作,赚麻了!

在当今数字化时代&#xff0c;零售业经历了前所未有的革命性变革。消费者期望在购物时获得更多的便捷性、个性化体验和高度智能化的服务。为了满足这些需求&#xff0c;零售商们不得不重新思考他们的经营模式&#xff0c;并将目光投向了新零售模式的未来。 新零售模式不再局限于…

来看看什么是:编译型语言和解释型语言的区别

通过高级语言编写的源码&#xff0c;我们能够轻松理解&#xff0c;但对于计算机来说&#xff0c;它只认识二进制指令&#xff0c;源码就是天书&#xff0c;根本无法识别。源码要想执行&#xff0c;必须先转换成二进制指令。 所谓二进制指令&#xff0c;也就是由 0 和 1 组成的…

非插座式水壶/插座式水壶:SOR/2016-181(水壶法规)和CSA 22.1标准解读!

电水壶作为一种常见的小家电&#xff0c;受到了广大消费者的喜爱。然而&#xff0c;由于安全问题的日益重视&#xff0c;亚马逊加拿大站决定加强对电水壶产品的审核&#xff0c;以确保消费者的安全和权益。 近日&#xff0c;亚马逊平台发布公告&#xff0c;要求在加拿大站销售…

C/C++苹果和虫子 2019年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C苹果和虫子 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 C/C苹果和虫子 2019年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 你买了一箱n个苹果&#xff0c;很不幸…

printf scanf

目录 printf scanf printf 把十的二进制代码放进去了&#xff0c;i对的是二进制代码&#xff0c;指定这一串0101代码以什么样的格式输出。 为什么要输出控制符&#xff0c;因为里面放的是二进制&#xff0c;必须控制输出的格式&#xff0c;指定这一串二进制以什么样的格式输出…

当妈妈们开始精致悦已,母婴品牌该怎么做营销?媒介盒子告诉你

近年来&#xff0c;二孩政策全面放开&#xff0c;母婴行业产品溢价高利润可观&#xff0c;优质品牌层出不穷&#xff0c;那么母婴行业该如何宣传产品呢&#xff1f; 试试软文推广吧&#xff01;软文推广是企业宣传最有效且投入成本最低的宣传方式了。 母婴行业做软文推广可以达…

[uni-app] 海报图片分享方案 -canvas绘制

文章目录 canvas使用记录先看下实际效果图绘制流程及思路1. 绘制头像, 通过drawImage来绘制2.绘制文字部分 具体代码 分享海报图片的方式,以前再RN端采用的是截图方案, 我记得组件好像是 react-native-view-shot 现在要处理uni-app的海报图片分享, 一般也有 html2canvas的相关插…

二维码怎么做调查问卷?二维码统计数据的技巧

小伙伴们一定发现&#xff0c;现在用来收集用户数据时&#xff0c;通过扫码填表的方式在很多场景中都被应用&#xff0c;这种方式有效的提升制作者获取用户数据的速度&#xff0c;而且对于填表者而言也更加的便捷。那么用二维码生成器&#xff08;免费在线二维码生成器-二维码在…

Docker网络功能

基本网络功能 Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。使用docker network子命令来管理Docker网络。 外部访问容器可通过端口映射实现&#xff0c;启动容器时使用-p参数指定映射关系。-p可多次使用来绑定多个端口。使用docker port命令查看当前映射的端…

VR全景拍摄发展如何?在各行业应用中有优势吗?

现如今&#xff0c;虚拟现实技术正在以惊人的速度改变着我们的生活&#xff0c;而VR全景拍摄作为一种创新的拍摄方式&#xff0c;可以为大家带来全新的视觉体验。通过VR全景拍摄&#xff0c;可以将平面画面变得更加逼真、更具沉浸感&#xff0c;让人仿佛置身于真实场景之中。 近…

蚂蚁发布金融大模型:两大应用产品支小宝2.0、支小助将在完成备案后

9月8日&#xff0c;在上海举办的外滩大会上&#xff0c;蚂蚁集团正式发布金融大模型。据了解&#xff0c;蚂蚁金融大 模型基于蚂蚁自研基础大模型&#xff0c;针对金融产业深度定制&#xff0c;底层算力集群达到万卡规模。该大 模型聚焦真实的金融场景需求&#xff0c;在“认知…

恭贺弘博创新2023下半年软考(中/高级)认证课程顺利举行

为迎接2023年下半年软考考试&#xff0c;弘博创新于2023年9月2日举行了精品的软考中/高级认证课程&#xff0c;线下线上学员都积极参与学习。 在课程开始之前&#xff0c;弘博创新的老师为学员们提供了详细的学习资料和准备建议&#xff0c;以确保学员们在课程中能够跟上老师的…

如何排查网站及APP数据泄露的源头

近年来数据泄露安全事件频发&#xff0c;在今年的hw网络安全攻防演练中&#xff0c;获取敏感信息、数据泄露等漏洞的得分也越来越高&#xff0c;我们SINE安全近十年来成功的帮助了许多客户&#xff0c;查找到了数据泄露的原因&#xff0c;在这里向大家分享我们的经验与心得&…