一、宏观

从概念上讲,HTTP Live Streaming由三部分组成:服务器组件,分发组件和客户端软件。如图:

在典型配置中,硬件编码器接收音频 - 视频输入,将其编码为HEVC视频和AC-3音频,并输出分段的MPEG-4文件或MPEG-2传输流。然后,软件流分段器将流分成大量短媒体文件,这些文件放在Web服务器上。分段器还创建并维护包含媒体文件列表的索引文件。索引文件的URL在Web服务器上发布。客户端软件读取索引,然后按顺序请求列出的媒体文件并显示它们,而段之间没有任何暂停或间隙。

二、组件介绍

1.服务端组件

服务器组件负责获取媒体的输入流并以数字方式对其进行编码。 它将它们封装成适合传送的格式,并准备封装的介质以便分发。

对于直播事件,服务器需要媒体编码器,它可以是现成的硬件,或者由apple或者三方提供的软件,来将编码媒体分段并保存为文件。

2.分发组件

分发组件可以是Web服务器或Web缓存系统,它通过HTTP将媒体文件和索引文件传递给客户端。传送内容不需要自定义服务器模块,并且Web服务器上通常只需要很少的配置。要实际部署HTTP Live Streaming,您需要在浏览器创建HTML页或者创建客户端app作为client端。 您还需要使用Web服务器和将实时流编码为包含HEVC或H.264视频以及AAC或AC-3音频的分段MPEG-4媒体文件的方法。您还需要使用Web服务器以及一种方法,将实时流编码为碎片化MPEG-4媒体文件,包含HEVC or H.264 视频, 以及AAC或 AC-3 音频。

3.客户端组件

客户端软件负责确定要请求的适当媒体,下载这些资源,然后重新组装它们,以便可以连续的流形式向用户呈现媒体。 客户端软件包含在iOS 3.0及更高版本中以及安装了Safari 4.0或更高版本的计算机上。(vincent addition:windows上也可以直接使用)

客户端软件首先使用标识流的URL获取索引文件。 反过来,索引文件指定可用媒体文件,解密密钥和可用的任何备用流的位置。 对于选定的流,客户端按顺序下载每个可用的媒体文件。 每个文件都包含一个连续的流段。 一旦下载了足够数量的数据,客户端就开始向用户呈现重组流。

客户端负责获取任何解密密钥,验证或呈现用户界面以允许验证,并根据需要解密媒体文件。

此过程将继续,直到客户端在索引文件中遇到EXT-X-ENDLIST标记。 如果不存在EXT-X-ENDLIST标记,则索引文件是正在进行的广播的一部分。 在正在进行的广播期间,客户端定期加载新版本的索引文件。 客户端在更新的索引中查找新的媒体文件和加密密钥,并将这些URL添加到其队列中。

三、部署基本的http live stream

1)3点前置需求

1.浏览器的HTML页面或充当接收器的客户端应用程序;
2.用作主机的Web服务器或CDN;
3.一种将源素材或直播流编码为包含HEVC或H.264视频和AAC或AC-3音频的分段MPEG-4媒体文件的方法。 (虽然您可以将MP3音频文件或MPEG-2传输流用于H.264视频,但不建议使用这些格式。)

2)创建html页面

分发HTTP直播流媒体的最简单方法是使用M3U8播放列表文件作为视频源,创建包含HTML5 <video>标签的网页。 对于不支持HTML5视频元素的浏览器或不支持HTTP Live Streaming的浏览器,您可以在<video>和</ video>标记之间添加回退代码。 例如,您可以使用QuickTime插件回退到渐进式下载电影或RTSP流。以下示例显示了基本网页的HTML代码:

<html><head><title>HTTP Live Streaming Example</title></head><body><video src="http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8" height="300" width="400"></video></body>
</html>

3)配置web服务器

HTTP Live Streaming可以由普通的Web服务器提供。 正常配置Web服务器,并将提供的文件的MIME类型与其文件扩展名相关联。 下表显示了HTTP Live Streaming的MIME类型:

File Extension MIME Type
.m3u8 vnd.apple.mpegURL
.ts video/MP2T
.mp4 video/mp4

