オーディオとビデオのハードデコード記事-オーディオとビデオの基本的な知識

今日、短いビデオアプリは活況を呈し、繁栄しています。短いビデオの台頭により、オーディオとビデオの開発はますます注目を集めていますが、オーディオとビデオの開発には幅広い知識と比較的高い参入障壁が関係しているため、多くの開発者は気が遠くなります。

1.ビデオとは何ですか?

若い頃にアニメの小人本をプレイしたことがあるかどうかはわかりません。続けてめくると、小人本の写真は現在のgif形式の写真と同じようにアニメーションになります。
ここに画像の説明を挿入

もともとは静的な小さな本でしたが、めくった後は面白い小さなアニメーションになります。十分な写真があり、めくりの速度が十分に速い場合、これは実際には小さなビデオです。

ビデオの原理はまったく同じです。人間の目の特殊な構造により、画像をすばやく切り替えると、画像が残り、まとまりのあるアクションのように感じられます。したがって、ビデオは一連の写真で構成されています。

ビデオフレーム

ビデオの基本概念であるフレームは、上のフリップフロップのページなどの画像を表し、フレームです。ビデオは多くのフレームで構成されています。

フレームレート

フレームレート、つまり、単位時間あたりのフレーム数。単位は、フレーム/秒またはfps(フレーム/秒)です。たとえば、アニメーションブックでは、1秒間に含まれる画像の数が多いほど、画像が滑らかになり、遷移が自然になります。

フレームレートは通常、次の一般的な値です。

24/25 fps:24/25フレーム/秒、一般的なムービーフレームレート。
30/60 fps:1秒30/60フレーム、ゲームのフレームレート、30フレームが許容され、60フレームはよりスムーズでリアルに感じられます。
85 fpsを超えると、人間の目は基本的にそれを検出できないため、フレームレートを高くしてもビデオではあまり意味がありません。

色空間

ここでは、一般的に使用される2つの色空間についてのみ説明します。

RGB

RGBカラーモードは私たちが最もよく知っているものでなければならず、現在の電子機器で広く使用されています。RGBの3つの基本色により、すべての色を混合できます。

YUV

ここではYUVに焦点を当てますが、この種の色空間は私たちにはなじみがありません。これは、明るさと彩度を分離するカラーフォーマットです。
初期のテレビはすべて白黒でした。つまり、明るさの値、つまりYだけでした。カラーテレビでは、UVの2つの色度が追加され、YCbCrとも呼ばれる現在のYUVが形成されました。
Y:明るさ。これはグレー値です。輝度信号を表現することに加えて、それはまたより多くの緑のチャンネルを含んでいます。
U:青チャンネルと明るさの違い。
V:赤チャンネルと明るさの差。

YUVを使用する利点は何ですか?

人間の目は明るさに敏感で色度に敏感ではないため、UVデータの量は減りますが、人間の目はそれを認識できません。このようにして、UV解像度を圧縮して、ビデオのボリュームを減らすことができます。ルックアンドフィール。

RGBとYUVの変換

Y = 0.299R + 0.587G + 0.114B 
U =0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
——————————————————
R = Y + 1.14V
G = Y - 0.39U0.58V
B = Y + 2.03U

2.オーディオとは何ですか?

オーディオデータを伝送するために最も一般的に使用される方法は、パルス符号変調(PCM)です。

自然界では、音は連続的でアナログ信号ですが、どうすれば音を保存できますか?つまり、音をデジタル化する、つまりデジタル信号に変換することです。

音はそれ自身の振幅と周波数を持つ波であることがわかっています。音を保存するには、さまざまな時点での音の振幅を保存する必要があります。

デジタル信号は、すべての時点で振幅を連続的に保存することはできません。実際、人間の耳に受け入れられる音を復元するために、連続信号を保存する必要はありません。

ナイキストのサンプリング定理によると、歪みなしでアナログ信号を復元するには、サンプリング周波数がアナログ信号スペクトルの最高周波数の2倍以上である必要があります。

上記の分析によると、PCMの取得ステップは次のステップに分けられます。

アナログ信号->サンプリング->量子化->エンコーディング->デジタル信号

ここに画像の説明を挿入

サンプリングレートとサンプリングビット数

サンプリングレート、つまりサンプリングの頻度。

