zoukankan      html  css  js  c++  java
  • [翻译]HLS实践

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

    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,建议经常进行验证,可以看见详细的验证报告

  • 相关阅读:
    无刷电机控制基本原理
    SPI 串行Flash闪存W25Q128FV 的使用(STM32F407)_软件篇
    CAN总线简介
    RS-232串口特性
    PLSQL 安装教程
    JS 常用正则表达式备忘录
    JS数组去重
    Js中Map对象的使用
    JS操作字符串
    前端小技巧
  • 原文地址:https://www.cnblogs.com/futao/p/3277973.html
Copyright © 2011-2022 走看看