如果Web服务器受MIME类型的限制,可使用MIME类型为audio / mpegURL提供以.m3u结尾的文件来实现兼容。

索引文件通常很长并且经常被重载,但由于它们是文本文件,因此可以非常有效地压缩它们。 通过启用M3U8索引文件的实时gzip压缩来减少服务器开销。 HTTP Live Streaming客户端自动解压被压缩的索引文件。

若需要缩短M3U8文件的生存时间(TTL)值,以实现下游Web缓存的正确缓存行为。 在实况广播期间经常覆盖M3U8文件,并且应为每个请求下载最新版本。  对于VOD,索引文件是静态的,只下载一次。

4)验证http live stream

媒体流验证器是用于验证Hls流和服务器的命令行实用程序。 媒体流验证器模拟HTTP实时流传输会话,并验证索引文件和媒体段是否符合HTTP实时流传输规范。 它执行多项检查以确保可靠的流式传输。 如果发现任何错误或问题,将显示详细的诊断报告。 始终在提供新流或备用流集之前运行验证程序。

参考后续博客内容,工具介绍:

Media Stream Segmenter
media file segmenter
Media Subtitle Segmenter
variant playlist creator
Media Stream Validator
HLS Report
id3 tag generator

5)http安全密钥

通过加密可以保护媒体文件。文件分段器和流分段器工具都具有加密选项,它们可以配置为定期更改加密密钥。与谁分享钥匙取决于你。

密钥文件需要初始化vector来解码加密的媒体。初始化vector可以定期更改,就像密钥一样。当前建议加密媒体同时最小化开销是每3到4小时更改一次密钥,并在每50 Mb数据后更改初始化vector。

即使密钥访问受限,窃听者也可以获取密钥文件的副本(如果它们是通过HTTP发送的)。此问题的一个解决方案是通过HTTPS安全地发送密钥。在尝试通过HTTPS提供密钥文件之前,请测试通过HTTP从内部Web服务器提供密钥。这允许您在将HTTPS添加到混合之前调试您的设置。拥有已知的工作系统后,即可切换到HTTPS。

这些是使用HTTPS为HTTP Live Streaming提供密钥的要求:

1.验证HTTPS服务器上是否具有由受信任的颁发机构签名的SSL证书。如果没有,您仍然可以通过为服务器创建自签名SSL证书颁发机构和叶证书来测试您的设置。将证书颁发机构的证书附加到电子邮件,将其发送到要用作Live Streaming客户端的设备,然后点击Mail中的附件以使设备信任该服务器。

2.确保密钥文件的身份验证域与第一个播放列表文件的身份验证域相同。实现此目的的最简单方法是从HTTPS服务器提供主播放列表文件 - 主播放列表文件下载一次,因此这不会造成过多的负担。可以使用HTTP提供其他播放列表文件。

3.启动您自己的对话框以供用户进行身份验证,或将凭据存储在客户端设备上。 HTTP Live Streaming不提供用于身份验证的用户对话框。如果您正在编写自己的客户端应用程序,则可以存储基于cookie或HTTP的凭据,并在连接(_:didReceive :)回调中提供它们。您提供的凭据将被媒体播放器缓存并重用。

hls密钥的demo及学习可参考这里:https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/HLS_Sample_Encryption/Intro/Intro.html#//apple_ref/doc/uid/TP40012862

四、词汇积累

off-the-shelf

encapsulates / encapsulated

assemble

decryption keys

consecutive

encryption

