当前位置: 首页 > news >正文

HTTP Live Streaming直播(iOS直播)技术分析与实现

HLS技术要点分析

  HTTP Live StreamingHLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。HLS点播,基本上就是常见的分段HTTP点播,不同在于,它的分段非常小。要实现HLS点播,重点在于对媒体文件分段,目前有不少开源工具可以使用,这里我就不再讨论,只谈HLS直播技术。

  相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。

  根据以上的了解要实现HTTP Live Streaming直播,需要研究并实现以下技术关键点

  1. 采集视频源和音频源的数据
  2. 对原始数据进行H264编码和AAC编码
  3. 视频和音频数据封装为MPEG-TS包
  4. HLS分段生成策略及m3u8索引文件
  5. HTTP传输协议

HLS分段生成策略和m3u8   

1. 分段策略

  • HLS的分段策略,基本上推荐是10秒一个分片,当然,具体时间还要根据分好后的分片的实际时长做标注
  • 通常来说,为了缓存等方面的原因,在索引文件中会保留最新的三个分片地址,以类似“滑动窗口”的形式,进行更新。

2. m3u8文件简介

  m3u8,是HTTP Live Streaming直播的索引文件。m3u8基本上可以认为就是.m3u格式文件,区别在于,m3u8文件使用UTF-8字符编码。

#EXTM3U                     m3u文件头,必须放在第一行
#EXT-X-MEDIA-SEQUENCE       第一个TS分片的序列号
#EXT-X-TARGETDURATION       每个分片TS的最大的时长
#EXT-X-ALLOW-CACHE          是否允许cache
#EXT-X-ENDLIST              m3u8文件结束符
#EXTINF                     extra info,分片TS的信息,如时长,带宽等

  一个简单的m3u8索引文件

    


相关文章:

  • C修改文件内容
  • The One Foundation
  • valgrind详细说明
  • 微软(北京).NET俱乐部第十二次技术沙龙
  • Makefile与Shell脚本
  • 用SkinSB美化滚动条控件
  • Windows下Linux开发环境设置(一)--TFTP服务器设置和NFS服务器设置
  • Linux下ffmpeg添加 x265
  • 磁引导机器人系统申请了专利,聊以慰籍
  • 关于TCP的可靠性
  • 如何成长为技术合伙人?
  • 发现一个超酷的FireFox2.0插件,纪念一下
  • UPYUN 用到的技术
  • 祝贺三八节日 “IT女杰风云榜”专题
  • 如何快速成长
  • @jsonView过滤属性
  • [NodeJS] 关于Buffer
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【RocksDB】TransactionDB源码分析
  • Angular4 模板式表单用法以及验证
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • JavaScript的使用你知道几种?(上)
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 经典排序算法及其 Java 实现
  • 蓝海存储开关机注意事项总结
  • 前端设计模式
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 译有关态射的一切
  • 原生js练习题---第五课
  • const的用法,特别是用在函数前面与后面的区别
  • ​queue --- 一个同步的队列类​
  • ​油烟净化器电源安全,保障健康餐饮生活
  • ###C语言程序设计-----C语言学习(6)#
  • #Linux(make工具和makefile文件以及makefile语法)
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $(function(){})与(function($){....})(jQuery)的区别
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • ***详解账号泄露:全球约1亿用户已泄露
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .net core 依赖注入的基本用发
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net IOC框架入门之一 Unity
  • .net 流——流的类型体系简单介绍
  • .netcore 获取appsettings
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • @property括号内属性讲解
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法