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更輕鬆地傳輸視頻和音頻!
聯絡我們
分類
訂閱成為第一個收到我們最新消息的人。