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 - >意第绪语
几天前,我花了一些时间研究HTTP实时流(HLS)技术,并实现了用C ++编写的HLS编码器hlsliveencoder。 其功能是捕获摄像机和麦克风,实时H.264视频编码和AAC音频编码,并根据HLS协议规范,生成分段的标准TS文件和m3u8索引文件。 通过我的hlsliveencoder和第三方HTTP服务器(例如nginx),我们成功实现了HTTP的实时流传输并通过了iPhone上的测试。 我将在这里写下一些收获。
1. HLS技术分析
HTTP实时流(HLS)是基于Apple Inc.实现的HTTP的流媒体传输协议,可以实现实时和按需流媒体。 它主要用于IOS系统中,为IOS设备(例如iPhone和iPad)提供音频和视频实时和按需解决方案。 按需HLS基本上是按需分配的常见分段HTTP。 不同之处在于它的细分非常小。 为了按需实现HLS,关键是分割媒体文件。 当前,有许多可以使用的开源工具。 我不会在这里讨论它,而只是谈论HLS直播技术。
与普通的实时流协议(如RTMP协议,RTSP协议,MMS协议等)相比,HLS实时流的最大区别是实时客户端无法获得完整的数据流。 HLS协议在服务器端将实时数据流存储为连续,短期和长媒体文件(mpeg-ts格式),而客户端则不断下载并播放这些小文件,因为服务器端始终会从中生成新的小文件最新的实时数据,以便客户端只需要播放从服务器获取的文件即可实现实时。 可以看出,HLS基本上是通过VOD技术实现直播。 由于数据是通过HTTP协议传输的,因此无需考虑防火墙或代理的问题,并且文件分割的时间非常短。 客户端可以快速选择并切换编码率,以适应不同带宽条件下的回放。 但是,由于HLS的技术特性,其延迟总是比普通的实时流协议高。
根据以上了解,要实现HTTP实时流传输,我们需要研究并实现以下关键技术。
(1)收集视频源和音频源的数据
(2)原始数据由H264和AAC编码
(3)视频和音频数据打包为mpeg-ts数据包
(4)HLS分割生成策略和m3u8索引文件
2. HTTP传输协议
其中,第一点和第二点已在我的上一篇文章中提到,最后一点是我们可以使用现有的HTTP服务器,因此第三点和第四点的实现是关键。
(1)计划框架与实施
通过以上分析,HLS实时编码器的逻辑和过程基本清晰:分别启动音频和视频编码线程,通过DirectShow(或其他)技术实现音频和视频采集,然后分别针对视频和视频调用libx264和libfaac。音频编码。 在两个编码线程对音频和视频数据进行实时编码之后,它们根据定制的分区策略将其存储在mpeg-ts格式的段文件中。 存储段文件时,将更新m3u8索引文件。 如下图所示:
在上图中,hlsliveencoder在收到视频和音频数据之后,需要首先确定当前分区是否应该结束,并创建一个新分区以继续连续生成TS分区。 应当注意,新的片段应该从关键帧开始,以防止播放器解码失败。 核心代码如下:
tsmuxer的界面也相对简单。
(2)HLS段生成策略和m3u8
①细分策略
基本上建议将HLS的分割策略每10秒分割一次。 当然,具体时间应根据实际的分时长短进行标记
一般而言,出于缓存和其他原因,最新的三个片段地址将保留在索引文件中,并以“滑动窗口”的形式进行更新。
②m3u8文件的介绍
M3u8是HTTP实时流的索引文件。 M3u8可以认为是。 M3U格式文件基本上是,区别在于m3u8文件使用UTF-8字符编码。
复制代码
#Extm3u M3U文件头,必须放在第一行
#ext-x-media-sequence的第一个TS段的序列号
#Ext-x-targetduration每个TS段的最大持续时间
#ext-x-allow-cache是否允许缓存
#ext-x-endlist m3u8文件的结尾
#Extinf额外信息,分割ts的信息,例如持续时间,带宽等
|
输入电子邮件以获取惊喜
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更轻松地传输视频和音频!
联系我们
分类目录
订阅电子邮件