huazi

huazi

音声およびビデオ関連の知識のまとめ

コンテナ形式#

私たちはよく、拡張子で示されるさまざまなビデオを見ます:avi、rmvb、mp4、flv、mkv など。これらの形式はコンテナ形式を表しています。コンテナ形式とは、ビデオデータとオーディオデータを 1 つのファイルにパッケージ化するための規格です。拡張子だけでは、具体的にどのビデオオーディオエンコード規格が使用されているかはわかりにくいです。

ビデオのプロパティを確認することで、ビデオファイルがどのビデオオーディオ技術を使用しているかを確認できます。または、MediaInfo ソフトウェアを使用して確認できます。

コンテナ形式の主な役割は、ビデオストリームとオーディオストリームを特定の形式で 1 つのファイルに格納することです。
主なコンテナ形式:

audio_video_table.png

ビデオプレーヤーの原理#

ビデオオーディオ技術には、以下の要素が含まれます:コンテナ技術、ビデオ圧縮エンコード技術、およびオーディオ圧縮エンコード技術。ネットワーク転送を考慮する場合、ストリーミングプロトコル技術も含まれます。

インターネット上のビデオファイルを再生するために、ビデオプレーヤーは次の手順を経ます:
プロトコルの解析、コンテナの解凍、ビデオオーディオのデコード、ビデオオーディオの同期。
ローカルファイルを再生する場合、次の手順は必要ありません:
コンテナの解凍、ビデオオーディオのデコード、ビデオオーディオの同期。

audio_video_play_1.jpeg

プロトコルの解析は、ストリーミングプロトコルのデータを、対応する標準のコンテナ形式データに解析することです。ビデオオーディオはネットワークで伝送される際、さまざまなストリーミングプロトコル(HTTP、RTMP、HLS、MMS など)が使用されることがよくあります。これらのプロトコルは、ビデオオーディオデータの転送と同時に、いくつかの制御シグナルデータも転送します。これらの制御シグナルデータには、再生制御(再生、一時停止、停止)やネットワーク状態の説明などが含まれます。プロトコルの解析プロセスでは、制御シグナルデータを削除し、ビデオオーディオデータのみを保持します。たとえば、RTMP プロトコルを使用して転送されるデータは、プロトコルの解析操作を経て、FLV 形式のデータが出力されます。

コンテナの解凍は、入力されたコンテナ形式のデータをオーディオストリーム圧縮エンコードデータとビデオストリーム圧縮エンコードデータに分離することです。コンテナ形式はさまざまで、MP4、MKV、RMVB、TS、FLV、AVI などがあります。その役割は、既に圧縮エンコードされたビデオデータとオーディオデータを特定の形式でまとめることです。たとえば、FLV 形式のデータは、コンテナの解凍操作を経て、H.264 エンコードされたビデオストリームと AAC エンコードされたオーディオストリームが出力されます。

デコードの役割は、ビデオ / オーディオ圧縮エンコードデータを非圧縮のビデオ / オーディオの元のデータにデコードすることです。オーディオの圧縮エンコード規格には AAC、MP3、AC-3 などが含まれ、ビデオの圧縮エンコード規格には H.264、MPEG2、VC-1 などが含まれます。デコードはシステム全体で最も重要で複雑なプロセスです。デコードにより、圧縮エンコードされたビデオデータは非圧縮のカラーデータ(YUV420P、RGB など)に出力され、圧縮エンコードされたオーディオデータは非圧縮のオーディオサンプルデータ(PCM データなど)に出力されます。

ビデオオーディオの同期の役割は、解凍モジュールの処理中に取得したパラメータ情報に基づいて、デコードされたビデオとオーディオデータを同期させ、ビデオオーディオデータをシステムのグラフィックカードとサウンドカードに送信して再生することです。

ビデオエンコード#

