【问题标题】:hls aes encrypted video not playing after EXT-X-DISCONTINUITY tag on ioshls aes加密视频在ios上的EXT-X-DISCONTINUITY标签后不播放
【发布时间】:2012-07-19 13:39:55
【问题描述】:

看起来 ios 不喜欢将加密的 .ts 文件与 EXT-X-DISCONTINUITY 标签混合的 hls m3u8 文件。

这是一个测试播放列表,它是两个视频的混合。未加密的前置广告和主要加密视频。两者分开播放都很好,但是当我将它们放在一个 m3u8 中,由 EXT-X-DISCONTINUITY 分隔时,只播放前卷,然后播放器停止。

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:10,     
http://ixemes-ppweb.ixemes.com/prerollmain/vig_400-0.ts
#EXTINF:10,
http://ixemes-ppweb.ixemes.com/prerollmain/vig_400-1.ts
#EXT-X-DISCONTINUITY
#EXTINF:10,
#EXT-X-KEY:METHOD=AES-128,URI="http://ixemes-ppweb.ixemes.com/prerollmain/113760.key"
http://ixemes-ppweb.ixemes.com/prerollmain/02-0.ts
#EXTINF:10,     
http://ixemes-ppweb.ixemes.com/prerollmain/02-1.ts
#EXTINF:10,     
http://ixemes-ppweb.ixemes.com/prerollmain/02-2.ts
#EXTINF:10,     
http://ixemes-ppweb.ixemes.com/prerollmain/02-3.ts
#EXTINF:10,     
http://ixemes-ppweb.ixemes.com/prerollmain/02-4.ts
#EXTINF:10,     
http://ixemes-ppweb.ixemes.com/prerollmain/02-5.ts
#EXTINF:10,     
http://ixemes-ppweb.ixemes.com/prerollmain/02-6.ts
#EXTINF:10,     
http://ixemes-ppweb.ixemes.com/prerollmain/02-7.ts
#EXTINF:10,     
http://ixemes-ppweb.ixemes.com/prerollmain/02-8.ts
#EXTINF:10,     
http://ixemes-ppweb.ixemes.com/prerollmain/02-9.ts
#EXTINF:10,     
http://ixemes-ppweb.ixemes.com/prerollmain/02-10.ts
#EXTINF:10,     
http://ixemes-ppweb.ixemes.com/prerollmain/02-11.ts
#EXTINF:2,      
http://ixemes-ppweb.ixemes.com/prerollmain/02-12.ts
#EXT-X-ENDLIST

我尝试了两个未加密的视频,它可以工作。而且我在 HLS 规范中没有看到任何内容表明禁止在加密视频中使用 EXT-X-DISCONTINUITY 标签:https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-08#section-6.3.3

所以我猜是苹果对其自身规范的实现是错误的,但也许是我做错了。

我已经制作了一个快速的 html 页面来测试它(在任何 ios5 设备上的 safari 中打开它):http://ixemes-ppweb.ixemes.com/prerollmain/index.html

