多协议、性能稳定、丰富API的流媒体服务器软件
Apple官方对于Http Live Streaming 的常见问题回答

以下是Apple官方对于Http Live Streaming的常见问题回答

  1. 1、支持哪些类型的编码器?

    HLS协议本身对编码器的选择没有任何限制。 然而,HLS目前实现的编码格式为H.264 视频和AAC 音频 (HE-AAC 或 AAC-LC)。 Apple官方提供的切片工具支持MPEG-TS Over UDP输入的实时流。

  2. 2、具体支持的音视频格式规范包括哪些?

    协议本身对编码格式没有限制,就目前的实现来说,支持以下格式:

    • Video:

      • H.264 Baseline Level 3.0, Baseline Level 3.1, Main Level 3.1, and High Profile Level 4.1.

    • Audio:

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

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

      • AC-3 (for Apple TV, in pass-through mode only)

  3. 3、HLS ts切片文件的时长应该是多少?

    一个重要的考虑是较短的切片会让切片文件索引的刷新频率更快,但这样也产生了一些不必要的网络负载。较长的切片将不可避免的导致延时增大,因此需要更长的初始化时间。因此,如果对画面延时要求不是特别严格,10秒的切片是比较合适的。

  4. 4、在m3u8索引文件中应该放几个媒体文件?

    通常境况下,建议用3个切片文件,但也可以更多.

  5. 5、支持的码率是多大?

    选择多大的码率很大程度上受到用户终端设备类型和网络带宽的影响。HLS协议本身对码率没有任何限制。目前苹果手机支持的码率从低至64 Kbps到高达3 Mbps,均可以流畅播放。如果是纯音频的,在蜂窝网络信号不好的情况下,建议用64 Kbps的码率。

    建议的码率,请参考Preparing Media for Delivery to iOS-Based Devices.

  6. 6、什么是.ts 文件?

    一个.ts 文件包含了 MPEG-2 Transport Stream. 这是一个文件格式,封装了编码后的音频和视频。这个文件格式支持很多编码格式,包括MP3 和 AAC 音频,H.264 视频等等。但并不是所有的编码格式苹果终端都支持。(支持的编码格式,请参考Media Encoder.

    注意:MPEG-2 Transport Streams 是一个容器,不要把它和MPEG-2 编码搞混了。

  7. 7、什么是.M3U8 文件?

    一个.M3U8文件是可以可扩展的索引文件格式。它是一个UTF-8编码的文本文件。 在一个媒体URL索引的文件格式上,m3u是事实上的标准。它被用于 HTTP Live Streaming 协议。 要了解更多,请参考IETF Internet-Draft of the HTTP Live Streaming specification.

  8. 8、客户端播放器应该如何决定切换到另一个质量的流上?

    客户端应该根据带宽来选择对应的流。如果有一个高质量的流和一个低质量的流,在网络状态好时可以切换到高质量的码流,在网络状态不好时可以切换到低质量的码流。

  9. 9、Apple官方哪里可以找到一个切片文件的例子?

    Apple 官方提供了实时流切片工具和文件切片工具以及其它一些工具,它们经常会被更新。因此你应该从Apple开发者网站下载最新版本,请参考下载相关工具软件以了解更多。

  10. 10、对于典型的HLS流,Apple推荐的设置是什么?

    请看为iOS终端流媒体播放准备媒体.

    这些设置是目前的建议。它们有着明确的需求。目前mediastreamsegmenter 工具只支持ISO/IEC 13818规范的MPEG-2 Transport Streams。这个TS流中必须是H.264 (MPEG-4, part 10) 视频以及 AAC 或 MPEG 音频。如果使用AAC 音频,它必须有 ADTS 头。H.264 的视频访问单元必须使用Access Unit Delimiter NALs, 并且必须是唯一的PES packets.

    切片工具(segmenter)也有几个用户层面的参数配置。你可以查看命令行参数列表,可以通过命令man mediastreamsegmenter查看它们的含义。 切片时长10秒,是推荐值,也是默认时长。

  11. 11、在播放HLS时,怎样设置它需要什么样的编码格式(Codec)和H.264 profile?

    使用EXT-X-STREAM-INF标签的CODECS属性。当这个属性被设置时,它必须包含被播放的流的所有的codec和profile。 目前Apple终端可以识别以下属性值:

    AAC-LC

    "mp4a.40.2"

    HE-AAC

    "mp4a.40.5"

    MP3

    "mp4a.40.34"

    H.264 Baseline Profile level 3.0

    "avc1.42001e" or "avc1.66.30"

    Note: Use "avc1.66.30" for compatibility with iOS versions 3.0 to 3.1.2.

    H.264 Baseline Profile level 3.1

    "avc1.42001f"

    H.264 Main Profile level 3.0

    "avc1.4d001e" or "avc1.77.30"

    Note: Use "avc1.77.30" for compatibility with iOS versions 3.0 to 3.12.

    H.264 Main Profile level 3.1

    "avc1.4d001f"

    H.264 Main Profile level 4.0

    "avc1.4d0028"

    H.264 High Profile level 3.1

    "avc1.64001f"

    H.264 High Profile level 4.0

    "avc1.640028"

    H.264 High Profile level 4.1

    "avc1.640028"

    属性值必须用双引号引起来。如果设置了多个值,在一对双引号中必须包含所有的值,多个值之间用逗号隔开。下面是一个例子:

    #EXTM3U
    #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=500000, RESOLUTION=720x480
    mid_video_index.M3U8
    #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=800000, RESOLUTION=1280x720
    wifi_video_index.M3U8
    #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=3000000, CODECS="avc1.4d001e,mp4a.40.5", RESOLUTION=1920x1080
    h264main_heaac_index.M3U8
    #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=64000, CODECS="mp4a.40.5"
    aacaudio_index.M3U8
  12. 12、如何才能从一个包含音频和视频的内容源创建只有音频的HLS流?

    在使用切片工具命令时,加上-audio-only参数。

  13. 13、如何为一个纯音频流加上一个静态背景图?

    在使用切片工具命令时加上-meta-file-meta-type=picture参数,可以在每一个切片中增加一个图片。 例如,下面可以为Track01.mp3的每一个切片增加一个文件为poster.jpg的图片:

    mediafilesegmenter -f /Dir/outputFile -a --meta-file=poster.jpg --meta-type=picture track01.mp3

    注意,每一个切片都会加载一次图片,因此请使用较小的图片。

  14. 14、如何用一个纯音频的流作为音视频流的替代?

    请为EXT-X-STREAM-INF标签同时使用CODECSBANDWIDTH 属性。

    BANDWIDTH 属性标记了播放当前这个流所需要的带宽。如何可用带宽足以播放音频,但不足以播放一个低质量的视频,播放器应该切换到音频流上。

    如果设置了CODECS属性,它必须列出这个流的所有编码信息,如果只列出了音频的Codec,则这个流会被认为是纯音频的。 目前,已经不需要声明一个流是纯音频的,因此CODECS属性变成了可选项。

    下面是一个例子,它设置了500kbps的流用于告诉网络,150kbps的流用于低速网络,以及64kbps的纯音频流用于非常低速的网络。 所有的流都应该用同一个64 Kbps 的音频,以保障在流切换时至少声音是稳定、平滑而没有中断的.

    #EXTM3U
    #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=500000, RESOLUTION=1920x1080
    mid_video_index.M3U8
    #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=150000, RESOLUTION=720x480
    3g_video_index.M3U8
    #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=64000, CODECS="mp4a.40.5"
    aacaudio_index.M3U8
  15. 15、对硬件有什么要求或者推荐的服务器?

    参见问题#1 中对编码器硬件的建议.

    Apple 的实时流切片工具(segmenter)可以运行在Intel-based Mac电脑上。Apple推荐使用一个具有双网卡的Mac电脑,例如一台Mac Pro 或 XServe (当然,这是2010年Apple的说话)。 一个卡网络用于从编码器接收流,另一个网卡连接Internet,用于提供hls服务。

  16. 16、Apple 的 HTTP Live Streaming 支持DRM吗?

    不支持。不过媒体文件可以被加密,密钥可以从Https服务器获取(使用SSL加密技术)。

  17. 17、有哪些终端支持HLS?

    iPhone, iPad, 和 iPod touch (需要 iOS 3.0 及以上版本),Apple TV (版本2及以上),以及 Mac OS X 电脑。

  18. 18、有没有可用的协议规范文档?

    有。协议规范是一个IETF 互联网草案(Internet-Draft),在这里:http://tools.ietf.org/html/draft-pantos-http-live-streaming.

  19. 19、播放器可以缓存内容吗?

    索引文件可以包含允许或不允许客户端缓存的指令。但,另一方面,为了性能优化的目的,播放器可以缓存一些数据媒体内容的快速索引。

  20. 20、HLS是一个实时传输系统吗?

    不是。它天生就有切片文件导致的延时,至少得等一个完整的切片下载完成后才能开始播放,至少两个切片才能保证平滑播放。 此外,编码器和切片工具必须从实时输入流中创建切片文件,在下载开始之前,至少有等待一个切片长度的时间。 通常情况下,延时在30秒左右。

  21. 21、延时有多大?

    按建议的设置,大概30秒左右。

  22. 22、是否需要一个硬件编码器?

    不。使用软件编码器也可以。

  23. 23、对比 RTP/RTSP,HLS有哪些优势?

    HTTP 协议很少被路由器、NAT、防火墙所屏蔽。 端口也不会被关闭。几乎需要任何设置,媒体内容就可以被下载到用户终端。 HTTP 也支持大多数CDN网络,它可以大规模分发场景下节省成本。. 总体而言,相对于RTP/RTSP,大部分的硬件和软件几乎不需要做任何修改就可以使用HLS HTTP技术的使用更广泛和流行。

    同时iOS上原生支持HLS,而不会原生支持RTSP。

  24. 24、为什么我的流的总码率比音频和视频的码率之和要大一些?

    MPEG-2 transport 流包含一些固有的开销。它使用了固定大小的packet,但有些实际内容数据包比这个固定值要小。 编码器和复用器会在空隙中加入一些元数据,比如帧率、采样率、分辨率等。

  25. 25、如何才能降低开销,让码率降下来?

    使用更高效率的编码器,也要调试编码器的设置参数