ビデオエンコードの主な役割は、ビデオピクセルデータ(RGB、YUV など)をビデオストリームに圧縮し、ビデオのデータ量を減らすことです。ビデオを圧縮エンコードしない場合、通常は非常に大きなサイズになります。映画 1 本でも数百 G のスペースが必要です。ビデオエンコードは、音声およびビデオ技術の中で最も重要な技術の 1 つです。ビデオストリームのデータ量は、音声およびビデオの総データ量の大部分を占めます。効率の高いビデオエンコードは、同じビットレートの場合でもより高品質なビデオを得ることができます。

主なビデオエンコード方式:HEVC(H.265)、H.264、MPEG4、MPEG2、VP9、VP8 など。
現在の主流のエンコード規格:H.264
H.264 は単なるエンコード規格であり、具体的なエンコーダではありません。H.264 はエンコーダの実装に参照用のものです。

現在、H.265 をサポートしているデバイスも増えています。

オーディオエンコード#

オーディオエンコードの主な役割は、オーディオサンプルデータ(PCM など)をオーディオストリームに圧縮し、オーディオのデータ量を減らすことです。オーディオエンコードもインターネット音声およびビデオ技術の中で重要な技術です。ただし、通常、オーディオのデータ量はビデオのデータ量よりもはるかに小さいため、やや遅れたオーディオエンコード規格を使用しても、オーディオデータ量がわずかに増加するだけで、音声およびビデオの総データ量に大きな影響を与えることはありません。

主なオーディオエンコード:AAC、MP3、WMA など

Android プラットフォームで提供されるメディアエンコーダ、コンテナ、およびネットワークプロトコルのサポート:
https://developer.android.com/guide/topics/media/media-formats

たとえば、Android デバイスは、AudioRecord で収集した PCM オーディオデータを AAC 形式のオーディオデータにエンコードし、それを AudioTrack を介して PCM にデコードして再生します。

ビデオトランスコード / 圧縮#

ビデオトランスコードは、ビデオを最初にデコードし、それから特定の形式でエンコードすることと理解できます。
ビデオの圧縮は実際にはトランスコードであり、再エンコードであり、比較的小さなビデオで受け入れ可能なビデオを取得することです。

音声およびビデオの圧縮の基本原理:https://blog.csdn.net/leixiaohua1020/article/details/28114081

では、ビデオのサイズは何に影響されるのでしょうか?

決定要因はビットレート(一般的な単位は kbps)であり、「1 秒あたりのデータ量」を示します。ビットレートが大きいほど、ビデオのサイズも大きくなります。解像度が 1080p、720p、またはその他のサイズであっても、同じビットレートの 720p ビデオと 1080p ビデオのファイルサイズは同じですが、画質が異なります。

ビットレートに影響を与える要因は次のとおりです:

  1. 他の条件が同じ場合、画面サイズ(1080p、720p、480p など)が大きいほど、ビットレートも大きくなります。
  2. 他の条件が同じ場合、フレームレート(25fps、30fps、60fps など)が高いほど、ビットレートも大きくなります。
  3. エンコードアルゴリズムも影響を与えます。優れたアルゴリズムは、画質の低下が少ない状態でビットレートを低下させ、したがってビデオファイルのサイズを減らすことができます。

ビデオサイズを計算するための簡単な公式:

ビットレート(kbps)× ビデオの時間(秒)÷8 = ビデオファイルのサイズ(kb)

現在、プロジェクトで使用しているビデオ圧縮ライブラリ:https://github.com/ypresto/android-transcoder

Android MediaCodec:https://developer.android.com/reference/android/media/MediaCodec

MediaCodec は、API 16 以降で Google が導入した、ビデオおよびオーディオのエンコードおよびデコードに使用される低レベルの API です。呼び出す際には、まず MediaCodec をビデオのエンコーダとして初期化し、続けて元の YUV データをエンコーダに入力するだけで、エンコードされた h264 ストリームが直接出力されます。API の設計モデル全体を見ると、入力側と出力側の 2 つのキューを同時に持つことがわかります:

audio_video_image2.png

エンコーダとしての場合、入力側のキューには元の YUV データが格納され、出力側のキューにはエンコードされた h264 ストリームが出力されます。デコーダの場合は逆です。

transcode_img.png

参考:https://me.csdn.net/leixiaohua1020

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。