#EXTM3U
#EXT-X-VERSION:3
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="https://www.test.com/vod/decrypt?Ciphertext=c4eabd1711352c6a460a974692d59f45dde3c92141ce0cf205c2c312f881c4834fd533063975bd45a584f20972030dd0e6ed01648c0e59de0592a130e64f4fccb2a410bf940056c315d48e804fb334c41e4c45bebe75adeda801dcda6e59a09baac615062595aef5daeca4097c70151615d46dfd3b911708cccef35bbf8b741ddc0dff19eff01cd34b21305005776db0c24f16ed6822eb295ce9bf09ae2c0fc9208279e882bbe991140c6b14c7f52c8145c255de8c521c3e60ce8b3d2b147c1c8c621222ff8dfd44be5a746ac7e81a89b6a761f3f5ea7692dcbc904aa225c18f68099a259e9a0a50600fa9fec541c6511e2fe6be0ddc874fad5a6b2d19110810&MtsHlsUriToken=d1k8edZ4gl.2ic3kMTAiFaZaOfYCoik8A4DlwuWYb3OoKdxu9eRuwWtLAlu6lIauCf1MByaKuiFJ0PzAAbJkK4HW6qag0QzGaMSHLl13I4pU4jVIEWdfEinWa0Pz37mNh7yCGVFO-8BXHbi-zTLRGdwdWCsptrfcN1z91MtoFwXCGwu1B6ioOOrC5OkBwxaH.eoNbBmcUYYrRtC88EgPCyT7.iVjBiktGD78.AZ-BUc=_a2929bd3e50ad47a261c1d1dab00f9c4cae91eec141e0bd74baeb58d446de78d55f4719d01c3295a74379b9b00b151fcaadc311a7267d9827c9cd5280988660a",IV=0x3867A127D74C295D7CE6905D4375EBDB
#EXTINF:10.000000,
segment-0.ts
#EXTINF:10.000000,
segment-1.ts
#EXTINF:10.000000,
segment-2.ts
#EXTINF:10.000000,
segment-3.ts
#EXTINF:10.000000,
segment-4.ts
....
#EXTINF:10.000000,
segment-365.ts
#EXTINF:7.840000,
segment-366.ts
#EXT-X-ENDLIST
这是一个m3u8文件的内容,它是HTTP Live Streaming(HLS)协议的一部分,用于流媒体的播放。下面是对这个文件内容的解读:
#EXTM3U:这是文件的开头,表明这是一个M3U文件。
#EXT-X-VERSION:3:这是HLS协议的版本号。
#EXT-X-PLAYLIST-TYPE:VOD:这表示这是一个点播(Video On Demand)播放列表,而不是直播。
#EXT-X-INDEPENDENT-SEGMENTS:这表示所有的媒体段都可以独立解码,即每个媒体段都是一个完整的GOP(Group of Pictures)。
#EXT-X-TARGETDURATION:10:这表示播放列表中每个媒体段的最大时长为10秒。
#EXT-X-MEDIA-SEQUENCE:0:这表示播放列表中第一个媒体段的序列号为0。
#EXT-X-KEY:METHOD=AES-128,URI="...":这表示媒体段被AES-128加密,密钥可以从给定的URI获取。URI后面的长字符串是密钥的获取参数。
IV=0x3867A127D74C295D7CE6905D4375EBDB 这部分是在指定AES-128加密时使用的初始化向量(Initialization Vector,简称IV)。
//在对数据进行AES加密时,为了增加加密的复杂性和安全性,通常会使用一个随机生成的初始化向量。这个向量在加密过程中与数据一起使用,但在解密时也需要提供。因此,它通常会与加密后的数据一起存储或传输。
在你提供的m3u8文件中,IV=0x3867A127D74C295D7CE6905D4375EBDB 就是用于解密媒体段的初始化向量。播放器在获取到加密的媒体段后,需要使用相同的密钥和这个初始化向量来进行解密,才能正确播放视频。
值得注意的是,虽然初始化向量通常是随机生成的,但它本身并不需要保密。实际上,它通常会明文存储或传输,就像在这个m3u8文件中一样。
#EXTINF:10.000000,:这表示接下来的媒体段的时长为10秒。
segment-0.ts:这是一个媒体段的文件名,它是一个MPEG-2 TS文件,包含了10秒的视频和音频数据。
后面的#EXTINF和媒体段文件名的组合重复出现,表示播放列表中的其他媒体段。
#EXT-X-ENDLIST 是一个标签,用于指示播放列表已经结束。
在HLS(HTTP Live Streaming)协议中,如果一个播放列表是点播(VOD)或事件(EVENT)类型的,那么当所有的媒体段都已经列出时,应该在播放列表的末尾添加 #EXT-X-ENDLIST 标签。
对于直播类型的播放列表,通常不会包含 #EXT-X-ENDLIST 标签,因为新的媒体段会不断添加到播放列表的末尾。
所以,如果你在一个m3u8文件中看到了 #EXT-X-ENDLIST 标签,那么这通常意味着这个播放列表已经完整,不会再有新的媒体段添加进来。
总的来说,这个m3u8文件描述了一个点播视频的信息,包括视频的时长、分段、加密方式等。播放器可以根据这个文件的内容,下载并播放相应的媒体段,从而实现视频的播放。
avplayer播放的过程:
对于你提供的m3u8文件内容,AVPlayer在播放时会进行以下步骤:
读取m3u8文件,解析出媒体段(segment-0.ts, segment-1.ts等)的URL。
根据#EXT-X-KEY标签获取解密密钥。这个标签指定了一个URL,AVPlayer会从这个URL下载密钥。这个过程可能需要网络请求,因此可能需要一些时间。
使用下载到的密钥和IV(初始化向量)来解密媒体段。在你的m3u8文件中,IV的值是0x3867A127D74C295D7CE6905D4375EBDB。
解密后的媒体段是TS(Transport Stream)格式的视频和音频数据,AVPlayer可以直接播放这种格式的数据。
AVPlayer按照媒体段在m3u8文件中的顺序,依次播放每个媒体段。每个媒体段的时长由#EXTINF标签指定,例如#EXTINF:10.000000,表示接下来的媒体段时长为10秒。
当播放完所有的媒体段后,播放结束。
请注意,这个过程中的大部分步骤都是自动进行的,你不需要编写额外的代码。你只需要将m3u8文件的URL提供给AVPlayer,它就会自动处理剩下的事情。但是,如果获取密钥的URL需要鉴权,那么你可能需要实现AVAssetResourceLoaderDelegate协议,提供必要的鉴权信息。
网友评论