前述のように、サンプリングレートは元の音波の周波数の2倍以上であり、人間の耳が聞くことができる最高周波数は20kHzです。したがって、人間の耳の聴覚要件を満たすために、サンプリングレートは少なくとも40kHz、通常は44.1kHzであり、それより高いものは通常48kHzです。

サンプリングビット数は、上記の振幅量子化に関連しています。波形振幅もアナログ信号の連続サンプル値であり、デジタル信号では信号が一般的に不連続であるため、アナログ信号を量子化した後は、おおよその整数値しか取得できません。これらの振幅値を記録するために、サンプラーはAを使用します。これらの振幅値を記録するために固定数のビットが使用されます。通常は8ビット、16ビット、および32ビットです。

桁数 最小 マックス
8 0 255
16 -32768 32767
32 -2147483648 2147483647

桁数が多いほど、記録された値が正確になり、復元の度合いが高くなります。

最後のステップはコーディングです。デジタル信号は0と1で構成されているため、振幅値は保存、つまりエンコードのために一連の0と1に変換する必要があり、取得される最終データはデジタル信号です。一連の0と1データ。

全体のプロセスは次のとおりです。ここに画像の説明を挿入
チャネルの数

チャネル数は、さまざまなサウンドをサポートするスピーカーの数を指します(さまざまなサウンドに注意してください)。

モノ:1チャンネル

デュアルチャネル:2チャネル

ステレオチャンネル:デフォルトで2チャンネル

ステレオチャンネル(4チャンネル):4チャンネル

ビットレート

ビットレートとは、データストリームで1秒あたりに渡すことができる情報の量をbps(ビット/秒)単位で表します。

コードレート=サンプリングレート*サンプリングビット数*チャネル数

3、なぜコーディングするのか

ここでのエンコーディングは、上記のオーディオで説明したエンコーディングと同じ概念ではありませんが、圧縮エンコーディングを指します。

コンピュータの世界では、すべてが0と1で構成されており、オーディオとビデオのデータも例外ではありません。オーディオとビデオのデータが大量にあるため、生のストリームデータとして保存すると、非常に大きなストレージスペースが必要になりますが、これも送信に役立ちません。オーディオとビデオには、実際には0と1の繰り返しデータが多数含まれているため、0と1のデータは特定のアルゴリズムで圧縮できます。

特にビデオでは、画像が徐々に遷移するため、ビデオ全体に画像/ピクセルの繰り返しが多数含まれ、非常に大きな圧縮スペースが提供されます。

したがって、エンコーディングを使用すると、オーディオおよびビデオデータのサイズを大幅に削減でき、オーディオおよびビデオの保存と送信が容易になります。

4、ビデオエンコーディング

ビデオエンコーディングフォーマット

H26xシリーズやMPEGシリーズコーディングなど、多くのビデオコーディングフォーマットがあります。これらのコーディングフォーマットは、時代の発展に適応するために登場しました。

その中で、H26x(1/2/3/4/5)シリーズはITU(国際電気通信連合)が主導しています
。MPEG(1/2/3/4)シリーズはMPEG(Moving Picture Experts Group、ISO)が主導しています。子会社)。組織)が支配的です。

もちろん、現在の主流のコーディング形式H264である共同コーディング標準、そしてもちろん次世代のより高度な圧縮コーディング標準H265もあります。

H264エンコーディングの概要

H264は現在最も主流のビデオコーディング標準であるため、以降の記事では主にこのコーディング形式をベンチマークとして使用します。

H264はITUとMPEGによって共同でカスタマイズされており、MPEG-4の10番目の部分に属しています。

H264エンコーディングアルゴリズムは非常に複雑であるため、すぐに明確に説明することはできず、現在の能力の範囲内でもありません。したがって、ここでは、日常の開発で理解する必要のある概念の簡単な紹介にすぎません。実際、ビデオのエンコードとデコードの部分は通常、フレームワーク(Androidハードウェアデコード/ FFmpegなど)によって完了され、平均的な開発者はそれに触れません。

ビデオフレーム

ビデオが1フレームずつ構成されていることはすでに知っていますが、ビデオデータでは、元のデータに従って1フレームずつ実際に保存されるわけではありません(この場合、圧縮コーディングは無意味です)。

H264は、一定期間内の画像の変化に応じて1つのフレームを完全なエンコーディングとして選択し、動的圧縮プロセスである次のフレームと前のフレームの完全なデータの差のみを記録します。

