最近公司项目没事做,课余实践研究一下技术,算是积累,也可以用到项目里,从零开始记录

HLS:Http Live Streaming

官方文档 https://developer.apple.com/streaming/

以下是官方推荐的最佳实践,先翻译,以后加入自己的一些解读

步骤:

1.使用多码率的副本,好处是让客户端根据网络情况,观看适合的文件,如wifi、3G环境

2.对副本编码,建议至少有l-frame是很容易加载的,应该是提高体验

3.视频分段(media segment files),将大文件打散成碎片传输,包括索引文件和碎片文件

  已有文件:Apple提供一种分段工具,可以生成media segment files,条件为 MPEG-4 或 QuickTime 格式的文件(视频必须为H.264,音频必须为AAC或MP3)

  实时流:Apple提供一种分段工具,要求输入为MPEG-2流,视频H.264 音频AAC或MP3

4.创建播放列表,客户端可以用启发式策略,根据实际带宽变化,动态切换不同码率的副本

5.部署,有一个web服务器,展示你的媒体内容,如html页面,或客户端展示,可以对流进行加密和解密

6.验证媒体有效性,Apple提供了工具

Decide on Your Variants

生成不同码率的副本,需要考虑的因素包括:

1.编码硬件、预算

  编码硬件可能决定你能产出多少种流,在线直播可能需要CDN,带宽等都是烧钱的

2.切换能力

3.设备能力

  分辨率不同

  

  解码器不同

  

  设备不同,可以通过Http头的User-Agent查看,建议在服务器处理

  

4.网络能力不同

  蜂窝网  

  wifi环境

5.码率建议

  蜂窝网  150Kbps

  wifi  400Kbps

  有能力可以多提供其他码率的64 Kbps, 110 Kbps, 200 Kbps, 350 Kbps, 550 Kbps, 900 Kbps and 1500 Kbps. 间隔建议在1.5-2倍

6.视频宽高比必须要求一致

  416 x 234  16:9

  400 x 300  4:3

7.要上AppStore的话,要提供一个不高于64Kbps的流(可以是纯音频,包含视频的流不好弄,有好多建议方式,可以详细阅读官方文档部分),供审核测试用,否则可能会不通过;另外也不能有其他伺服,否则也不允通过

Encode your Variants

推荐设置:

  • Video: H.264 Baseline Profile Level 3.0 (iPhone/iPod Touch), Main Profile Level 3.1 (iPad 1,2), High Profile Level 4.1 (new iPad), MPEG-4 Simple Profile (iPhone/iPod Touch/iPad), Motion JPEG (M-JPEG) (iPod Touch 4th Gen, iPhone 4, iPad)

  • Audio: HE-AAC or AAC-LC up to 48 kHz, stereo audio OR

    MP3 (MPEG-1 Audio Layer 3) 8 kHz to 48 kHz, stereo audio

好大一张表,自己根据实际情况选择吧

码率一定不能超出预计范围,这点很重要(文章里强调很多次了,没实践过,还不知道为啥)

Segment your Media

HLS要求使用流或分片文件

实时直播就是通过不断更新列表文件来实现的

Apple提供2个工具来分段

  • Media Stream Segmenter

  • Media File Segmenter

Media Stream Segmenter Tool

即mediastreamsegmenter,说是在/usr/bin/mediastreamsegmenter目录下,可是我没有呢,后续再补充

mediastreamsegmenter的输入源有两种,UDP协议的MPEG-2流 或stdin(还不理解是什么)

mediastreamsegmenter支持实时流或VOD,支持命令行调用

mediastreamsegmenter能只生成音频流(源可以是音频或视频)

Media File Segmenter Tool

即mediafilesegmenter

mediafilesegmenter用来处理本地文件的,用来生成MPEG-2流或分片文件,iOS5以后还可以把分段文件合并成完成的文件

据说已经优化,附加开销已经很小了10%以内

每个segment至少有一个IDR-frame,不懂,貌似是拖动进度条,寻址时可以展示1帧画面,否则只能待缓冲到某个IDR-frame的时候才显示,(苹果的用户体验真不是盖的)

建议10秒一个分段

Create Variant Playlist

variantplaylistcreator是个命令行工具,能从mediafilesegmenter的HLS流中,生成m3u8和列表文件

Deploy Your Media

HTML5播放

<video src="http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8">
This browser does not support HTML5 video.
</video>

web server配置的时候,别忘了添加MIME-type支持.M3U8 和 .ts .m3u

可以使用gzip压缩

跟踪你的视频播放状况,比如别人看了什么,看了多久,流在哪里被切换,哪里stall,详细查看MPMovieAccessLogEventMPMovieAccessLog and MPMovieErrorLogEvent

