Bash 加密HLS作为实时流工作,不';我不能做视频点播

Bash 加密HLS作为实时流工作,不';我不能做视频点播,bash,ffmpeg,http-live-streaming,Bash,Ffmpeg,Http Live Streaming,我发现了一些用于将视频文件编码和加密到HLS流中的粗糙bash脚本,并对其进行了轻微编辑(我不知道bash): 这会导致类似这样的结果: #EXTM3U #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-KEY:METHOD=AES-128,URI=output.key #EXT-X-TARGETDURATION:11 #EXTINF:10.176833, output-000.ts #EXTINF:8.341667, output-001.ts #

我发现了一些用于将视频文件编码和加密到HLS流中的粗糙bash脚本,并对其进行了轻微编辑(我不知道bash):

这会导致类似这样的结果:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI=output.key
#EXT-X-TARGETDURATION:11
#EXTINF:10.176833,
output-000.ts
#EXTINF:8.341667,
output-001.ts
#EXTINF:8.341667,
output-002.ts
#EXTINF:3.136467,
output-003.ts
#EXT-X-ENDLIST
这几乎奏效了。不过我需要的是视频点播,而不是直播。所以,我添加了一行:

#EXT-X-PLAYLIST-TYPE:VOD

现在它不适用于加密段,只适用于未加密段。我以为所有的片段都是分开加密的?此外,即使是未加密的文件,也不存在有关总长度的信息。我该如何解决这个问题呢?

以下是一些基于我自己实验的建议,这些建议似乎在VLC、iOS和Android上都能奏效

  • 初始化向量

    当播放列表中未指定
    IV
    时,每个片段的默认
    IV
    与媒体序列相同。确保段000的IV=0,段001的IV=1,依此类推

  • 引用
    URI

    iOS似乎不喜欢播放列表中的
    URI
    不使用引号,因此请使用
    EXT-X-KEY:METHOD=AES-128,URI=“output.KEY”

  • 播放列表类型
    VOD


    EXT-X-PLAYLIST-TYPE
    是可选的,只要您在末尾有
    EXT-X-ENDLIST
    ,播放列表将被视为静态的,并允许您查找。无论是否有此标签,VLC和iOS都会将您的播放列表视为VOD

    关于媒体持续时间,VLC显示0 wile iOS显示正确的值

    如果您确实指定了
    EXT-X-PLAYLIST-TYPE:VOD
    ,请确保它位于
    EXT-X-VERSION:3
    之后,否则VLC不会喜欢它


EXT-X-PLAYLIST-TYPE
是可选的。如果添加
EXT-X-ENDLIST
,则表示播放列表包含最后一段,不再刷新。如何在ios设备上测试流?此外,
EXT-X-KEY
适用于片段,播放列表中可以有多个片段。我认为标签的正确位置应该正好在第一个
熄灭
之前。这应该不会有什么不同,但谁知道呢……我正在通过VLCNope在windows上测试,订单似乎并没有改变任何东西。我以为多个关键点需要#EXT-X-不连续性,但它适用于多个单独的文件。按键旋转有一些不同的机制。我尝试了一个像你这样的例子(根据媒体序列使用默认的IVs),它在VLC 2.1.6、iOS 8.3和Android 4.4.4上使用或不使用
EXT-X-PLAYLIST-TYPE:VOD
都可以正常工作
#EXT-X-PLAYLIST-TYPE:VOD