H264では、3種類のフレームデータは次のとおりです。

Iフレームフレーム内コード化フレーム。完全なフレームです。

Pフレーム:前方予測コーディングフレーム。前のIフレームまたはPフレームを参照して生成された不完全なフレームです。

Bフレーム:双方向予測補間コーディングフレーム。生成する前と後の画像フレームエンコーディングを参照してください。Bフレームは、その前の最も近いIフレームまたはPフレームと、その後の最も近いPフレームに依存します。

画像グループ:GOPおよびキーフレーム:IDR

フルネーム:写真のグループ。ほとんど変更のないビデオフレームのグループを指します。

GOPの最初のフレームがキーフレームになります:IDR

IDRはすべてIフレームであるため、1つのフレームが誤ってデコードされ、後続のすべてのフレームでデコードエラーが発生するのを防ぐことができます。デコーダーがIDRをデコードしているときは、前の参照フレームをクリアして新しいシーケンスを再開するため、前のフレームのデコードで大きなエラーが発生しても、後続のデータに拡散することはありません。

注:キーフレームはすべてIフレームですが、Iフレームは必ずしもキーフレームである必要はありません。

DTSとPTS

DTSのフルネーム:デコードタイムスタンプ。メモリに読み込まれたデータストリームがデコードのためにデコーダに送信されるタイミングを示します。つまり、デコード順序のタイムスタンプです。

PTSのフルネーム:プレゼンテーションタイムスタンプ。デコードされたビデオフレームが表示されるタイミングをマークするために使用されます。

Bフレームがない場合、DTSとPTSの出力シーケンスは同じです。Bフレームがあると、PTSとDTSは異なります。

フレームの色空間

以前、RGBとYUVの2つの画像色空間を導入しました。H264はYUVを使用しています。
YUVの保管方法は、平面とパックの2つのカテゴリに分類されます。

平面:最初にすべてのYを格納し、次にすべてのUを格納し、最後にVを格納します。

パック:各ピクセルのY、U、およびVは、連続的にインターリーブされて格納されます。
平面は次のとおりです。

ここに画像の説明を挿入
次のように梱包されています:ここに画像の説明を挿入

ただし、パックストレージ方式はほとんど使用されておらず、ほとんどのビデオは平面ストレージ方式で保存されます。

前述のように、人間の目は色度に対する感度が低いため、色度情報の一部を省略できます。つまり、明るさは色度情報の一部を共有し、それによってストレージスペースを節約します。したがって、planarは、YUV444、YUV422、およびYUV420の形式を区別します。

YUV 4:4:4サンプリング、各YはUVコンポーネントのセットに対応します。ここに画像の説明を挿入
YUV 4:2:2サンプリング、2つのYごとにUVコンポーネントのセットを共有します。ここに画像の説明を挿入
YUV 4:2:0サンプリング、4つのYごとにUVコンポーネントのセットを共有します。

ここに画像の説明を挿入
その中で、最も一般的に使用されているのはYUV420です。

YUV420フォーマットの保存方法

YUV420は平面ストレージ方式に属しますが、2つのタイプに分けられます。

YUV420P:3プレーンストレージ。データ構成は、YYYYYYYYUUVV(I420など)またはYYYYYYYYVVUU(YV12など)です。

YUV420SP:2プレーンストレージ。YYYYYYYYUVUV(NV12など)またはYYYYYYYYVUVU(NV21など)の2つのタイプに分けられます

H264のコーディングアルゴリズムとデータ構造に関しては、多くの知識とスペースが関係しています(ネットワーク抽象化レイヤーNAL、SPS、PPSなど)。この記事では詳しく説明しません。インターネット上にも多くのチュートリアルがあります。あなたが興味を持っているなら、あなたはあなた自身でもっと学ぶことができます。

5、オーディオコーディング

オーディオエンコーディングフォーマット

元のPCMオーディオデータも非常に大量のデータであるため、圧縮してエンコードする必要もあります。

ビデオエンコーディングと同様に、オーディオにもWAV、MP3、WMA、APE、FLACなどの多くのエンコーディングフォーマットがあります。音楽愛好家はこれらのフォーマット、特に後者の2つのロスレス圧縮フォーマットに精通している必要があります。