Validate Your Media

媒体流验证工具mediastreamvalidator,建议经常进行验证,可以看见详细的验证报告

[翻译]HLS实践的更多相关文章

  1. .Net最佳实践3:使用性能计数器收集性能数据

    本文值得阅读吗? 本文讨论我们如何使用性能计数器从应用程序收集数据.我们将先了解的基本知识,然后我们将看到一个简单的示例,我们将从中收集一些性能数据. 介绍: - 我的应用程序的性能是最好的,像火箭 ...

  2. 将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

    本文是对 <.NET Tutorial - Deploy a microservice to Azure> 的翻译和实践.入门级踩坑实践,k8s 大佬请回避,以免耽误您宝贵的时间. 介绍 ...

  3. 工作随笔——Intellij_idea-14官方快捷键中文版

    听说Intellij Idea好几年了.因为快捷键的原因,所以一直没有放弃eclipse.上周末抽了点时间,用google翻译+自己实践翻译了一下官方的快捷键. 基本做完的时候在百度文库上突然搜索到一 ...

  4. [Logstash]使用详解

    Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的.多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件. 本文针对官方文档进行翻译以及实践,希望有更 ...

  5. [Logstash]使用详解(转)

    Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的.多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件. 本文针对官方文档进行翻译以及实践,希望有更 ...

  6. 转:微博"收藏/赞/转发"技术资料汇总

    书籍 HTTP权威指南 <- @Fenng Introduction to Information Retrieval <- @陈利人 Lua 源码欣赏 <- @简悦云风 The A ...

  7. 通过keras例子理解LSTM 循环神经网络(RNN)

    博文的翻译和实践: Understanding Stateful LSTM Recurrent Neural Networks in Python with Keras 正文 一个强大而流行的循环神经 ...

  8. Java基础教程:tutorialspoint-spring mvc

    教程: 来自turorialspoint的Spring MVC 4.1.6教程(英文),官网:https://www.tutorialspoint.com/springmvc/index.htm 离线 ...

  9. Dynamics 365本地部署版本配置OAuth 2 Password Grant以调用Web API

    微软动态CRM专家罗勇 ,回复330或者20190504可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 根据官方建议,不要再使用Dynamics 365 Custome ...

随机推荐

  1. 【DP】【CF31E】 TV Game

    传送门 Description 给你一个长度为\(2n\)的数字,每次可以从左侧选一个数字,加入连接到一个数字\(A\)或另一个数字\(B\)后面.\(A,B\)初始为\(0\).\(A\)与\(B\ ...

  2. HDU--2363

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2363 分析:最短路+二分. #include<iostream> #include< ...

  3. UVA-10791 数学

    UVA-10791 题意: 输入n (1<=n<2^31) 求至少两个正整数使得他们的lcm等于n并且他们的和最小,输出最小和 代码: // a*b=lcm*gcd => a=lcm ...

  4. find~~~查找文件

    find . -name "klibc" 在当前文件内查找文件 klibc find . -name "*libc*" 在当前文件内查找文件 (模糊查询)

  5. C#微信开发系列笔记(1)入门指引

    (1)基本配置 这节具体的详情请看官方文档,我只提示一点,非常重要,非常容易忽视的,我是吃了苦头的... 在“修改配置”这个地方,如下图: 在URL处,一定要填写http://www.xxx.com/ ...

  6. JS中的匿名函数自执行、函数声明与函数表达式

    先看一段jQuery源码中匿名函数自执行的例子: (function( window, undefined ) { // jquery code })(window); 另外一种常见的写法: +fun ...

  7. Java实现链式存储的二叉树

    二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...

  8. 周末发福利了!26个免费的HTML5模版

    本期文章我们为大家搜集了很多专业且高质量的HTML5模版,而且还是免费的呦.如果你对编码很熟悉,那么从这些网站里你可以学到很多新技能.来这些国际范的案例中挑选您喜欢的模版学习起来吧:) Zeences ...

  9. 最常用的8款 PHP 调试工具,你用过吗?

    Web 开发并不是一项轻松的任务,有超级多服务端脚本语言提供给开发者,但是当前 PHP 因为具有额外的一些强大的功能而越来越流行.PHP 是最强大的服务端脚本语言之一,同时也是 Web 开发者和设计者 ...

  10. Configure Always On Availability Group for SQL Server on Ubuntu——Ubuntu上配置SQL Server Always On Availability Group

    下面简单介绍一下如何在Ubuntu上一步一步创建一个SQL Server AG(Always On Availability Group),以及配置过程中遇到的坑的填充方法. 目前在Linux上可以搭 ...