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 - >意第绪语
背景
MP4是我们常见的视频格式,通常在我们播放服务器视频时,它直接是所请求的MP4视频源。 但是实际上,这不好。 MP4头文件[ftyp + moov]很大,因此初始播放需要下载完整的头文件并进行分析,然后下载一定长度的可播放视频片段进行播放。 另外,随着视频大小的增加,头文件将继续增长,并且初始播放时间将更长。 针对这种情况,需要一种可以加快视频初始分析速度的方法。 HLS是Apple为解决此问题而提出的解决方案。
HLS
HLS是HTTP Live Streaming的缩写。 它是Apple提出的基于HTTP的流媒体网络传输协议。 它可以同时支持实时和点播,以及多分辨率,音视频双轨,字幕等功能。 其原理是将整个视频分成多个小视频,并通过将这些片段拼接在一起来形成完整的播放。
HLS被广泛用于移动终端。 当前支持HLS协议的客户端包括:
iOS 3.0及更高版本,AVPlayer原生支持HLS
Android 3.0及以上
Adobe Flash Player 11.0及更高版本
其一般原则是:
1.收集音频和视频
2.在服务器上编码音频和视频
3.编码后,将其以MPEG-2传输流的形式移交给流分段器
4.切片器创建一个索引文件和一个ts播放列表,该索引文件用于指示音频和视频的位置,ts是一个真正的多媒体剪辑
5.将上一步的资源放在HTTP服务器上
6.客户端请求索引文件进行播放,可以通过索引文件找到播放内容
M3U8
实现HLS的关键步骤是上面的第四步,即索引文件和ts播放列表的组织。 在此使用M3U8格式。 M3U8是M3U的Unicode版本,8表示使用UTF-8编码,并且M3U和M3U8都是多媒体列表的文件格式。
M3U8格式说明
有时我们可能需要手动修改M3U8文件的内容以进行测试或在某些特殊情况下,因此我们需要对它的格式有一定的了解。 此格式的定义写在RFC 8216文档中。 以下是一些注意事项:
M3U8文件必须以UTF-8编码,并且不能使用字节顺序标记(BOM)字节顺序,并且不能包含utf-8控制字符(U + 0000〜U_001F和U + 007F〜u + 009F)
M3U8文件内容的每一行都是空白行,URI或以#开头的字符串,并且不能出现空白字符。
内置标签都是以#EXT开头的所有字符串,并且区分大小写。
URI是内容路径,可以是相对路径或绝对路径
主M3U8列表文件
主M3U8索引文件通常用于指定多个索引源。 让我们首先分析主m3u8文件hls_vod_mvp.m3u8的内容,它的头是这样的
标题格式
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-INDEPENDENT-SEGMENTS复制代码
#EXTM3U表示文件为M3U格式,所有M3U格式的文件都应将内容放在第一行。
#EXT-X-VERSIOn表示播放列表的兼容版本,当前为7。
#EXT-X-INDEPENDENT-SEGMENTS此标记指示媒体段中的所有媒体样本都可以独立解码,而无需依赖其他媒体段信息。
字幕格式
下面的内容是一些字幕,字幕的内容不是必需的。
#EXT-X-MEDIA:TYPE = SUBTITLES,GROUP-ID =“ subs”,NAME =“ English”,DEFAULT = YES,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ eng”,URI =“ subtitles / eng / prog_index.m3u8”
#EXT-X-MEDIA:TYPE = SUBTITLES,GROUP-ID =“ subsC”,NAME =“ English”,DEFAULT = YES,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ eng”,URI =“ subtitles / engc / prog_index.m3u8”
#EXT-X-MEDIA:TYPE = SUBTITLES,GROUP-ID =“ subs”,NAME =“ Japanese”,DEFAULT = YES,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ jpn”,URI =“ subtitles / jpn / prog_index.m3u8”
#EXT-X-MEDIA:TYPE = SUBTITLES,GROUP-ID =“ subsC”,NAME =“ Japanese”,DEFAULT = YES,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ jpn”,URI =“ subtitles / jpnc / prog_index.m3u8”
#EXT-X-MEDIA:TYPE = SUBTITLES,GROUP-ID =“ subs”,NAME =“ Chinese”,DEFAULT = YES,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ zho”,URI =“ subtitles / zho / prog_index.m3u8”
#EXT-X-MEDIA:TYPE = SUBTITLES,GROUP-ID =“ subsC”,NAME =“ Chinese”,DEFAULT = YES,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ zho”,URI =“ subtitles / zhoc / prog_index.m3u8“复制代码
#EXT-X-MEDIA用于指定相同内容的多语言媒体列表资源。
TYPE是资源类型,可选内容是:AUDIO,VIDEO,SUBTITLES,CLOSED-CAPTIONS。
上面的内容设置了TYPE = SUBTITLES,这是字幕类型。
GROUP-ID是多语言翻译所属的组,并且是必需的参数
NAME是翻译流的可读描述信息,该值对应于AVMediaSelectionOption的displayName。
DEFAULT,AUTOSELECT,FORCED是三个BOOL值,对应于在缺少必要信息时是否默认选择转换流的情况。 当用户不显示设置时,播放流。 FORCED仅对字幕类型有效,并用于标记当前自动选择的翻译流。 。
LANGUAGE用于指定语言类型,该语言类型是根据[ISO 639语言代码](https://www.w3.org/WAI/ER/WD-AERT/iso639.htm “ ISO 639语言代码”)标准。 当系统默认播放器选择字幕时,根据此值设置显示的字幕列表的名称。
URI是资源的位置信息,它对应于带有字幕的M3U8文件。 subtitles / eng / prog_index.m3u8是相对路径,
通过以上信息,我们可以将上述内容的含义分析为:当前视频支持三种字幕:英语,日语和中文。 但是每种语言都有两个EXT-X-MEDIA消息。 它们之间的区别是分组,一个分组在subs中,另一个分组在subsC中。 为什么会有两组? 稍后再说。
视频格式
再次向下看,以获得视频内容的索引:
#EXT-X-STREAM-INF:BANDWIDTH=827299,AVERAGE-BANDWIDTH=747464,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=29.970,AUDIO="program_audio",SUBTITLES=" subs"
0640 / 0640.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=360849,AVERAGE-BANDWIDTH=320932,CODECS="avc1.64001f",RESOLUTION=640x360,URI="0640/0640_I-Frame.m3u8"Copy code
EXT-X-STREAM-INF:此属性指定备份源,即视频播放路径和一些视频信息。 以下是相应内容的配置:BANDWIDTH是峰值比特率,827299是827299bit / s,这是最高峰值时间,每秒消耗101KB的流量。
AVERAGE-BANDWIDTH是平均比特率747464
CODECS是编码信息,avc1.64001f,mp4a.40.2,avc表示h264编码格式,以下64001f是用十六进制表示的编码参数,64、00、1f分别表示三个不同的参数值。 mp4a是音频编码格式,下面的40.2表示音频编码参数。
分辨率是视频分辨率。 当前的视频源分辨率为640x360。
FRAME-RATE是最大帧速率,29.970表示当前回放的最大帧速率是每秒29.970帧。
AUDIO是音频组,program_audio是相应音频组的名称。
SUBTITLES表示相应的字幕组,subs是相应字幕组的名称。 上述字幕信息具有GROUP-ID,并且该值与之相对应。
URI是内容路径,0640 / 0640.m3u8对应于视频源的m3u8文件路径。 这可以在数据包捕获信息中看到。
EXT-X-STREAM-INF下面是EXT-XI-FRAME-STREAM-INF,它表示播放列表文件中包含的多媒体资源的I帧(关键帧)。 因为I帧只是图片,所以它不包含音频内容,其余参数与视频内容格式一致。
之后,会有对应于不同分辨率1920x1080、1280x720、960x540、480x270的视频源。 由于HLS会根据网络情况自动切换分辨率,因此通常会准备多种分辨率供选择。 根据对捕获数据的分析,播放的第一段为640分辨率,第二段至第8段为480分辨率,然后切换到640分辨率。
音频格式
往下看是相应音频的索引
#EXT-X-MEDIA:TYPE = AUDIO,GROUP-ID =“ program_audio”,LANGUAGE =“ eng”,NAME =“备用音频”,AUTOSELECT = YES,DEFAULT = YES,URI =“ audio1 / audio1.m3u8”复制码
#EXT-X-MEDIA出现在上方,但未提及多种语言的列表。
TYPE = AUDIO,这次是音频。
GROUP-ID是组ID,对应于EXT-X-STREAM-INF中的AUDIO内容。
URI = audio1 / audio1.m3u8对应于音频路径。
不同编码格式的替代来源
在主M3U8文件中,我们还可以看到640分辨率的视频源,它与上述640分辨率不同。 它的内容是这样的:
#EXT-X-STREAM-INF:BANDWIDTH=1922391,AVERAGE-BANDWIDTH=1276855,VIDEO-RANGE=SDR,CODECS="hvc1.2.4.H150.B0,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=29.970 ,AUDIO="program_audio_0",SUBTITLES="subsC"
0640c / prog_index.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1922391,AVERAGE-BANDWIDTH=1276855,CODECS="hvc1.2.4.H150.B0",RESOLUTION=640x360,URI="0640c/iframe_index.m3u8"
#EXT-X-MEDIA:TYPE = AUDIO,GROUP-ID =“ program_audio_0”,LANGUAGE =“ eng”,NAME =“备用音频”,AUTOSELECT = YES,DEFAULT = YES,URI =“ audioc / prog_index.m3u8”复制码
CODECS编码格式为hvc1.2.4.H150.B0,mp4a.40.2,音频编码格式未更改,但视频编码格式已更改。 hvc1是HEVC(H265)编码格式之一。 它是Apple推出的新一代视频编码格式。 由于兼容性问题,许多客户端无法解析此格式,因此它不是很流行。 出现这种格式的视频源。这里应该是备份。 比较具有相同分辨率的两个内容,可以发现hvc1格式的比特率高于avc1格式的比特率,这表明在相同分辨率下hvc1的内容更大,而avc1的压缩率更高。
对应于hvc1格式的视频源,其字幕内容分组和音频内容分组也已更改,这就是上述字幕具有相同语言的两个副本,并且它们分别对应于avc1和hvc1格式的视频源的原因。
这是M3U8的主要列表。 此内容的音频和视频将分别处理,但也可以合并。
包含媒体信息的M3u8文件
以文件0640.m3u8为例
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:6.006,
0640_00001.ts
#EXTINF:6.006,
0640_00002.ts
#EXTINF:6.006,
0640_00003.ts
....
#EXT-X-ENDLIST复制代码
#EXTM3U和#EXT-X-VERSION分别是M3U文件头和兼容版本号。 此格式是早期版本,因此版本号低于主文件。
EXT-X-TARGETDURATION表示每个播放段的最大持续时间,7表示7秒,此目录中的段不能超过7s。
EXT-X-MEDIA-SEQUENCE表示播放列表第一段的序列号,而1表示播放段从1开始。
#EXTINF表示段的持续时间,6.006表示当前段为6.006s。 总视频时长信息是通过累加该值而获得的。
0640_00001.ts是剪辑的相对路径。 ts文件代表一段视频或音频,并且可以是ts,mp4,aac和其他格式。 因为已指定从1开始
|
输入电子邮件以获取惊喜
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更轻松地传输视频和音频!
联系我们
分类目录
订阅电子邮件