【问题讨论】:

    标签: ios ios5 http-live-streaming


    【解决方案1】:

    我注意到您的 EXT-X-KEY 没有 IV 项,即初始化向量。这是标准支持的,例如:

    #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52",IV=0x9c7db8778570d05c3177c349fd9236aa
    

    如果缺少这个,https://developer.apple.com/library/ios/technotes/tn2288/_index.html 告诉玩家应该选择 IV:

    媒体加密的默认初始化向量(如果没有 指定)是媒体文件的序列号。你应该 指定一个初始化向量值,而不依赖于序列 数字。主要原因是便携性。例如,如果您 更改片段在播放列表中的显示位置(例如,插入 ad),这会改变其序列号,需要重新加密。

    在我的团队中,我们无法弄清楚为什么带有插入广告的加密内容无法播放。我们有一个播放的加密内容示例:

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-MEDIA-SEQUENCE:1
    #EXT-X-ALLOW-CACHE:NO
    #EXT-X-TARGETDURATION:11
    #EXT-X-KEY:METHOD=AES-128,URI="http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans.key"
    #EXTINF:11,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-1.ts
    #EXTINF:7,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-2.ts
    #EXTINF:7,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-3.ts
    #EXTINF:8,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-4.ts
    #EXTINF:10,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-5.ts
    #EXTINF:6,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-6.ts
    #EXTINF:9,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-7.ts
    #EXTINF:7,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-8.ts
    #EXTINF:9,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-9.ts
    #EXTINF:8,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-10.ts
    #EXTINF:8,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-11.ts
    #EXTINF:8,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-12.ts
    #EXTINF:6,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-13.ts
    #EXTINF:9,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-14.ts
    #EXTINF:5,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-15.ts
    #EXT-X-ENDLIST
    

    您可以在http://demo.theplatform.com/dev/m3u8/encrypted.m3u8 试试这个。但是当我们在它之前插入内容时,就像这样,它没有播放:

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-MEDIA-SEQUENCE:1
    #EXT-X-ALLOW-CACHE:NO
    #EXT-X-TARGETDURATION:11
    #EXT-X-KEY:METHOD=NONE
    #EXTINF:10.01,
    http://ne.edgecastcdn.net/0008B0/mps/Inkola_VMS/20/687/15_WordIsOut_UPFW1764H_1080p_20802040_m3u8_video_480x0_400000_primary_audio_eng_2_x5e1c9dd7b9834f38a319d348e1a5f9ee_00001.ts
    #EXTINF:5.088,
    http://ne.edgecastcdn.net/0008B0/mps/Inkola_VMS/20/687/15_WordIsOut_UPFW1764H_1080p_20802040_m3u8_video_480x0_400000_primary_audio_eng_2_x5e1c9dd7b9834f38a319d348e1a5f9ee_00002.ts
    #EXT-X-DISCONTINUITY
    #EXT-X-KEY:METHOD=AES-128,URI="http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans.key"
    #EXTINF:11,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-1.ts
    #EXTINF:7,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-2.ts
    #EXTINF:7,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-3.ts
    #EXTINF:8,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-4.ts
    #EXTINF:10,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-5.ts
    #EXTINF:6,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-6.ts
    #EXTINF:9,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-7.ts
    #EXTINF:7,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-8.ts
    #EXTINF:9,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-9.ts
    #EXTINF:8,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-10.ts
    #EXTINF:8,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-11.ts
    #EXTINF:8,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-12.ts
    #EXTINF:6,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-13.ts
    #EXTINF:9,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-14.ts
    #EXTINF:5,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-15.ts
    #EXT-X-ENDLIST
    

    这个网址是http://demo.theplatform.com/dev/m3u8/mix.m3u8。我们发现问题是因为我们添加了两个片段,媒体序列号现在偏离了 2。如果您将 IV 显式设置为“0x000000000000000000000000000000001”,如下所示:

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-MEDIA-SEQUENCE:1
    #EXT-X-ALLOW-CACHE:NO
    #EXT-X-TARGETDURATION:11
    #EXT-X-KEY:METHOD=NONE
    #EXTINF:10.01,
    http://ne.edgecastcdn.net/0008B0/mps/Inkola_VMS/20/687/15_WordIsOut_UPFW1764H_1080p_20802040_m3u8_video_480x0_400000_primary_audio_eng_2_x5e1c9dd7b9834f38a319d348e1a5f9ee_00001.ts
    #EXTINF:5.088,
    http://ne.edgecastcdn.net/0008B0/mps/Inkola_VMS/20/687/15_WordIsOut_UPFW1764H_1080p_20802040_m3u8_video_480x0_400000_primary_audio_eng_2_x5e1c9dd7b9834f38a319d348e1a5f9ee_00002.ts
    #EXT-X-DISCONTINUITY
    #EXT-X-KEY:METHOD=AES-128,URI="http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans.key",IV=0x00000000000000000000000000000001
    #EXTINF:11,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-1.ts
    #EXTINF:7,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-2.ts
    #EXTINF:7,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-3.ts
    #EXTINF:8,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-4.ts
    #EXTINF:10,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-5.ts
    #EXTINF:6,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-6.ts
    #EXTINF:9,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-7.ts
    #EXTINF:7,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-8.ts
    #EXTINF:9,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-9.ts
    #EXTINF:8,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-10.ts
    #EXTINF:8,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-11.ts
    #EXTINF:8,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-12.ts
    #EXTINF:6,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-13.ts
    #EXTINF:9,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-14.ts
    #EXTINF:5,
    http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes-audio=65000-video=2042000-15.ts
    #EXT-X-ENDLIST
    

    然后就可以了。你可以试试http://demo.theplatform.com/dev/m3u8/mix_fixed.m3u8。所以也许这就是你遇到的问题。

    【讨论】:

      【解决方案2】:

      好吧,它看起来与主视频的加密无关,而是与主视频的编码方式有关。我无法控制主视频的编码方式。我只对自己的预卷视频进行编码(并分块)用于测试目的。

      如果我将前卷与相同的主视频混合但未加密,它也不起作用。 如果我混合由同一个外部编码器编码的两个视频,加密(或不加密)它不起作用。 不知道外部编码器的then编码参数有什么问题,但是不连续标签不起作用。

      但是,如果我自己编码两个视频(前卷和主视频),加密主视频,然后使用不连续性标签将它们放入单个 m3u8 文件中,它就可以工作。

      所以ios处理不连续标签的方式还是有问题,没有完全重置播放器参数,但至少可以在加密前插入未加密的前卷视频。

      【讨论】:

      • 对于那些对此感兴趣的人来说,我用来正确编码视频的 avconv (ffmpeg) 命令行:avconv -i 40361740.mpg -s 320x240 -f mpegts -acodec aac -vcodec libx264 -b :a 82k -strict 实验性 -b:v 320k -bufsize:v 70000 -minrate:v 290k -maxrate:v 360k 40361740_400.ts
      猜你喜欢
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      相关资源
      最近更新 更多