【HTTP Live Streaming】(二)HLS 架构 部署 - 梳理相关推荐

  1. MySQL-MMM架构部署(有图)

    MySQL-MMM架构部署 MySQL-MMM架构使用 MySQL性能调优 1 MySQL-MMM架构部署 1.1 问题 本案例要求熟悉实现MySQL-MMM的架构部署,主要包括以下任务: 安装依赖包 ...

  2. centos7 nginx php5.4,详解CentOS7.0下Nginx+PHP5.4+MySQL5.5+Memcached+Redis的架构部署

    详解Nginx+PHP5.4+MySQL5.5+Memcached+Redis的架构部署需要安装Nginx.PHP.mysql.memcached.redis! 一.硬件: 1.服务器型号:HP DL ...

  3. Docker架构部署及镜像制作,免费容器云体验

    前面的文章,我已经介绍了很多关于云原生.容器技术的相关知识和市场趋势等内容.说到云原生,就有那么些关键词:Kubernetes.Docker.Istio.IDE等等. 今天这篇文章,就想来聊聊Dock ...

  4. CentOS 6.7 源码搭建LNMP架构部署动态网站环境

    源码搭建LNMP架构部署动态网站环境 Nginx 简介 Nginx是一款相当优秀的用于部署动态网站的服务程序,Nginx具有不错的稳定性.丰富的功能以及占用较少的系统资源等独特特性. Nginx (& ...

  5. Keepalived+Haproxy+Mysql(双主)高可用架构部署

    Keepalived+Haproxy+Mysql(双主)高可用架构部署 一.背景 公司原部署的Mysql架构为keepalived+Mysql双主,但是这个架构有个缺陷是所有的读写请求都在一台机器上( ...

  6. Amazon EKS基于GitLab的CICD实践二 基础架构和应用架构创建篇

    关于GitLab的CI/CD的实践具体分成如下的内容,其中(一)和(二)已经在上面一篇关于GitLab的CICD的实践一 GitLab的部署和配置篇中介绍完成了. 全系列目录: (一)部署的架构 (二 ...

  7. 网站服务器架构部署方案发展

    转载博客园--致敬原作者(林点林一)原文链接:http://www.cnblogs.com/linyidian/p/9703412.html 任何一个大型网站均是根据用户的积累以及随之而来的用户数量增 ...

  8. NFS HA架构部署(NFS + Pacemaker + Corosync + DRBD)

    NFS HA架构部署(NFS + Pacemaker + Corosync + DRBD) 环境:kvm虚拟机2台 OS:CentOS7.6 Kernel: Linux 3.10.0-957.21.3 ...

  9. 软件开发随笔系列二——关于架构和模型

    软件开发随笔系列二--关于架构和模型 文章目录 软件开发随笔系列二--关于架构和模型 软件模型 功能模型 概念层 边界 参与方 分组分类 逻辑层 功能组织图 层次.模块化 接口 流程模型 概念层 业务 ...

最新文章

  1. numpy.eye()用法
  2. 日志统计中的PV UV IP
  3. Fabric核心模块之Peer解析
  4. ASP.NET 4 和 Visual Studio 2010 Web 开发概述
  5. 岗位多多,招聘 23人 | 中国农业科学院深圳农业基因组研究所诚聘博士后和科研人员...
  6. 一加9系列全网预约量破200万:3月24日见!
  7. Android对话框自定义标题
  8. Innosetup打包自动下载.net framework 动态库及替换卸载程序图标.
  9. html attr src,jQuery中css()和attr()方法的区别
  10. cacti安装配置与添加客户端
  11. 智能公租房管理系统概要流程
  12. new function()理解
  13. c#程序员和java薪酬_语言趋势和薪水:Java的未来之路
  14. 2016 0CTF rsa
  15. tomcat日志切割和定期删除
  16. Hinton论文系列-Reducing the dimensionality of data with neural networks
  17. 常见的 vue elementUI el的标签总结
  18. 备份Ubuntu 并制作成iso安装文件
  19. python3的各种经典案例,总共299个案例,直接可以运行(中:100个案例)
  20. ffmpeg libx264 h264_nvenc 编码参数解析

热门文章

  1. 一道二阶常系数非齐次微分方程的八种解法
  2. 经纬度中的度分秒转化为小数形式
  3. 智能合约(一)————智能合约入门
  4. PPT教程:码垛机器人及其操作应用
  5. 计算机网络安全教育培训教程,网络安全培训教材(PPT 67页)
  6. 虎宝宝起名、虎年取名禁忌
  7. MIUI10刷入Magisk模块——记小白的第一次刷机
  8. 基于python的垃圾邮件分类_python实现贝叶斯推断——垃圾邮件分类
  9. 解决 Docker容器因 iptables无法启动的问题
  10. 【Android进阶】天天动听 悬浮歌词(迷你歌词)效果解读