【问题标题】:Provide multiple encodings of same audio rendition in HLS在 HLS 中提供相同音频再现的多种编码
【发布时间】:2020-06-24 15:49:42
【问题描述】:

我想通过 HLS 自适应流式传输视频。

如果有合适的设备和足够的带宽,视频应该以高清和 5.1 声音呈现。

在带宽较低或不需要 5.1 声音的设备上,应使用较低的分辨率和立体声。

现在,我的主播放列表如下所示:

#EXTM3U
#EXT-X-INDEPENDENT-SEGMENTS

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="AUDIO",NAME="en 5.1",LANGUAGE="en",URI="audio/en_5.1.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="AUDIO",NAME="en 2.0",LANGUAGE="en",URI="audio/en_2.0.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="AUDIO",NAME="de 5.1",LANGUAGE="de",URI="audio/de_5.1.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="AUDIO",NAME="de 2.0",LANGUAGE="de",URI="audio/de_2.0.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="AUDIO",NAME="es 2.0",LANGUAGE="es",URI="audio/es_2.0.m3u8"

#EXT-X-STREAM-INF:BANDWIDTH=944846,AVERAGE-BANDWIDTH=933666,CODECS="avc1.64001E,mp4a.40.2",RESOLUTION=768x328,AUDIO="AUDIO"
video_0.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1269710,AVERAGE-BANDWIDTH=1252915,CODECS="avc1.64001F,mp4a.40.2",RESOLUTION=1024x436,AUDIO="AUDIO"
video_1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2003662,AVERAGE-BANDWIDTH=1976439,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=1600x682,AUDIO="AUDIO"
video_2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2954190,AVERAGE-BANDWIDTH=2911727,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1920x818,AUDIO="AUDIO"
video_3.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=716238,AVERAGE-BANDWIDTH=709068,CODECS="avc1.640015,mp4a.40.2",RESOLUTION=512x218,AUDIO="AUDIO"
video_4.m3u8

但是,这显然不会产生正确的结果:

这 5 个音轨中的每一个都作为单独的演绎呈现给用户。

但是,只应呈现 3 个版本:“en,de,es”

5.1 和 2.0 之间的选择应该是自动的。

有没有什么方法可以通过 HLS 实现这一点?

【问题讨论】:

    标签: video-streaming http-live-streaming


    【解决方案1】:

    视频流是变体流。我们可以通过定义两个具有不同成员的音频组来提供不同的音频编码,这些音频组除了通道之外具有相同的属性,然后从特定的变体中引用这两个不同的组:

    #EXTM3U
    #EXT-X-INDEPENDENT-SEGMENTS
    #EXT-X-VERSION:6
    
    #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio_l",CHANNELS="2",NAME="Audio 0",URI="audio_0l.m3u8"
    #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio_l",CHANNELS="2",NAME="Audio 1",URI="audio_1l.m3u8"
    #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio_l",CHANNELS="2",NAME="Audio 2",URI="audio_2l.m3u8"
    
    #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio_h",CHANNELS="6",NAME="Audio 0",URI="audio_0h.m3u8"
    #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio_h",CHANNELS="6",NAME="Audio 1",URI="audio_1h.m3u8"
    #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio_h",CHANNELS="2",NAME="Audio 2",URI="audio_2h.m3u8"
    
    #EXT-X-STREAM-INF:BANDWIDTH=1637313,AVERAGE-BANDWIDTH=1609092,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=1600x682,AUDIO="audio_l"
    video_3.m3u8
    #EXT-X-STREAM-INF:BANDWIDTH=376055,AVERAGE-BANDWIDTH=370421,CODECS="avc1.640015,mp4a.40.2",RESOLUTION=512x218,AUDIO="audio_l"
    video_0.m3u8
    #EXT-X-STREAM-INF:BANDWIDTH=597555,AVERAGE-BANDWIDTH=588987,CODECS="avc1.64001E,mp4a.40.2",RESOLUTION=768x328,AUDIO="audio_l"
    video_1.m3u8
    #EXT-X-STREAM-INF:BANDWIDTH=916599,AVERAGE-BANDWIDTH=900940,CODECS="avc1.64001F,mp4a.40.2",RESOLUTION=1024x436,AUDIO="audio_l"
    video_2.m3u8
    #EXT-X-STREAM-INF:BANDWIDTH=2757067,AVERAGE-BANDWIDTH=2715497,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1920x818,AUDIO="audio_h"
    video_4.m3u8
    #EXT-X-STREAM-INF:BANDWIDTH=4203897,AVERAGE-BANDWIDTH=4173401,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1920x818,AUDIO="audio_h"
    video_5.m3u8
    

    这样,当播放切换到更高的视频分辨率时,如果它可用于给定的再现,它也会切换到环绕声。

    显然,将视频分辨率的切换与音频通道数的切换结合起来并不完美,但这是我能想到的 HLS 的最佳选择。

    请注意,我们在“audio_h”组中也包括了“Audio 2”,它也只能在立体声中使用,因为这些组需要具有相同的成员。

    【讨论】:

      猜你喜欢
      • 2019-03-06
      • 2020-01-21
      • 2016-12-10
      • 2017-06-07
      • 2015-07-24
      • 1970-01-01
      • 2021-07-01
      • 2023-04-01
      • 2021-10-28
      相关资源
      最近更新 更多