只有I帧的播放列表和常规的播放列表基本一样。唯一的区别是I帧的播放列表没有一个固有的播放时长,相反,它是两个I帧之间的时间间隔。如果到了最后一个I帧,那这个长度就是从这个I帧开始到视频的结束。 在只有I帧的播放列表中,采用EXT-X-I-FRAMES-ONLY tag来说明,EXTINF tag 是I帧的间隔时长。 这个时长是紧挨着的两个I帧之间的时长(或者是播放列表中最后一个I帧到视频结束的时长)。
注意:
- I帧播放列表需要HLS 4以上的版本。默认设置下,Wowza Streaming Engine™ 软件使用的HLS版本是3。请阅读如何修改EXT-X-VERSION的版本? 来修改Wowza使用的版本
- I帧播放列表仅适用于VOD业务。
配置
要使用I帧播放列表,在你的VOD Application中添加以下自定义参数。请阅读Wowza的配置参数 以了解如何为你的应用添加自定义参数的细节信息。
Path |
Name |
Type |
Value |
Notes |
/Root/Application/HTTPStreamer | cupertinoExtXVersion | Integer | 4 | 可以在HTTP Streamers Cupertino Settings 部分来设置(默认值: 3). |
/Root/Application/HTTPStreamer | cupertinoCreateKeyFrameOnlyPlaylist | Boolean | TRUE | 必须作为一个自定义参数来设置 (默认值: FALSE). |
cupertinoExtXVersion参数必须被设置为4或以上,I帧的播放列表才会生效。Wowza Streaming Engine 现在支持到版本6。
cupertinoCreateKeyFrameOnlyPlaylist 参数会启用只有I帧的播放列表,这样使得Apple终端的原生播放器可以在播放VOD时进行快速的定位。 这时,播放器在全屏状态下的屏幕底部会显示一个快进和快退的按钮。按住这些按钮将会使用只有I帧的播放列表来进行快速定位。快速点击这些按钮将跳过视频的开始或结束。
如果只有I帧的播放列表功能没有生效,你将会在播放器上看到默认的按钮,它允许你每次快进或快退30秒。www.ttstream.com
在原生播放器顶端的scrub bar 不支持只有I帧的播放列表,因此拖拽scrub bar进行定位时,将使用标准的播放列表,它会允许你拖拽到视频流的特定位置上。
播放列表看起来如下。你可以用curl 或 wget 来检测这个播放列表:
curl http://localhost:1935/vod/mp4:sample.mp4/playlist.m3u8 #EXTM3U #EXT-X-VERSION:4 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=572079,CODECS="avc1.42c01e, mp4a.40.2",RESOLUTION=424x240 chunklist_w1616510757.m3u8 #EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=215,CODECS="avc1.42c01e",URI="chunklist_w1616510757_ko.m3u8"如果你检查一下这个m3u8文件,你可以看到如下内容。这个列表中的每一个TS文件都只有一个关键帧。
curl http://localhost:1935/vod/mp4:sample.mp4/chunklist_w1616510757_ko.m3u8 #EXTM3U #EXT-X-VERSION:4 #EXT-X-TARGETDURATION:6 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-I-FRAMES-ONLY #EXTINF:3.75, #EXT-X-BYTERANGE:999624@376 media_w1616510757_ko_0.ts #EXTINF:3.75, #EXT-X-BYTERANGE:999624@376 media_w1616510757_ko_1.ts #EXTINF:3.75, #EXT-X-BYTERANGE:999624@376 media_w1616510757_ko_2.ts #EXTINF:3.75, #EXT-X-BYTERANGE:999624@376 media_w1616510757_ko_3.ts . . .对于多码率视频流(ABR),你可以在SMIL文件中添加只有I帧的播放列表的输出流。 这个只有I帧的输出流需要一个keyFrameOnly的参数,它必须被设置为TRUE。
<smil> <head> </head> <body> <switch> <video src="mp4:sample.mp4" width="320" height="240" video-bitrate="500000"> <param name="videoCodecId" value="avc1.66.30" valuetype="data"/> <param name="audioCodecId" value="mp4a.40.2" valuetype="data"/> </video> <video src="mp4:sample.mp4" video-bitrate="5000"> <param name="videoCodecId" value="avc1.66.30" valuetype="data"/> <param name="keyFrameOnly" value="TRUE" valuetype="data"/> </video> </switch> </body> </smil>