FMUSER Wirlessはビデオとオーディオをより簡単に送信します!
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トランスポートプロトコル
このうち、XNUMX点目とXNUMX点目については前回の記事でも触れましたが、最後の点は既存のHTTPサーバーを利用できるということで、XNUMX点目とXNUMX点目の実装が鍵となります。
(1) プログラムの枠組みと実施
上記の分析を通じて、HLS ライブ エンコーダーのロジックとプロセスは基本的に明確です。オーディオとビデオのコーディング スレッドをそれぞれ開始し、DirectShow (またはその他) テクノロジを通じてオーディオとビデオの取得を実現し、ビデオとビデオに対してそれぞれ libx264 と libfaac を呼び出します。オーディオコーディング。 3 つのエンコード スレッドがオーディオ データとビデオ データをリアルタイムでエンコードした後、カスタマイズされたパーティション戦略に従って、それを mpeg-ts 形式のセグメント ファイルに保存します。 セグメント ファイルが保存されると、m8uXNUMX インデックス ファイルが更新されます。 以下の図に示すように:
上の図では、hlsliveencoder はビデオおよびオーディオ データを受信した後、まず現在のパーティションを終了するかどうかを判断し、TS パーティションの連続生成を継続するために新しいパーティションを作成する必要があります。 プレーヤーによるデコードの失敗を防ぐために、新しい断片化はキーフレームから開始する必要があることに注意してください。 コアコードは次のとおりです。
tsmuxer のインターフェイスも比較的シンプルです。
(2) HLS セグメント生成戦略と m3u8
①セグメンテーション戦略
HLS のセグメンテーション戦略は、基本的に 10 秒ごとに分割することを推奨します。 もちろん、実際の分割の長さに応じて特定の時間をマークする必要があります。
一般的に、キャッシュなどの理由から、最新の XNUMX つのフラグメント アドレスがインデックス ファイルに保持され、「スライディング ウィンドウ」の形式で更新されます。
②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 Wirlessはビデオとオーディオをより簡単に送信します!
お問い合わせ
カテゴリー
ニュースレター