Apple Http Live Stream
一、 HLS的架构
- AV input:采集数据的麦克风和摄像头
- Server:把采集到的多媒体数据进行编码、分隔,并生成播放列表
- Distribution:CDN根据不同的节点和网络情况,分发不同的内容
- Client:消费端,获取并解码观看视频
二、服务器的编码
2.1 视频
封装
- 封装格式可以是 fMP4或者MPEG-2 TS,如果使用H265的编码格式,则封装格式必须是fMP4。
编码
- 必须使用H264或者H265编码
- H264的编码配置必须低于High Profile@Level 5.2
- H265的编码配置必须低于Main 10 Profile@Level 5.1 High Tier
- HDR HEVC视频格式必须是HDR10、HLG或者Dolby Vision
- IDR帧应该两秒钟出现一次
IDR帧和I帧的区别是:IDR帧之后的P帧,不会参考IDR帧之前的帧;而I帧之后的P帧,可能会参考这个I帧之前的I帧
- NTSC的视频应该是60或者59.94fps;PAL视频应该为50fps
- 视频支持:23.976、24、25、29.97、30、50、59.94、60fps
- 流应该使用同一个色彩空间,Rec601、Rec709或者Rec2020
码率
- 对于WiFi环境,默认的视频码率应该为 2000kbps
- 对于移动网络环境,默认的视频码率应该为 730 kbps
2.2 音频
音频编码格式
双声道
- AAC-LC
- HE-AAC v1
- HE-AAC v2
- xHE-AAC
- Apple Lossless
- FLAC
- 只有双声道的多声道格式
如果码率在64kbit/s以上,就不应该用HE-AAC。
多声道
- AAC-LC
- HE-AAC v1
- Apple Lossless
- FLAC
- Dolby Digital(AC-3)
- Dolby Digital Plus(E-AC-3)
- Dolby Digital Plus with Dolby Atmos
推荐的码率
声道数 | 格式 | 码率 |
---|---|---|
2.0 | AAC | 32-160 |
2.0 | xHE-AAC | 24-160 |
2.0 | Dolby Digital Plus | 96-160 |
5.1 | AAC | 320 |
5.1 | Dolby Digital | 384 |
5.1 | Dolby Digital Plus | 192 |
7.1 | Dolby Digital Plus | 384 |
Nominally 16 | Dolby Digital Plus with Dolby Atoms | 384-768 |
2.3 媒体分割
- 视频片段必须以IDR帧开头
- 视频片段持续时间应该为6s;如果是29.97fps的NTSC视频,可以为6.006s
- 媒体片段持续时间不能超过目标时间0.5s
- 每个xHE-AAC片段都应该以即时播放帧(IPF)开始
三、播放列表
3.1 MIME类型
媒体类型 | 格式 | MIME类型 | 扩展名 |
---|---|---|---|
播放列表 | HLS播放列表 | application/vnd.apple.mpegurl | m3u8 |
播放列表 | M3U播放列表 | audio/mpegurl | m3u |
视频 | MPEG TS | video/mp2t | ts |
媒体初始化 | fMP4 | video/mp4 | mp4 |
视频或音频 | fMP4 | video/iso.segmeng或video/mp4 | m4s |
视频 | fMP4 | video/mp4 | mp4 |
音频 | MPEG TS | video/mp2t | ts |
音频 | fMP4 | audio/mp4 | mp4 |
音频 | 封装的音频 | audio/aac | aac |
音频 | 封装的音频 | audio/mpeg | mp3 |
音频 | 封装的音频 | audio/ac3 | ac3 |
音频 | 封装的音频 | audio/eac3 | ec3 |
字幕 | WebVTT | text/plain | vtt |
字幕 | IMSC1 | applicaition/mp4 | mp4 |
3.2 播放列表示例
基本的主播放列表,可以指定:
- 语言
- 媒体类型
- 带宽
- 编解码器
- 分辨率
- ……
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS#EXT-X-MEDIA:NAME=“English”,TYPE=AUDIO,GROUP-ID="audio-stereo-64",LANGUAGE="en",DEFAULT=YES,AUTOSELECT=YES,URI="english.m3u8"
#EXT-X-MEDIA:NAME="Français",TYPE=AUDIO,GROUP-ID="audio-stereo-64",LANGUAGE="fr",DEFAULT=NO,AUTOSELECT=YES,URI="french.m3u8"#EXT-X-STREAM-INF:BANDWIDTH=1123000,CODECS="avc1.64001f,mp4a.40.2",AUDIO="audio-stereo-64",RESOLUTION=620x334
video.m3u8#EXT-X-STREAM-INF:BANDWIDTH=8123000,CODECS="avc1.640028,mp4a.40.2",AUDIO="audio-stereo-64",RESOLUTION=1916x1032
video-hq.m3u8
有多个Codec的播放列表,可以指定不同编码器下的参数。
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS#EXT-X-MEDIA:NAME="English",TYPE=AUDIO,GROUP-ID="audio-stereo-64",LANGUAGE="en",DEFAULT=YES,AUTOSELECT=YES,URI="english.m3u8"
#EXT-X-MEDIA:NAME="Français",TYPE=AUDIO,GROUP-ID="audio-stereo-64",LANGUAGE="fr",DEFAULT=NO,AUTOSELECT=YES,URI="french.m3u8"#EXT-X-MEDIA:NAME="English",TYPE=AUDIO,GROUP-ID="audio-stereo-128",LANGUAGE="en",DEFAULT=YES,AUTOSELECT=YES,URI="english-hi.m3u8"
#EXT-X-MEDIA:NAME="Français",TYPE=AUDIO,GROUP-ID="audio-stereo-128",LANGUAGE="fr",DEFAULT=NO,AUTOSELECT=YES,URI="french-hi.m3u8"#EXT-X-STREAM-INF:BANDWIDTH=1123000,CODECS="avc1.64001f,mp4a.40.2", AUDIO="audio-stereo-64",RESOLUTION=620x334
video.m3u8#EXT-X-STREAM-INF:BANDWIDTH=8187000,CODECS="avc1.640028,mp4a.40.2", AUDIO="audio-stereo-128",RESOLUTION=1916x1032
video-hq.m3u8#EXT-X-STREAM-INF:BANDWIDTH=623000, CODECS="hvc1.1.6.L120.B0,mp4a.40.2",AUDIO="audio-stereo-64", RESOLUTION=620x334
hevc-video.m3u8#EXT-X-STREAM-INF:BANDWIDTH=4187000, CODECS="hvc1.1.6.L120.B0,mp4a.40.2",AUDIO="audio-stereo-128", RESOLUTION=1916x1032
hevc-video-hq.m3u8
四、兼容性和示例
4.1 兼容性
格式 | macos兼容性 | iOS兼容性 | tvOS兼容性 |
---|---|---|---|
TS流 | 10.7及以上 | 6及以上 | 9及以上 |
fMP4流 | 10.12及以上 | 10及以上 | 10及以上 |
HEVC | 10.13及以上 | 11及以上 | 11及以上 |
4.2 示例的VOD
- H264/H265 @ 30/60fps
- H265视频码率
分辨率 | 码率 |
---|---|
1080P | 5.8 Mbps |
1080P | 4.5 Mbps |
1080P | 3.2 Mbps |
720P | 2.4 Mbps |
540P | 1.7 Mbps |
…… | …… |
- H264视频码率
分辨率 | 码率 |
---|---|
1080P | 7.8 Mbps |
1080P | 6.0 Mbps |
1080P | 4.5 Mbps |
720P | 3.0 Mbps |
540P | 2.0 Mbps |
…… | …… |
- 音频
格式 | 声道 | 码率 |
---|---|---|
AAC-LC | 48kHz 双声道 | 160kbps |
AC-3 | 48kHz 5.1声道 | 384kbps |
EC-3 | 48kHz 5.1声道 | 192kbps |
- 字幕
Apple Http Live Stream相关推荐
- 利用Intel Media SDK产生适合Apple Http live stream的流
1,使用Intel Media SDK Encoder或者Transcode代码产生H.264数据 2,使用Intel IPP muxer产生mpeg-ts封包的数据包 3,使用简单程序生成.m3u8 ...
- Effective Java~46. 优先选择Stream 中无副作用的函数
纯函数(pure function)的结果仅取决于其输入:它不依赖于任何可变状态,也不更新任何状态. 坏味道 // Uses the streams API but not the paradigm- ...
- java8 stream 做累加_《Java 8 in Action》Chapter 1:为什么要关心Java 8
自1998年 JDK 1.0(Java 1.0) 发布以来,Java 已经受到了学生.项目经理和程序员等一大批活跃用户的欢迎.这一语言极富活力,不断被用在大大小小的项目里.从 Java 1.1(199 ...
- java8 Lambda Stream collect Collectors 常用实例
将一个对象的集合转化成另一个对象的集合 List<OrderDetail> orderDetailList = orderDetailService.listOrderDetails(); ...
- java8中的流(Stream)
流式编程爱 撸码就是快,流式编程好 代码传家宝 Stream API 概念: Stream 流处理,首先要澄清的是 java8 中的 Stream 与 I/O 流 InputStream 和 Outp ...
- Apple FairPlay DRM及其工作原理
翻译.编辑:Alex 技术审校:刘姗 本文来自OTTVerse,作者为Krishna Rao Vijayanagar. ▲扫描图中二维码了解音视频技术大会更多信息__▲ Easy-Tech #020# ...
- Java8 用法优雅的函数式编程与stream,看这一篇就够了!
Java 不支持单独定义函数,但可以把静态方法视为独立的函数,把实例方法视为自带 this 参数的函数. Java 平台从 Java 8 开始,支持函数式编程.函数式编程(Functional Pro ...
- java8 .stream().map().collect() 的用法
API: https://www.runoob.com/java/java8-streams.html mylist.stream().map(myfunction->{return item; ...
- JAVA8新特性之Stream流分组
Apple apple01 = new Apple(1, "red", 100, "成都");Apple apple02 = new Apple(2, &quo ...
最新文章
- 车道线检测:几何约束联合车道分割和车道边界检测
- 【The final】软件工程实践总结
- 开发日记-20190622 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
- 周报措辞规范(周报规范用语、不规范用语)
- vue xxx was assigned to but it has no setter.
- spring循环依赖及解决方式_来探究一下Spring 循环依赖的三种方式
- MarkdownPad2安装Awesomium SDK-Windows官方链接
- 怎么安装mapinfo破解和符号库
- 通过ROBOCOPY工具快速删除文件夹
- 骇客学堂:网络入侵检测初步探测方法
- 从bam中截取指定位置的 reads 或深度
- CrystalQuartz实现Quartz的window服务的远程管理
- SIM7600CE模块UART设计指南
- read write file
- 关于@Value读不到配置文件内容的问题
- [转]计算机视觉入门
- MATLAB第2次作业,matlab作业二
- [hive]hive加载本地数据,然后删除了本地数据也删除了表,这时可以在hdfs垃圾箱找到
- js-对象属性是否全部为空
- 计算机英语四级考试报名,大学英语四级报名