FMUSER更轻松地传输视频和音频!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷兰语
sq.fmuser.org ->阿尔巴尼亚人
ar.fmuser.org ->阿拉伯语
hy.fmuser.org - >亚美尼亚
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄罗斯语
bg.fmuser.org - >保加利亚
ca.fmuser.org ->加泰罗尼亚语
zh-CN.fmuser.org ->中文(简体)
zh-TW.fmuser.org - >中国(繁体)
hr.fmuser.org ->克罗地亚语
cs.fmuser.org ->捷克
da.fmuser.org ->丹麦语
nl.fmuser.org - >荷兰
et.fmuser.org ->爱沙尼亚语
tl.fmuser.org ->菲律宾
fi.fmuser.org ->芬兰语
fr.fmuser.org - >法国
gl.fmuser.org ->加利西亚语
ka.fmuser.org ->乔治亚
de.fmuser.org ->德语
el.fmuser.org - >希腊
ht.fmuser.org ->海地克里奥尔语
iw.fmuser.org ->希伯来语
hi.fmuser.org ->印地语
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰岛语
id.fmuser.org ->印尼语
ga.fmuser.org ->爱尔兰
it.fmuser.org - >意大利
ja.fmuser.org ->日语
ko.fmuser.org ->韩文
lv.fmuser.org ->拉脱维亚
lt.fmuser.org - >立陶宛
mk.fmuser.org ->马其顿语
ms.fmuser.org ->马来语
mt.fmuser.org ->马耳他语
no.fmuser.org - >挪威
fa.fmuser.org ->波斯语
pl.fmuser.org ->波兰语
pt.fmuser.org ->葡萄牙语
ro.fmuser.org - >罗马尼亚
ru.fmuser.org ->俄语
sr.fmuser.org ->塞尔维亚语
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亚
es.fmuser.org ->西班牙语
sw.fmuser.org ->斯瓦希里语
sv.fmuser.org ->瑞典语
th.fmuser.org - >泰国
tr.fmuser.org ->土耳其语
uk.fmuser.org ->乌克兰语
ur.fmuser.org ->乌尔都语
vi.fmuser.org - >越南
cy.fmuser.org ->威尔士语
yi.fmuser.org - >意第绪语
HLS和Http Live Streaming是Apple定义的用于实时流传输的协议。 HLS是基于HTTP协议实现的。 传输内容包括两部分,一个是M3U8描述文件,另一个是TS媒体文件。
1. M3U8文件
媒体文件以文本形式描述,该文本由一系列标签组成。
#EXTM3U
#EXT-X-TARGETDURATION:5
#EXTINF:5,
./0.ts
#EXTINF:5,
./1.ts
#EXTM3U:每个M3U8文件的第一行必须是此标记。
#EXT-X-TARGETDURATION:指定最大媒体段时间长度(秒)。 #EXTINF中指定的时间长度必须小于或等于此最大值。 该值只能出现一次。
#EXTINF:描述单个媒体文件的长度。 随后是媒体文件,例如./0.ts
可以通过HTTP在iOS设备和Mac上分发它。 播放列表标准是m3u扩展的m8u3文件,媒体文件是MPEG2-TS或AAC文件(仅音频)。
m3u8文件有两种应用方案:
多速率自适应流
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID = 1,BANDWIDTH = 1280000
#EXT-X-STREAM-INF:PROGRAM-ID = 1,BANDWIDTH = 2560000
#EXT-X-STREAM-INF:PROGRAM-ID = 1,BANDWIDTH = 7680000
#EXT-X-STREAM-INF:PROGRAM-ID = 1,BANDWIDTH = 65000,CODECS =“ mp4a.40.5”
http://example.com/audio-only.m3u8
单速率适配流
#EXTM3U
#EXT-X-TARGETDURATION:5220
#EXTINF:5220,
http://media.example.com/entire.ts
#EXT-X-ENDLIST
国际标准组织(International Standards Organization)定义了该rfc文档:
http://tools.ietf.org/html/draft-pantos-http-live-streaming-06
m3u8文件是m3u文件的扩展。 扩展关键字在rfc中定义:
其中:
#EXT-X-TARGETDURATION
定义每个TS的最大持续时间。
#EXT-X-MEDIA-SEQUENCE
定义当前m3u8文件中第一个文件的序列号。 每个ts文件在m3u8文件中都有一个固定且唯一的序列号。 序列号用于切换MBR期间对齐的编码率。
#EXT-X-KEY
定义密钥文件的加密方法和URL,以获取16字节密钥文件来解码ts文件。
属性:
方法
网址
#EXT-X-PROGRAM-DATE-TIME
第一个文件的绝对时间
#EXT-X-ALLOW-CACHE
是否允许缓存。
#EXT-X-ENDLIST
指示m3u8文件的结尾。 Live m3u8没有此标签。
#EXT-X-STREAM-INF
属性:
BANDWIDTH指定比特率
程序ID唯一ID
CODECS指定流的编码类型
#EXT-X不连续
遇到标签时,以下属性已更改:
文件格式
曲目数量和类型
编码参数
编码顺序
时间戳序列
#EXT-X-VERSION可以使用或不使用此属性,您不能使用
M3U8分为顶级M3U8和第二级M3U8。 顶级M3U8主要用于多速率适配。 第二级M3U8是真实的切片文件。
默认情况下,客户端将首先选择比特率最高的请求。 如果发现无法达到比特率,它将请求一个低比特率的流
实际使用的顶级M3U8文件如下:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID = 201273221265,BANDWIDTH = 358400
11.立方米3
#EXT-X-STREAM-INF:PROGRAM-ID = 201273221265,BANDWIDTH = 972800
22.立方米3
上面的顶级M3U8文件定义了两个第二级文件11.m3u8和22.m3u8,客户端将选择其中一个文件来获取其内容。
辅助M3U8文件的内容如下:
#EXTM3U
#EXT-X-VERSION:1
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:3,
1-4.ts
#EXTINF:8,
1-6.ts
#EXTINF:8,
1-8.ts
#EXTINF:8,
1-10.ts
#EXTINF:8,
1-12.ts
#EXTINF:8,
1-14.ts
#EXTINF:8,
1-16.ts
#EXTINF:9,
1-18.ts
#EXTINF:6,
1-20.ts
#EXTINF:8,
1-22.ts
#EXTINF:9,
1-24.ts
#EXTINF:3,
1-26.ts
#EXT-X-ENDLIST
客户端获取上述辅助M3U8文件后,它将继续在内部请求文件,然后可以播放该文件。
上面是关于点播情况和实时广播的情况,M3U8文件中将包含一些属性以告知它是实时的,并且客户端将定期请求新的M3U8文件。
//当HLS实现点播和直播时,M3U8文件的区别
1.问题描述
最近,我使用HLS(HTTP实时流)进行了转码切片回放测试,以进行实时广播。 每个TS分割时间为10s,并根据TS分割文件生成以下实时m3u8文件
复制代码
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-TARGETDURATION:10
#EXTINF:10
hls / 1.ts
#EXTINF:10
hls / 2.ts
#EXTINF:10
hls / 3.ts
#EXTINF:10
hls / 4.ts
#EXTINF:10
hls / 5.ts
#EXTINF:10
hls / 6.ts
#EXTINF:10
hls / 7.ts
#EXTINF:10
hls / 8.ts
#EXTINF:10
hls / 9.ts
#EXTINF:10
hls / 10.ts
复制代码
将上面的m3u8文件另存为live.m3u8,将其放在Apache文档目录中,并使用VLC播放以下URL:
http://localhost/live.m3u8
测试发现开始播放的第一个文件不是1.ts。 经过几次测试,发现:
只要列表中有三个以上文件,列表中的最后三个文件将始终播放
2。 解决问题
很可悲的是,在搜索互联网之后,我没有找到任何有效的信息。 一个伙伴遇到了同样的情况,解决问题后他是否分享了他的经验?
与同事协商后,该同事说这是可能的,因为实时m3u8文件列表需要实时更新。 如果我们进行测试,则可以先在最后添加#EXT-X-ENDLIST。 此方法已经过测试,可以工作,但是不再使用m3u8模式
再次搜索互联网后,我确认我终于找到了实时的m3u8描述
实时播放列表(滑动窗口)
对于实时会话,通过在创建新媒体文件并使之可用时从文件中删除媒体URI来更新索引文件。
重要:实时播放列表中不存在EXT-X-ENDLIST标记,这表示新的媒体文件将在可用时添加到索引文件中。
请参见清单3,获取示例实时播放列表,该示例将在会话开始时出现。
清单3在会话开始时的实时播放列表。
复制代码
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:10,
文件序列1.ts
#EXTINF:10,
文件序列2.ts
#EXTINF:10,
文件序列3.ts
#EXTINF:10,
文件序列4.ts
#EXTINF:10,
文件序列5.ts
复制代码
对于从播放列表文件中删除的每个媒体URI,EXT-X-MEDIA-SEQUENCE标签的值必须增加1。 媒体URI必须按照它们在播放列表中出现的顺序从播放列表文件中删除。 更新后的索引文件将移动窗口呈现为连续流。 这种类型的会话适用于连续广播。
使用新的媒体URI更新播放列表后,以下是同一播放列表:
清单4更新媒体URI后的实时播放列表。
复制代码
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:2
#EXTINF:10,
文件序列2.ts
#EXTINF:10,
文件序列3.ts
#EXTINF:10,
文件序列4.ts
#EXTINF:10,
文件序列5.ts
#EXTINF:10,
文件序列6.ts
复制代码
3.live m3u8更新规则
实时m3u8文件列表需要不断更新,更新规则为:
删除文件播放列表中的顶部文件(认为已播放)
不断更新EXT-X-MEDIA-SEQUENCE标签,以1递增
4.实验
编写一个小程序以生成实时m3u8进行测试
用法:
m3u8_gen.exe start_num list_count持续时间filename.m3u8 [prefix]
用法示例:
m3u8_gen.exe 1 3 10 live.m3u8 hls /
生成live.m3u8文件为
复制代码
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-TARGETDURATION:10
#EXTINF:10
hls / 1.ts
#EXTINF:10
hls / 2.ts
#EXTINF:10
hls / 3.ts
复制代码
编写BAT脚本每3秒更新一次live.m8u10文件
复制代码
@ ECHO OFF
f
|
输入电子邮件以获取惊喜
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷兰语
sq.fmuser.org ->阿尔巴尼亚人
ar.fmuser.org ->阿拉伯语
hy.fmuser.org - >亚美尼亚
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄罗斯语
bg.fmuser.org - >保加利亚
ca.fmuser.org ->加泰罗尼亚语
zh-CN.fmuser.org ->中文(简体)
zh-TW.fmuser.org - >中国(繁体)
hr.fmuser.org ->克罗地亚语
cs.fmuser.org ->捷克
da.fmuser.org ->丹麦语
nl.fmuser.org - >荷兰
et.fmuser.org ->爱沙尼亚语
tl.fmuser.org ->菲律宾
fi.fmuser.org ->芬兰语
fr.fmuser.org - >法国
gl.fmuser.org ->加利西亚语
ka.fmuser.org ->乔治亚
de.fmuser.org ->德语
el.fmuser.org - >希腊
ht.fmuser.org ->海地克里奥尔语
iw.fmuser.org ->希伯来语
hi.fmuser.org ->印地语
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰岛语
id.fmuser.org ->印尼语
ga.fmuser.org ->爱尔兰
it.fmuser.org - >意大利
ja.fmuser.org ->日语
ko.fmuser.org ->韩文
lv.fmuser.org ->拉脱维亚
lt.fmuser.org - >立陶宛
mk.fmuser.org ->马其顿语
ms.fmuser.org ->马来语
mt.fmuser.org ->马耳他语
no.fmuser.org - >挪威
fa.fmuser.org ->波斯语
pl.fmuser.org ->波兰语
pt.fmuser.org ->葡萄牙语
ro.fmuser.org - >罗马尼亚
ru.fmuser.org ->俄语
sr.fmuser.org ->塞尔维亚语
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亚
es.fmuser.org ->西班牙语
sw.fmuser.org ->斯瓦希里语
sv.fmuser.org ->瑞典语
th.fmuser.org - >泰国
tr.fmuser.org ->土耳其语
uk.fmuser.org ->乌克兰语
ur.fmuser.org ->乌尔都语
vi.fmuser.org - >越南
cy.fmuser.org ->威尔士语
yi.fmuser.org - >意第绪语
FMUSER更轻松地传输视频和音频!
联系我们
分类目录
订阅电子邮件