【问题标题】:HLS, AWS Elastic Encoder, and adaptive streamingHLS、AWS Elastic Encoder 和自适应流
【发布时间】:2016-10-28 11:32:05
【问题描述】:

我目前正在开发基于浏览器的简单 VOD 服务,主要使用 AWS 技术。 HLS 将用作 Elastic Transcoder 支持的流式传输协议。

目前,源素材是 720p (1280x720),这也是我想向所有可以处理它的设备展示的分辨率。我希望这些视频可以在台式机、iPad 和大多数智能手机上播放。我正在使用 ViBlast 和 videojs,作为播放器。

我有以下问题:

  • m3u8 播放列表允许指定多个流。如果每种分辨率都有自己的播放列表(不同的源流在不同的比特率上),还是我可以将所有内容放在一个播放列表中(这样一个播放列表可以提供不同的分辨率和比特率)。
  • 似乎台式机和最新的平板电脑可以显示 1280x720,我假设可以使用相同的播放列表。我只需要指定比特率。但是,手机的最佳分辨率是多少?似乎每台设备都有其他尺寸(在此处查看 Android)。
  • 我应该为每个设备使用哪种比特率?我正在做一些研究,但似乎每篇文章对“最佳”设置都有不同的建议,但从不解释他们是如何得到这些数字的。
  • 如果我使用的播放列表包含具有不同分辨率的不同来源,播放列表中的顺序是否重要?我在某处读过应该首先列出最低比特率,但这也适用于分辨率吗?还是播放器会自动选择与屏幕最匹配的流?

我正在寻找适合大多数设备的“足够好”的解决方案。

【问题讨论】:

    标签: amazon-web-services video-streaming html5-video transcoding amazon-elastic-transcoder


    【解决方案1】:

    希望这会有所帮助。

    m3u8 播放列表允许指定多个流。应该每个 分辨率得到它自己的播放列表(使用不同的源流 不同的比特率),或者我可以将所有内容放在一个播放列表中(所以一个 播放列表可以提供不同的分辨率和比特率)。

    作为参考,这里是 Apple 关于该主题的“技术说明 TN2224”,它是以下信息的良好指南。 https://developer.apple.com/library/content/technotes/tn2224/_index.html

    简答:每个分辨率都应该有自己的变体播放列表。

    通常有一个主播放列表引用变体播放列表(又名演绎版)。变体播放列表是同一视频的不同质量流,比特率和分辨率各不相同。但每个变体只包含 一个 比特率级别。示例主播放列表:

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4648000,RESOLUTION=3840x2160
    4648k/stream.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2670000,RESOLUTION=1920x1080
    2670k/stream.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1823000,RESOLUTION=1280x720
    1823k/stream.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=975000,RESOLUTION=854x480
    975k/stream.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=491000,RESOLUTION=640x360
    491k/stream.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=186000,RESOLUTION=256x144
    186k/stream.m3u8
    

    “使用 BANDWIDTH 属性在 EXT-X-STREAM-INF 标签中指定比特率” (TN2224)。并且每个下降的带宽(比特率)级别都有相应的较低分辨率,因为可用的数据较少,通常需要在较小的移动屏幕上查看。

    我认为台式机和最新的平板电脑似乎可以显示 1280x720 可以使用相同的播放列表。我只需要指定比特率。 但是,手机的最佳分辨率是多少?似乎每 设备有其他尺寸(在此处查看 Android)。

    分辨率和比特率并存。以 186K 比特率(非常低)编码的流没有足够的数据来填充 1280x720 屏幕。但是蜂窝网络上的移动设备可能无法下载高比特率。因此,您需要几个可用的变体选项,每个选项都具有适当的分辨率和比特率。

    不要专注于特定的设备,否则您将永远无法完成。使用常见的 16:9 纵横比构建比特率/分辨率变体阶梯。例如。 1280x720、1024x576、640x360、...

    不过,有几件事情需要考虑。比特率,您已经在考虑的分辨率。但是这些视频是使用 H.264 编码的吗?如果是这样,您应该考虑配置文件级别。这是一篇关于该主题的好文章:http://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=94216&PageNum=1

    我应该为每台设备使用哪种比特率?我正在做一些研究, 但似乎每篇文章都有不同的建议 “最佳”设置,但从不解释他们是如何获得这些数字的。

    与解决方案相同的答案。不要专注于实际设备。构建比特率/分辨率变体阶梯,允许设备根据可用带宽、电池寿命、处理能力等选择最合适的。

    如果我使用的播放列表包含不同来源的不同 分辨率,播放列表中的顺序重要吗?我读了 应该首先列出最低比特率的地方,但是这样做 也适用于决议?还是玩家自动选择 流哪个最匹配屏幕?

    每个发行商或制造商可能会以不同的方式构建他们的播放器。但这是 Apple 在 TN2224 中推荐的内容。

    “第一个比特率应该是大多数客户端可以承受的 主播放列表中的第一个条目将在流开始时播放,并用作测试的一部分以确定哪个流最合适。其他流的顺序无关紧要。因此,播放列表中的第一个比特率应该是大多数客户端可以承受的。”

    希望对您有所帮助。

    伊恩

    【讨论】:

      猜你喜欢
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多