ただし、今日の主人公はそれらではなく、AACと呼ばれる別の圧縮形式です。

AACは、新世代の音声不可逆圧縮技術であり、高圧縮率の音声圧縮アルゴリズムです。MP4ビデオのオーディオデータは、ほとんどの場合AAC圧縮形式を使用します。

AACコーディング入門

AACには、ADIFとADTSの2つの主要な形式があります。

ADIF:オーディオデータ交換フォーマット。オーディオデータ交換フォーマット。この形式の特徴は、オーディオデータストリームの途中でデコードを開始する必要なしに、オーディオデータの開始を決定論的に見つけることができることです。つまり、そのデコードは明確に定義された開始時に実行する必要があります。この形式は、ディスクファイルで一般的に使用されます。

ADTS:オーディオデータトランスポートストリーム。オーディオデータ伝送ストリーム。このフォーマットの特徴は、同期ワードを含むビットストリームであり、デコードはこのストリームの任意の位置から開始できることです。その特性は、mp3データストリーム形式に似ています。

ADTSは任意のフレームでデコードでき、各フレームにはヘッダー情報があります。ADIFには統合ヘッダーが1つしかないため、すべてのデータを取得した後でデコードする必要があります。また、これら2つのヘッダーの形式も異なります。現在、ADTS形式のオーディオストリームは一般的にエンコードされています。

ADIFデータ形式:

header	raw_data

ADTS 1フレームデータ形式(中央部分、左右の省略記号は前面と背面のデータフレームです):ここに画像の説明を挿入

6つのオーディオおよびビデオコンテナ

注意深い読者は、私たちが紹介したさまざまなオーディオおよびビデオのエンコード形式のどれも、mp4、rmvb、avi、mkv、movなどの通常使用するビデオ形式ではないことに気付いたかもしれません。

そうです、これらのおなじみのビデオ形式は、実際にはオーディオとビデオエンコーディングデータをラップするコンテナであり、特定のエンコーディング標準でエンコードされたビデオストリームとオーディオストリームを1つのファイルに混合するために使用されます。

例:mp4は、H264やH265などのビデオエンコーディングとAACやMP3などのオーディオエンコーディングをサポートしています。

mp4は現在最も人気のあるビデオ形式です。モバイル端末では、ビデオは通常mp4形式でカプセル化されます。

セブン、ハードデコードとソフトデコード

ハードソリューションとソフトソリューションの違い

一部のプレイヤーでは、ハードデコードとソフトデコードの2つの再生形式を選択できることがわかりますが、ほとんどの場合、それらの違いを感じることはできません。通常のユーザーにとっては、再生できる限りです。

では、それらの違いは何ですか?

携帯電話やPCには、CPU、GPU、デコーダーなどのハードウェアがあります。通常、計算はソフトウェアの実行チップであるCPUで実行され、GPUは主に画像の表示(ハードウェアアクセラレーションの一種)を担当します。

いわゆるソフトデコードとは、CPUの計算能力を利用してデコードすることを指します。一般に、CPUの能力があまり強くないと、デコード速度が遅くなり、電話が熱くなることがあります。ただし、統一されたアルゴリズムを使用しているため、互換性は非常に良好です。

ハードデコードとは、携帯電話で専用のデコードチップを使用してデコードを高速化することです。一般に、ハードデコードのデコード速度ははるかに高速ですが、ハードデコードはさまざまなメーカーによって実装されているため、品質が不均一であり、互換性の問題が発生しやすくなります。

Linux、C / C ++テクノロジーエクスチェンジグループ:[960994558]いくつかの学習ブック、大手企業からのインタビューの質問、共有に適していると思う人気のテクノロジー教育ビデオ資料(C / C ++、Linux、Nginx、ZeroMQ、 MySQL)、Redis、fastdfs、MongoDB、ZK、ストリーミングメディア、CDN、P2P、K8S、Docker、TCP / IP、coroutine、DPDKなど)、必要に応じて自分で追加できます!
オーディオおよびビデオ学習教材
ここに画像の説明を挿入
FFmpeg / WebRTC / RTMPオーディオおよびビデオストリーミングメディアの高度な開発

上記の欠陥は​​議論を指摘することを歓迎します、そして気分が良い友人はあなたの好きなものとサポートを得ることを望んでいます

おすすめ

転載: blog.csdn.net/weixin_52622200/article/details/113394632