HLS m3u8文件更新规则
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:2
#EXT-X-TARGETDURATION:10
#EXTINF:10,
cctv1hd-227601.ts
#EXTINF:10,
cctv1hd-227602.ts
#EXTINF:10,
cctv1hd-227603.ts
注意:
live m3u8更新规则
live m3u8文件列表需要不断更新,更新规则:
移除一个文件播放列表中靠前的(认为已播放的)文件
不断更新EXT-X-MEDIA-SEQUENCE标签,以步长为1进行递增
在更新M3U8时一定要注意要确保”每个.ts信息和播放时长”在更新前后要保持一致(否则会导致播放器播放出错并停止播放)。
播放器在播放完一个.ts文件后会向服务器再次发送请求m3u8文件的请求。
更新服务器的播放请求要在一个.ts文件播放完成前进行更新。
这里的更新 可以直接将原m3u8文件删除再创建一个新的m3u8文件。
如:在第一次更新中#EXTINF信息为:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-TARGETDURATION:10
#EXTINF:5,
cctv1hd-227600.ts
#EXTINF:10, //注意此处时长为10
cctv1hd-227601.ts
#EXTINF:10,
cctv1hd-227602.ts
但是在第二次更新M3U8文件的时候一不小心将文件写为:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-TARGETDURATION:10
#EXTINF:5,
cctv1hd-227600.ts
#EXTINF:11, //注意此处时长为11上一次更新时长为10 前后更新m3u8文件时同一个.ts文件时长不同会导致播放器出现播放错误。
cctv1hd-227601.ts
#EXTINF:10,
cctv1hd-227602.ts
当遇到上面的m3u8文件更新不正确时 播放器报的错误如下:
注意:当遇到上面的类似错误时 AVPlayerViewController 不会报出错误信息但是会停止播放,MPMoviePlayerController会报出错误信息
建议在调试时使用MPMoviePlayerController调试在遇到错误时能知道错误信息。
2017-07-21 18:29:29.023244+0800 test_m3u8_download_01[5820:317943] [Playback] ❗️Playback failed with error: (null), not resolving (canResolve: YES, errorResolver: (null))
2017-07-21 18:29:29.023 test_m3u8_download_01[5820:317943] 停止播放.
2017-07-21 18:29:29.024 test_m3u8_download_01[5820:317943] 停止播放.
2017-07-21 18:29:29.026 test_m3u8_download_01[5820:317943] 未知状态
2017-07-21 18:29:29.028467+0800 test_m3u8_download_01[5820:317943] [Playback] ❗️Failed to queue any items.
2017-07-21 18:29:29.041 test_m3u8_download_01[5820:317943] errorLog is (null)
2017-07-21 18:29:29.041 test_m3u8_download_01[5820:317943] events is (null)
2017-07-21 18:29:29.041 test_m3u8_download_01[5820:317943] --------------------<<<<<<<<<<<<<<<<<
2017-07-21 18:29:29.042117+0800 test_m3u8_download_01[5820:317943] [Playback] ❗️Failed to queue any items.