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 ->イディッシュ語
HLSとHttpLive Streamingは、Appleによって定義されたリアルタイムストリーミングのプロトコルです。 HLSは、HTTPプロトコルに基づいて実装されます。 送信内容は3つの部分で構成されます。8つはMXNUMXUXNUMX記述ファイルで、もうXNUMXつはTSメディアファイルです。
1.M3U8ファイル
メディアファイルは、一連のタグで構成されるテキストで記述されています。
#EXTM3U
#EXT-X-TARGETDURATION:5
#EXTINF:5、
./0.ts
#EXTINF:5、
./1.ts
#EXTM3U:各M3U8ファイルの最初の行はこのタグでなければなりません。
#EXT-X-TARGETDURATION:最大メディアセグメント時間の長さ(秒)を指定します。 #EXTINFで指定される時間の長さは、この最大値以下である必要があります。 この値はXNUMX回だけ表示できます。
#EXTINF:単一のメディアファイルの長さを記述します。 ./0.tsなどのメディアファイルが続きます
2.tsファイル
tsファイルはトランスポートストリームファイルで、メインのビデオコーディング形式はh264 / mpeg4、オーディオはacc / MP3です。
tsファイルは、tsレイヤーのトランスポートストリーム、pesレイヤーのPacket Elemental Stream、esレイヤーのElementaryStreamのXNUMXつのレイヤーに分かれています。 esレイヤーはオーディオおよびビデオデータであり、pesレイヤーはオーディオおよびビデオデータに追加されたタイムスタンプなどのデータフレーム記述情報です。 tsレイヤーは、pesレイヤーでのデータストリームの識別と送信に必要な情報を追加するためのものです。
注:詳細は以下のとおりです。
(1)tsレイヤーtsパケットサイズは188バイトに固定されており、tsレイヤーはtsヘッダー、適応フィールド、ペイロードの4つの部分に分かれています。 tsヘッダーは188バイトに固定されています。 適応フィールドは存在する場合と存在しない場合があり、その主な機能はXNUMXバイト未満のデータを入力することです。 ペイロードはpesデータです。
tsヘッダー
sync_byte 8b同期バイト、0x47に固定
transport_error_indicator 1b tsヘッダーのadaptフィールドの後に役に立たないバイト(通常は0)があることを示すトランスポートエラーインジケーター。このバイトは、adaptフィールドの長さでカウントされます。
payload_unit_start_indicator1b完全なデータパケットの開始時に1としてマークされるロードユニット開始インジケーター
transport_priority 1bトランスポート優先度、0は低優先度、1は高優先度、通常は0
pid 13bpid値
transport_scrambling_control 2bトランスポートスクランブリングコントロール、00は暗号化されていないことを意味します
Adaptation_field_control 2b適応フィールドを含めるかどうか、「00」は予約されています。 「01」は、適応フィールドがなく、ペイロードのみを意味します。 「10」は、適応フィールドのみを意味し、ペイロードは意味しません。 「11」は、適応がドメインとペイロードも含まれていることを意味します。
連続性カウンター4bカウンターを0からfに増やすと、開始値は必ずしも0になるとは限りませんが、連続している必要があります。
tsレイヤーのコンテンツはPID値によって識別され、メインコンテンツには、PATテーブル、PMTテーブル、オーディオストリーム、およびビデオストリームが含まれます。 tsストリームを解析するには、最初にPATテーブルを見つける必要があります。PATが見つかる限り、PMTを見つけることができ、次にオーディオストリームとビデオストリームを見つけることができます。 PATテーブルのPID値は0に固定されています。ユーザーはいつでもtsストリームに参加できるため、PATテーブルとPMTテーブルをtsストリームに定期的に挿入する必要があります。この間隔は比較的小さく、通常は数回ごとです。 PATおよびPMTを追加するためのビデオフレーム。 PATテーブルとPMTテーブルが必要であり、SDT(サービス記述テーブル)などの他のテーブルも追加できますが、PATとPMTがあれば、hlsストリームを再生できます。
PATテーブル:その主な機能は、PMTテーブルのPID値を示すことです。
PMTテーブル:その主な機能は、オーディオおよびビデオストリームのPID値を指定することです。
オーディオストリーム/ビデオストリーム:オーディオおよびビデオコンテンツを伝送します。
適応
Adaptation_field_length 1B適応フィールドの長さ、遅れているバイト数
フラグ1Bは、PCRを示す場合は0x50、PCRを含まない場合は0x40を取ります
PCR 5Bプログラムクロックリファレンス、プログラムクロックリファレンス。エンコーダと整合性のあるシステムタイミングクロックSTC(システムタイムクロック)を回復するために使用されます。
stuffing_bytes xBスタッフィングバイト、値は0xff
適応領域の長さには、伝送エラーインジケータによって識別される0バイトが含まれるものとします。 pcrはプログラムクロックリファレンス、pcr、dts、ptsはすべて同じシステムクロックのサンプル値、pcrはインクリメンタルであるため、dts値として設定でき、オーディオデータはpcrを必要としません。 フィールドがない場合、ipadは再生できますが、vlcは再生できません。 tsストリームをパックする場合、PATテーブルとPMTテーブルには適応フィールドがありません。 長さが足りない場合は、XNUMXxffと入力してください。 ビデオストリームとオーディオストリームの両方で、適応フィールドを追加する必要があります。これは通常、フレームの最初のtsパケットと最後のtsパケットに追加され、中央のtsパケットは追加されません。
PAT形式
table_id 8bPATテーブルは0x00に固定されています
section_syntax_indicator1bは1に固定されています
ゼロ1bは0に固定されています
予約済みの2bは11に固定されています
section_length12b次のデータの長さ
transport_stream_id 16bトランスポートストリームID、0x0001として修正
予約済みの2bは11に固定されています
version_number 5bバージョン番号。00000に固定されています。PATが変更されると、バージョン番号が1増加します。
current_next_indicator 1bは1に固定されており、このPATテーブルを使用できることを示しています。0の場合は、次のPATテーブルを待ちます。
section_number8bは0x00に固定されています
last_section_number8bは0x00に固定されています
ループを開始
program_number 16bプログラム番号が0x0000の場合、これはNITであることを意味し、プログラム番号が0x0001の場合、これはPMTであることを意味します。
予約済みの3bは111に固定されています
PID13bプログラム番号の内容に対応するPID値
ループの終了
CRC32b前のデータのCRC32チェックコード
PMTフォーマット
table_id 8bPMTテーブルには任意の値0x02があります
section_syntax_indicator1bは1に固定されています
ゼロ1bは0に固定されています
予約済みの2bは11に固定されています
section_length12b次のデータの長さ
program_number 16bチャネル番号。これは、現在のPMTに関連付けられているチャネルを意味し、値は0x0001です。
予約済みの2bは11に固定されています
version_number 5bバージョン番号。00000に固定されています。PATが変更されると、バージョン番号が1増加します。
current_next_indicator1bは1に固定されています
section_number8bは0x00に固定されています
last_section_number8bは0x00に固定されています
予約済みの3bは111に固定されています
PCR_PID 13b PCR(プログラム基準クロック)が配置されているTSパケットのPID。ビデオPIDとして指定されます。
予約済みの4bは1111に固定されています
program_info_length 12b 0x000として指定されたプログラム記述情報は、
ループを開始
stream_type 8bストリームタイプ、マークはビデオまたはオーディオまたはその他のデータ、h.264エンコーディングは0x1bに対応、aacエンコーディングは0x0fに対応、mp3エンコーディングは0x03に対応
予約済みの3bは111に固定されています
elementary_PID 13bstream_typeに対応するPID
予約済みの4bは1111に固定されています
ES_info_length 12b 0x000として指定された説明情報は、
ループの終了
CRC32b前のデータのCRC32チェックコード
(2)ペス層
pesレイヤーは、タイムスタンプやその他の情報を各ビデオ/オーディオフレームに追加します。 pesパッケージには多くのコンテンツが含まれており、最も一般的に使用されるものだけを残しています。
pes開始コード3B開始コード、0x000001に修正
ストリームID1Bオーディオ値(0xc0-0xdf)、通常は0xc0
ビデオ値(0xe0-0xef)、通常は0xe0
pesパケット長2B背後のpesデータの長さ、0は無制限の長さを意味し、
ビデオデータの長さのみが0xffffを超えます
フラグ1Bは通常、値0x80を取ります。これは、データが暗号化されておらず、優先順位がなく、データがバックアップされていることを意味します。
フラグ1Bの値0x80はポイントのみを意味し、値0xc0はポイントとdtsを意味します
pesデータ長1B次のデータの長さ。値は5または10です。
pts 5B33ビット値
dts 5B33ビット値
ptsは表示タイムスタンプ、dtsはデコードタイムスタンプです。 ビデオデータには両方のタイムスタンプが必要です。 オーディオデータのptsとdtsは同じであるため、ptsのみが必要です。 Bフレームによって引き起こされるXNUMXつのタイムスタンプ、ptsとdtsがあります。 IフレームとPフレームのポイントはdtsと同じです。 ビデオにBフレームがない場合、ptsは常にdtsと同じになります。 ファイルからビデオフレームを順番に読み取ります。抽出されたフレームのシーケンスは、dtsシーケンスと同じです。 dtsアルゴリズムは比較的単純で、初期値+増分で十分であり、pts計算はより複雑であり、オフセットをdtsに追加する必要があります。
オーディオペスにはptsのみがあり(dtsと同じ)、ビデオのIフレームとPフレームには両方のタイムスタンプが必要であり、ビデオBフレームにはpts(dtsと同じ)のみが必要です。 ptsとdtsをパックするには、ビデオフレームタイプを知っている必要がありますが、コンテナ形式でフレームタイプを判断することはできません。 フレームタイプを取得するには、h.264コンテンツを解析する必要があります。
たとえば、次の
IPBBBP
読み順:1 2 3 4 5 6
dtsの順序:1 2 3 4 5 6
ptsオーダー:1 5 3 2 4 6
オンデマンドビデオdtsアルゴリズム:
dts =初期値+90000 / video_frame_rate、初期値は任意に指定できますが、0をとらないことをお勧めします。video_frame_rateは23、30などのフレームレートです。
ptsとdtsはタイムスケールに基づいており、1s = 90000タイムスケール、90000フレームはXNUMX / video_frame_rateタイムスケールである必要があります。
XNUMXフレームのタイムスケールをサンプリング周波数で割ると、XNUMXフレームの再生時間に変換できます。
オンデマンドオーディオdtsアルゴリズム:
dts =初期値+(90000 * audio_samples_per_frame)/ audio_sample_rate、audio_samples_per_frameの値はコーデックに関連し、aac値は1024、mp3値は1158、audio_sample_rateは24000、41000などのサンプリングレートです。AACはのフレームをデコードします。チャネルあたり1024サンプル。これは、フレームの継続時間が1024 / sample_rate秒であることを意味します。 したがって、各フレームのタイムスタンプは0、1024 / sample_rate、...、1024 * n / sample_rate秒です。
ライブビデオのdtsとptsは、ライブデータストリームの時間を直接使用する必要があり、数式で計算しないでください。
(3)esレイヤー
esレイヤーはオーディオとビデオのデータを参照します。h.264ビデオとaacオーディオのみを紹介します。
h.264ビデオ:
h.264データをパックするには、ビデオデータにnalu(ネットワーク抽象化レイヤーユニット)を追加する必要があります。 naluには、naluヘッダーとnaluタイプが含まれます。 naluヘッダーは0x00000001(フレームの開始)または0x000001(フレーム内)に固定されています。 h.264のデータはスライスで構成され、スライスの内容には、video、sps、ppsなどが含まれます。naluタイプは、後続のh.264データの内容を決定します。
F 1b forbidden_zero_bit、h.264は、0でなければならないと規定しています
NRI 2b nal_ref_idc、値0〜3は、このnaluの重要性を示します。Iフレーム、sps、ppsは通常3、Pフレームは通常2、Bフレームは通常0です。
タイプ5bは以下の表を参照してください
nal_unit_typeの説明
0未使用
1非IDRイメージ、IDRはキーフレームを指します
2スライスパーティションA
3スライスパーティションB
|
サプライズを取得するには、メールアドレスを入力してください
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はビデオとオーディオをより簡単に送信します!
お問い合わせ
カテゴリー
ニュースレター