初心者のために、ちょうどオーディオとビデオの学習に接触すると、必然的にさまざまな用語に遭遇するでしょう、最初は私も混乱していた、と今では少しずつ接触蓄積することで、基本的な理解の形成。この記事では、深く、詳細な知識を持っていない、オーディオとビデオだけでなく、それらの違いと接続に関わる基本的な概念のいくつかを記録することを目指しています。初心者はすぐにオーディオとビデオの開発に精通するのに役立ちます。
.
オーディオとビデオの処理の流れは、次の図のように単純化できます:
- 1. mp4ファイルとして保存されたビデオを録画するなど、カプセル化を通してファイルとして保存されます。
- 2.は、直接ストリーミングメディアサーバーにプッシュされ、受信側は、ライブなどのストリーミングメディアサーバーからデータを引き出すことができます。
図中の概念を以下に説明します:
キャプチャ
キャプチャーとは、マイクやカメラなどを通して音声データや映像データを取得することです。
エンコードとデコード
収集したデータは大きく冗長であるため、符号化する必要があり、符号化とは圧縮のことです。エンコードは圧縮であり、デコードは伸長です。多くの場合、符号化と復号化を合わせて符号化・復号化と呼びます。符号化と復号化には、しばしばソフト符号化とハード符号化の問題が含まれます。
- ソフトコーデック:符号化・復号化はCPUで実行されるソフトウェアプログラムで行われ、符号化・復号化後の性能は低く、品質は高い。
- ハードコーデック:GPUなどのハードウェアで符号化・復号化を行い、性能が高く、符号化・復号化後の品質が低い。
カプセル化・カプセル化解除、コンテナ
カプセル化は多重化、カプセル化は多重解除とも呼ばれます。つまり、ビデオファイルには2つのデータストリーム、1つのビデオストリームと1つのオーディオストリームが含まれています。映像データと音声データをあるフォーマットでエンコードし、圧縮してファイルにすることをカプセル化といいます。これらのデータを伝送するカプセル化形式を通常コンテナと呼びます。例えば、mp4コンテナは、H264ビデオストリームとAACオーディオストリームを持っています。逆に、メディアファイルまたはメディアストリームからビデオデータとオーディオデータを削除するプロセスは、デカプセル化またはデマルチプレクスと呼ばれます。
レンダリング
デコードされたビデオデータをイメージに縮小して表示するプロセス。
.
実際、オーディオとビデオの開発は、オーディオとビデオの処理だけでなく、イメージ処理にも関係しています。以下に、入門レベルのイメージ関連の概念をいくつか紹介します。
YUV とRGB
YUVとRGBはカラーモデルです。 カラーモデルとは?色を一連の数値で記述する抽象的な数学的モデルで、一般的にRGB、YUV、CMYKとして知られています。例えば、RGBモデルは赤、緑、青の3つの要素で色を表現しますが、YUVモデルは輝度とクロミナンスを使用します。
色空間は色の範囲として定義されますが、YUVとRGBは色の範囲を表しません。開発者にとっては、YUVとRGBの違いは色の表現方法であることを知っていれば十分です。
ピクセルフォーマット
ピクセルフォーマットは、ピクセルデータを保存するために使用されるフォーマットを記述し、ピクセルがメモリ内でどのようにエンコードされるかを定義します。イメージ保存プロセスでは、YUVとRGBなどは異なるピクセル形式でイメージを保存します。そのため、YUVとRGBという用語は、ピクセル形式を指すのに使われることもあります。
平たく言えば、イメージは多数のピクセルから構成されており、各ピクセルには色情報が含まれています。例えば、色情報を輝度とクロミナンスに分離する方法はYUVであり、色情報を赤、緑、青に分離する方法はRGBです。本来、1ピクセルの保存には3バイト、つまりYUVまたはRGBの成分に対して1バイトが必要ですが、実際にはイメージデータのサイズを小さくするために、YUVやRGBで保存するデータ量を減らすさまざまな方法があり、その結果、さまざまなYUVやRGBのピクセルフォーマットが存在します。
YUVxxx
YUVはサンプリングによってデータ量を削減します。
人間の目は輝度よりも色度に対して鈍感です。この原理を利用すれば、色度情報を少し減らしても人間の目では検出できません。
例えば、一般的なYUV444、YUV422、YUV420は、YUVの3つの成分のサンプリングが異なる結果、異なるピクセルフォーマットになっています。
- YUV444は、グループとして4つの4つのピクセルを取り、4つのY成分ごとに4つのUV成分を取り、すなわち、フルサンプリング、24bppのサイズ、すなわち、3バイト* 4ピクセル* 8ビット/ 4ピクセル= 24bps。
- YUV422、グループとして4つの4つのピクセルを取り、4つのY成分ごとに2つのUV成分を取り、サイズは16bpp、フルサンプリングの2/3です。
- YUV420、4つの4ピクセルのグループ、4つのY成分ごとに1つのUV成分、サイズは12bpp、フルサンプルの1/2
ストライド
現在、CPUは32ビットまたは64ビットですので、一度4バイトまたは8バイトである読み出し、4バイトまたは8バイトが整列されていない場合、それは追加の作業を必要とし、より多くの時間がかかるので、時にはデータの一部を増加させ、メモリの整列は、それが4、8の倍数に達するように。
ストライドのアプリケーションは、メモリ整列を達成するために、読み取り時間を短縮し、効率を向上させることです。ストライドは、イメージの幅以上のメモリ整列長であるイメージ内のイメージデータの行が占有するメモリ空間の長さです。
メモリフォーマット
YUVは、YUVの3つのコンポーネントの格納順序に従って、3つのフォーマットで格納することができます:
- プレーナー・フォーマット(3プレーナー・フォーマットとも呼ばれ、YUVの3つの成分が順番に格納され、1つのプレーンに1つの成分が格納されます)。
- セミプレーナー(Semi-Planar)、つまり2つのプレーンがあり、1つはY用、もう2つはUV用。
- Packed Packedフォーマット、つまりプレーンは1つだけで、すべてのルミナンスとクロミナンスのデータが絡み合っています。
YU12
- 4:2:0:すなわち、4つのピクセルを1つのグループとし、Y成分が4つ、UV成分が1つ。1コンポーネントは1バイトなので、6 * 8ビット / 4 = 12ビット/ピクセル
- 12 bps
- 3プレーナー
Y | Y | Y | Y |
U | U | ||
V | U U V |
メモリのアライメントを4バイト、ピクセルの幅と高さを4 * 2とすると、ストライドは幅の4の倍数となります。
- Yプレーンの幅は4、高さは2、ストライドは4。
- Uプレーンの幅は2、高さは1、ストライドは4。
- V平面の幅は2、高さは1、ストライドは4。
YV12
YU12と似ていますが、UVプレーンの順番が変わります。
- 4:2:0:つまり4つのピクセルが1つのグループとなり、4つのYコンポーネントがUVコンポーネントのグループを構成。1コンポーネントは1バイトなので、6 * 8bits / 4 = 12 Bits per Pixel。
- 12 bps
- 3プレーナー
Y | Y | Y | Y |
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY | V | ||
U | V |
メモリのアライメントを4バイト、ピクセルの幅と高さを4 * 2とすると、ストライドは幅の4の倍数になります。
- Yプレーンの幅は4、高さは2、ストライドは4。
- Vプレーンの幅は2、高さは1、ストライドは4。
- U平面の幅は2、高さは1、ストライドは4。
NV12
- 4:2:0:すなわち、4つのピクセルのグループで、4つのY成分と合計1つのUV成分。1成分あたり1バイトなので、6 * 8ビット / 4 = 12ビット/ピクセル
- 12 bps
- 2 Planars、Y成分とUV成分を格納する2つのプレーン。UV成分は1プレーンを共有し、U、V、U、Vの順にインターリーブされます。4つのY成分がUV成分のセットを共有。
Y | Y | Y | Y |
U | V | U | V |
メモリのアライメントを4バイト、ピクセルの幅と高さを4 * 2とすると、ストライドは幅の4の倍数になります。
- Yプレーンの幅は4、高さは2、ストライドは4。
- UVプレーンの幅は4、高さは1、ストライドは4。
NV12は、iOSカメラが直接出力できる2つのビデオフレームフォーマットのうちの1つで、もう1つはBGRA32です。
NV21
- 4:2:0:つまり、4つのピクセルのグループで、4つのYコンポーネントと合計1つのUVコンポーネントを持ちます。1つのコンポーネントは1バイトなので、6 * 8ビット / 4 = 12ビット/ピクセル
- 12 bps
- 2 Planars、Y成分とUV成分を格納する2つのプレーン。UV成分は1プレーンを共有し、V、U、V、Uの順にインターリーブされます。4つのY成分がUV成分のセットを共有。
Y | Y | Y | Y |
V | U | V | V |
メモリのアライメントを4バイト、ピクセルの幅と高さを4 * 2とすると、ストライドは幅の4の倍数になります。
- Yプレーンの幅は4、高さは2、ストライドは4。
- VUプレーンの幅は4、高さは1、ストライドは4。
= x 時間/8
RGBxxx
RGBは、使用されるビット数の削減です。 例えば、一般的なRGB888、RGB565は、ストレージ全体のビット数を減らすことによって、ピクセルのストレージサイズを小さくすることです。
- RGB24、すなわちRGB888は、各成分に8ビットを使用し、サイズは24bppです。
- RGB565は、R成分が5ビット、G成分が6ビット、B成分が5ビットで、サイズは16bpp。
- RGBA、すなわち元のRGB成分にAの透明度を追加したもので、サイズは32bpp。
JPEG FLVの形式は、PNG、BMPなどと同じです。
YUV420形式の800wピクセルのデータサイズは12Mです。異なる圧縮方法は、異なるイメージ形式を生成し、通常、このプロセスは、エンコードと呼ばれ、JPEGにエンコードされたYUVデータは、YUVデータがJPEGのイメージ圧縮規格に従って圧縮されることを意味します。JPEGは、YUVデータがJPEGのイメージ圧縮標準に従って圧縮されることを意味します。
元のデータを圧縮することを符号化、圧縮されたデータを縮小することを復号化とも呼び、イメージや動画の処理に関わる符号化と復号化は、実際には元のデータの圧縮と圧縮されたデータの縮小です。符号化と復号化のプロセスは、多くの場合、対応するコーデックによって行われ、異なるコーデックは、JPEGコーデックは、JPEG圧縮アルゴリズムを実装しているように、異なる圧縮および削減アルゴリズムを実装しています。
JPEG
JPGとしても知られるJPEGは、最も広く使用されているイメージフォーマットの1つです。 これは、人間の目には見えにくいイメージの色を除去する特別な非可逆圧縮アルゴリズムを使用しています。
PNG
PNG:LZ77から派生したアルゴリズムに基づく可逆データ圧縮を使用します。イメージのエッジや背景がより滑らかに見える透明効果をサポートしています。
BMP
BMP:Windowsの標準的なビットマップ形式で、非圧縮、一般的に大きなイメージファイルです。
H264 別名:MPEG-4,AVC H265 別名:MPEG-H, HEVC
III. オーディオ
音声データ
(1) 音声データの成り立ち
音は、実際には音波の一種であり、話すことを含め、常に音波を生成しているので、波の一種であるため、グラフ上にその波形を描くことができ、波形は、いくつかの重要なパラメータに対応しています:振幅、つまり、音に反映される波形の高さ、つまり、音が大きいほど、振幅が大きく、波形のピークが高く、また、周波数があり、波形のピーク間の距離に対応し、周波数が近いほど高く、音のピッチも高いことを示しています。周波数が近いほど高い、つまり音の高さも高い。
音声を扱う場合、データ処理は音声に対して直接行われるため、音声をデジタル化する必要もあり、一般的にデジタル化、計算などを行った後、再生するまでの流れを簡単にまとめると以下のようになります。
重要なのはアナログからデジタルへの変換と定量的な符号化で、アナログ信号をデジタル信号に変換するにはサンプリング処理が必要です。サンプリング周波数、つまりサンプリングレートは、1秒間に何回サンプリングするかということです。
サンプリングレートの決定
サンプリング・レート、つまり1秒間に何回サンプルを採取するか。
- ナイキスト・サンプリング定理によると、正弦波波形の周波数の2倍でサンプリングすると、その波形を完全に忠実に再現することができます。
- フーリエの原理は、連続的に測定された時系列や信号は、異なる周波数の正弦波信号の無限の重ね合わせとして表現できることを示しています。
- 人間の発声周波数帯域はおよそ300Hzから3400Hzなので、8kHzのサンプリング・レートはすでに人々の音声通話のニーズを満たすことができます。
- 人間の耳の可聴周波数範囲は20Hz~20kHzなので、44.1kHzは20kHz以下のすべての音声周波数を再生することができます。
ビット深度とサンプル解像度
ビット数が多いほど、表現できる音声信号の解像度が高くなります。音波をサンプリングする場合、元の音波の振幅に最も近い振幅値が各サンプルに割り当てられます。ビット深度が高いほど、可能な振幅値が多くなり、ダイナミックレンジが広く、ノイズフロアが低く、忠実度が高くなります。現在最も一般的に使用されているのは、1サンプルあたり16ビットです。
サウンドチャンネル
モノラル、ステレオは、ここで説明するサウンドチャンネルを指します。サウンドチャンネルとは、サウンドの録音や再生時に異なる空間位置でキャプチャまたは再生される、相互に独立したオーディオ信号のことです。
上記のデータを使って、素のオーディオデータのサイズを計算することができます。
データ量 = x 時間 / 8
オーディオフォーマット
PCM
PCM:Pulse Code Modulation(パルス符号変調)の略で、符号化や圧縮を行わずに音をサンプリングして数値化する処理。PCMデータは完全で可逆性があるため、音質が良い反面、サイズが大きくなるため、音声を圧縮する様々な方法があります。最も一般的なのは、国際標準化機構(ISO)によって提案されたMPEGシリーズの規格と、DolbyによるACシリーズの規格です。
非可逆圧縮と可逆圧縮:非可逆圧縮とは、圧縮後に生成される新しいファイルに保持される音声信号を、元の形式の信号よりも減少させる圧縮方式のことで、非可逆圧縮方式は情報圧縮とも呼ばれます。この圧縮方法は、圧縮の目的を達成するために、元のデータは、この鈍感なデータの除去の一部になりますから、鈍感の特性のいくつかの周波数成分でイメージや音に人間の視覚や聴覚を利用しています。可逆圧縮は、圧縮後に生成された新しいファイルに保持される音信号は、元の形式とまったく同じ相対的であることを意味し、カットせずに圧縮はまた、冗長圧縮として知られている可逆圧縮です。この圧縮方式は数学的には可逆演算であり、圧縮符号化前と圧縮後のデータは全く同じです。
MP3
MP3は、MPEG-1で使用されている音声圧縮規格で、正式名称はMPEG-1 Audio Layer 3です。MP3は、人間の耳が高周波数の音声信号に弱いことを利用して、高周波数の信号の圧縮率を高くする一方、低周波数の信号の圧縮率を小さくして、信号が歪まないようにしています。 MP3は非可逆圧縮です。
AAC
AACはMPEG-2をベースにした音声符号化技術で、2000年にMPEG-4規格が登場した後、AACの特性を再統合し、従来のMPEG-2 AACと区別するためにMPEG-4 AACと呼ばれるようになりました。 AACは非可逆圧縮です。
WAV
WAV:マイクロソフトがWindows専用に開発した標準デジタル音声ファイルで、モノラルまたはステレオのさまざまな音声情報を記録でき、音が歪まないようにすることができます。 WAVは非可逆圧縮です。
IV. ビデオ
フレーム
フレームは、基本的な概念の一般的なビデオの開発であり、イメージとして表現することができ、ビデオは本質的にフレームの数であるため、ビデオは多くのビデオフレームで構成されています。
GOP
GOPはGroup of Pictureの略で、2つのIフレームの間隔を指します。
PTS およびDTS
BフレームとPフレームがあり、あるフレームのデコード順と表示順が異なる場合があるため、PTSとDTSという概念があります。
- DTS, Decoding TimeStamp デコードのタイムスタンプ。
- PTS、Presentation TimeStamp プレーヤーにフレームを表示するタイミングを伝えるタイムスタンプ。
フレームレート
fps (Frames Per second)、1秒間に表示・伝送されるフレーム数。フレームレートは映像の滑らかさに関係し、フレームレートが大きいほど映像は滑らかになり、フレームレートが小さいほど映像は動かなくなります。通常、フレームレートは25fpsに設定されます。フレームレートが24fpsより大きいと、人間の目にはイメージが連続的に見えるからです。
解像度
解像度 = 画面の水平方向のピクセル値 * 画面の垂直方向のピクセル値。一般的な例は1280x720で、これは水平方向に1280ピクセル、垂直方向に720ピクセルあることを意味します。ディスプレイの幅と高さが固定されている場合、解像度が高いほどイメージサイズは大きく鮮明になり、解像度が低いほどイメージサイズは小さくなり、固定された幅と高さがイメージ解像度より大きければ、イメージはぼやけます。
ビットレート
bps(Bits per second)とは、1秒間に送信されるデータのビット数のこと。一般的な単位はkbpsとmbps。フレームレートが大きいほど、1秒間に伝送されるフレーム数が多くなり、解像度が大きいほど、各フレームのコンテンツサイズが大きくなるため、フレームレートと解像度が大きいほど、ビットレートも大きくなります。
ストリーミング
ストリーミングの概念は、実際には連続的なビデオデータを指します。例えば、撮影後の映像データストリームはベアストリームと呼ばれることが多く、YUVフォーマットであればYUVストリーム。H264形式でエンコードされている場合は、H264ストリームと呼びます。ビデオストリーム処理では、ベアストリームからH264ストリームへの処理をエンコードと呼び、その逆をデコードと呼びます。
H26x および MPEGx
イメージは圧縮することができ、ビデオも例外ではありません。元のデータは圧縮されていない場合、これらの元のデータで構成されるビデオは、当然のことながら、帯域幅要件の増加のネットワーク伝送で、非常に大きいですので、多くの類似性と他の特性によって2つのフレームの前後のビデオは、元のビデオデータが圧縮空間の多くがあるので、元のデータYUVの後。このため、さまざまな動画圧縮規格が開発されました。 ITUはH.26xシリーズの動画圧縮規格の開発を主導し、ISOはMPEGシリーズの動画圧縮規格を開発しました。その後、この2つの組織は多くの規格を共同で開発したため、同じ規格がH.26xやMPEGxという別の名前で呼ばれることもあります。両者の関係はおおよそ以下の通り。
H264 別名:MPEG-4 , AVC H265 別名:MPEG-H , HEVC
ストリーミングメディアプロトコル
ビデオファイルは、通常、オーディオデータとビデオデータが含まれています、ビデオファイルは、データの2つのストリーム、1つのビデオストリーム、1つのオーディオストリームが含まれています、中国語と英語のスイッチビデオ用の2つのオーディオストリームがあります。どのようにファイルに一定の形式に従ってエンコードされ、圧縮されたビデオデータとオーディオデータを持つことはカプセル化と呼ばれ、これらのデータを運ぶカプセル化形式は、通常、コンテナと呼ばれています。例えば、mp4コンテナは、H264のビデオストリームとAACのオーディオストリームを持っています。一般的なビデオカプセル化形式には、MP4、Flv、AVIなどがあります。
AVI
AVIは、Audio Video Interleavedとして知られ、MicrosoftがWindowsビデオソフトウェアの一部として導入したコンテナ形式です。AVIファイルには、1つのファイルコンテナにオーディオとビデオの両方のデータが含まれており、オーディオとビデオの同時再生が可能です。
MP4
MP4はMPEG-4 Part 14として知られ、MPEG-4の一部です。ほとんどの一般的なMP4ファイルは、AVCまたはMPEG-4エンコードされたビデオとAACエンコードされたオーディオを保持していますが、それは、その中にデータの任意の種類を埋め込むことができると考えられています。
FLV
TS
TSの正式名称はTransport Streamで、MPEG2-TSに属します。 MPEG2-TSフォーマットの特徴は、ストリームのどの部分も独立してデコードできる必要があることです。したがって、一般的なtsファイルは完全なビデオの小さな断片であり、すべてのtsファイルは完全なビデオを構成しています。
ストリーミング・プロトコル
RTMP、HLS、HTTP-FLVはライブ・ストリーミング・プロトコルです。
RTMP
RTMP は TCP 上で動作するプロトコルで、デフォルトでポート 1935 を使用します。プロトコルの基本的なデータ単位はメッセージで、送信プロセス中に小さなチャンクに分割されます。分割されたメッセージ・チャンクはTCPで送信され、受信側は受信したメッセージ・チャンクをデコードしてストリーミング・データに復元します。
HLS
HLSはAppleによって導入されたライブ・ストリーミング・プロトコルで、ライブ・ストリーミングのためにファイル・フラグメントにスライスされたビデオ・ストリームを使用します。異なるビットレートのストリームを含むm3u8ファイル、またはtsファイルのリストを要求することから始まり、tsファイルのアドレスを与えることで順番に再生されます。ライブ放送中、m3u8ファイルは、tsリストに新しいtsスライスがあるかどうかをチェックするために、継続的にリクエストされます。
簡単に言えば、HLS プロトコルは、ビデオのカプセル化フォーマットとして TS を使用し、TS ビデオファイル自体に加えて、再生を制御するために使用される m3u8 ファイルを定義します。
m3u8は、UTF-8でエンコードされたM3UのUnicodeバージョンです。m3u "ファイルと "m3u8 "ファイルの両方が、HLSプロトコルフォーマットの基礎となっています。m3u8ファイルは基本的にプレイリストであり、その内部情報は一連のメディアクリップリソースとして記録されており、クリップリソースを再生するシーケンスによって、マルチメディアリソースを完全に表示することができます。リソースを再生する順序は、マルチメディアリソースを完全に表示することができます。リソースを再生すると、ビデオ全体の総時間は、各.ts スライスリソースの時間の合計であることがわかります。
HLS での再生中にダウンロードされた m3u8 コンテンツ
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=,RESOLUTION=,CODECS="avc1.42e00a,mp4a.40.2"
http://../////_.u8
#EXT-X-STREAM-INF:BANDWIDTH=,RESOLUTION=,CODECS="avc1.42e00a,mp4a.40.2"
http://../////_.u8
#EXT-X-STREAM-INF:BANDWIDTH=,RESOLUTION=,CODECS="avc1.42e00a,mp4a.40.2"
http://../////_.u8
#EXT-X-STREAM-INF:BANDWIDTH=,RESOLUTION=,CODECS="avc1.42e00a,mp4a.40.2"
http://../////_.u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://../////_.u8
HTTP-FLV
HTTP-FLV は、ストリーミングデータを FLV フォーマットにカプセル化し、HTTP プロトコルで送信します。MIME の特性を利用し、プロトコルの Content-Type に従ってコンテンツを処理する適切なプログラムを選択することで、ストリーミングメディアを HTTP 経由で送信することができます。