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

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. 图像BMP格式介绍

    1 图像BMP格式说明 BMP是一种与硬件设备无关的图像文件格式,使用非常广.它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大.BMP文件的图像深度可选 ...

  2. shiro的原理理解

    1.shiro原理图如下: 框架解释: subject:主体,可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证.授权. securityManager:安全管理器,主体进行认证和授权都 ...

  3. Windows10实用技巧-固定快捷方式到磁贴菜单方式

    快捷方式固定到磁贴 Win10的开始菜单中的磁贴功能比较不错,可以在不清理桌面上其他软件的情况下直接唤醒需要的应用.  但是比较麻烦的是一些应用或快捷方式并不能直接固定到上面. 后来发现所有Windo ...

  4. mac下c++代码阅读工具

    http://note.youdao.com/noteshare?id=101a265bb9d780444b6a03ca526b887a

  5. 「Linux」VMware安装centos7(一)

    1.点击:创建虚拟机 2.选择:自定义(高级),下一步 3.点击:下一步 4.选择:稍后安装操作系统,下一步 5.选择:操作系统和对应的版本,下一步 6.设置:虚拟机名称和安装位置,下一步 7.设置: ...

  6. Mac环境下SVN的配置和使用

    简单记录一下在Mac环境下,SVN的配置步骤和使用相关.(Mac自带了svn的服务器和客户端功能,简单配置一下即可使用) 一.SVN的配置方法 1. 创建一个仓库目录,比如在/Users/你的用户名 ...

  7. PHP函数方法

    补充一个P可以HP的特点函数:动态调用 function t(){ echo "welcome"; } function t2(){ echo "beatch" ...

  8. Idea工具常用技巧总结

    转自:https://www.jianshu.com/p/131c2deb3ecf Idea常用技巧总结 1.无处不在的跳转 注:这里的快捷键是自己定义的,并非大家的都一样,可以通过findActio ...

  9. Linux下如何卸载软件(Debian系)

    说明:此方法适用于Debian.Ubuntu等带apt工具的操作系统. 步骤: 1.首先我们需要知道将要卸载的软件名称,比如我现在打算卸载tightvncserver,但是如果你不确定名称,没关系,可 ...

  10. 朋友封装的一个ASP.NET上传文件的方法

    朋友做了asp.net开发多年,做了这个,自我感觉封装得还不错!!! 代码如下: #region 上传文件的方法 /// <summary> /// 上传文件方法 /// </sum ...